Читать на других языках: English, Türkçe, 한국어, اُردو, Español
MonoGram — это современный, молниеносный и элегантный неофициальный клиент Telegram для Android. Созданный с использованием Jetpack Compose и Material Design 3, он обеспечивает нативный и плавный опыт использования на базе официальной библиотеки TDLib.
Important
MonoGram находится в стадии активной разработки. Ожидайте частых обновлений, архитектурных изменений и возможных ошибок.
Поддержите наш проект на Boosty.
- Независимый клиент — Не форк Telegram для Android. MonoGram написан полностью с нуля как самостоятельный проект.
- Material Design 3 — Красивый, адаптивный интерфейс, который отлично смотрится на телефонах, планшетах и складных устройствах.
- Безопасность — Встроенная биометрическая блокировка и зашифрованное локальное хранилище.
- Мультимедиа — Высокопроизводительное воспроизведение медиа с ExoPlayer и Coil 3.
- Быстродействие — Работает на Kotlin Coroutines и оптимизирован для производительности.
- Clean Architecture — Чёткое разделение ответственности с помощью слоёв Domain, Data и Presentation.
- Паттерн MVI — Предсказуемое управление состоянием с использованием MVIKotlin.
- Без NFT и крипты — MonoGram никогда не будет включать NFT, подарки и прочие функции, продвигаемые Telegram, которые мы считаем лишними в мессенджере.
Следуйте этим шагам, чтобы настроить проект локально.
- Android Studio: Ladybug или новее (рекомендуется).
- JDK: Java 17 или новее.
git clone --recurse-submodules https://github.com/monogram-android/monogram.git
cd monogramДля подключения к серверам Telegram вам понадобятся собственные учётные данные API.
- Войдите на my.telegram.org.
- Перейдите в API development tools.
- Создайте новое приложение, чтобы получить
App api_idиApp api_hash. - Создайте файл
local.propertiesв корневой директории проекта (если он не существует). - Добавьте следующие строки:
API_ID=12345678
API_HASH=your_api_hash_here- Войдите в консоль Firebase.
- Создайте новый проект.
- Добавьте новое приложение с нужным
applicationId. Если в проекте есть несколько вариантов с разными ID, создайте несколько приложений. По умолчаниюapplicationIdдля debug и release сборок отличаются. - Скачайте файл
google-services.jsonи скопируйте его в корень модуля app (monogram/app/google-services.json). Если вы создали несколько приложений, скопируйте только самый последний конфиг. - Перейдите в раздел Cloud Messaging.
- Нажмите Manage service accounts.
- В открывшемся окне выберите раздел Keys вверху.
- Нажмите Add key и выберите вариант JSON. Дождитесь скачивания файла.
- Вернитесь на страницу, где вы получали App ID от Telegram.
- Нажмите Update рядом с разделом FCM credentials.
- Загрузите JSON сервисного аккаунта на открывшейся странице.
Для анимаций требуется собрать libvpx. Это нужно сделать до запуска сборки Gradle, иначе сборка завершится с ошибками.
- Перейдите в директорию
presentation/src/main/cpp - В
build.shукажите вашANDROID_NDK_HOME - Запустите
build.shи дождитесь завершения
- Откройте проект в Android Studio.
- Увеличьте лимиты индексации IDE, чтобы
TdApi.java(обёртка над TDLib) корректно индексировался. В Android Studio или IntelliJ IDEA откройте Help → Edit Custom Properties..., вставьте строки ниже и при необходимости перезапустите IDE:
# size in Kb
idea.max.intellisense.filesize=20480
# size in Kb
idea.max.content.load.filesize=20480- Синхронизируйте Gradle.
- Выберите конфигурацию запуска
app. - Подключите устройство или запустите эмулятор.
- Нажмите Run.
Если вам необходимо собрать TDLib из исходного кода, сначала установите необходимые зависимости. Для дистрибутивов на основе Debian/Ubuntu:
sudo apt-get update
sudo apt-get install build-essential git curl wget php perl gperf unzip zip default-jdk cmakeЗатем запустите скрипт сборки из корневой директории проекта:
./build-tdlib.shМы приветствуем любой вклад в развитие проекта — будь то исправление ошибок, улучшение документации или предложение новых функций.
- Проверьте Issues — Посмотрите открытые задачи или создайте новую для обсуждения ваших идей.
- Работайте от
develop— Создавайте ветки отdevelopи держите все изменения на её базе. - Fork & Branch — Сделайте форк репозитория и создайте ветку для вашей функции.
- Стиль кода — Следуйте существующему стилю кода Kotlin и принципам Clean Architecture.
- Отправьте PR — Откройте Pull Request в
developс чётким описанием ваших изменений.
Important
- Соблюдайте Условия использования Telegram API.
- Убедитесь, что ваш код проходит все проверки и тесты.
- Ошибки — Откройте issue и используйте тег
[Bug]в заголовке (например,[Bug] Приложение падает при запуске). Список известных ошибок доступен на доске багов. - Запросы функций — Откройте issue с тегом
[Feature](например,[Feature] Поддержка отложенных сообщений). Существующие запросы можно найти на доске функций.
MonoGram приветствует переводы от сообщества! Вы можете добавить свой язык, отредактировав файл строковых ресурсов.
Исходные строки находятся в presentation/src/main/res/values/string.xml. Чтобы добавить новый язык, создайте соответствующий файл values-<locale>/string.xml (например, values-de/string.xml для немецкого) и переведите строки. Откройте PR с вашим переводом — мы его рассмотрим и примем.
MonoGram использует новейшие инструменты и библиотеки для разработки под Android:
| Категория | Библиотеки |
|---|---|
| Язык | Kotlin |
| UI Toolkit | Jetpack Compose (Material 3) |
| Архитектура | Decompose (Навигация), MVIKotlin |
| Внедрение зависимостей | Koin |
| Асинхронность | Coroutines & Flow |
| Ядро Telegram | TDLib (Telegram Database Library) |
| Загрузка изображений | Coil 3 |
| Медиа | Media3 (ExoPlayer) |
| Карты | MapLibre |
| Локальная БД | Room |
Проект следует многомодульной структуре для обеспечения разделения ответственности и масштабируемости:
| Модуль | Описание |
|---|---|
| :app | Основной модуль приложения Android. |
| :domain | Чистый Kotlin-модуль с бизнес-логикой, use cases и интерфейсами репозиториев. |
| :data | Реализация репозиториев, источников данных и интеграция с TDLib. |
| :presentation | UI-компоненты, экраны и view models (MVI Stores). |
| :core | Общие вспомогательные классы и расширения, используемые во всех модулях. |
| :baselineprofile | Baseline Profiles для оптимизации запуска и производительности приложения. |
Этот проект распространяется под лицензией GNU General Public License v3.0.



