size in Kb
June 11, 2026 · View on GitHub
MonoGram
Si deseas leer este documento en otro lenguaje: Русский, Türkçe, 한국어, اُردو, English
MonoGram es un moderno, rápido y elegante cliente no oficial de Telegram para Android. Construido con Jetpack Compose y Material Design 3, entrega una experiencia nativa y fluida, empoderada por el proyecto oficial TDLib.
Important
En estos momentos, MonoGram se encuentra en desarrollo activo. Espera actualizaciones frecuentes, cambios en la arquitectura, y algún que otro bug.
Ayuda al proyecto en Boosty.
Capturas de Pantalla
![]() | ![]() | ![]() | ![]() |
Características Clave
- Cliente Independiente — No es un fork de Telegram para Android. MonoGram está construido completamente desde cero como un proyecto independiente.
- Material Design 3 — Una bonita y adaptativa UI que se ve grandiosa en celulares, tablets y plegables.
- Seguro — Almacenamiento local encriptado y bloqueo biométrico incluido.
- Multimedia Rica — Reproducción de multimedia de alto rendimiento con ExoPlayer y Coil 3.
- Rápido y Eficiente — Empoderado por Kotlin Coroutines y optimizado para ofrecer rendimiento.
- Arquitectura Limpia — Separación clara de propósitos con capas de Domain, Data y Presentation.
- Patrón MVI — Administración de estados predecible usando MVIKotlin.
- Sin NFTs o Cripto — MonoGram nunca incluirá promociones sobre NFTs, regalos u otras características de Telegram que consideremos fuera del ámbito de una aplicacion de mensajería.
Comenzando
Sigue estos pasos para configurar el proyecto localmente.
Requisitos Previos
- Android Studio: Ladybug o más nuevo (recomendado).
- JDK: Java 17 o más nuevo.
1. Clona el Repositorio
git clone --recurse-submodules https://github.com/monogram-android/monogram.git
cd monogram
2. Configura las API Keys de Telegram
Para conectarse a los servidores de Telegram, necesitas tus propias credenciales API.
- Inicia sesión en my.telegram.org.
- Ve a API development tools.
- Crea una nueva aplicación para obtener tu
App api_idyApp api_hash. - Crea un nuevo archivo llamado
local.propertiesen el directorio raíz del proyecto. (si no existe). - Agrega las siguientes líneas:
API_ID=12345678
API_HASH=your_api_hash_here
Para compilar releases firmados desde Gradle, añade también estas propiedades:
RELEASE_STORE_FILE=keystore/release.jks
RELEASE_STORE_PASSWORD=your_store_password
RELEASE_KEY_ALIAS=your_key_alias
RELEASE_KEY_PASSWORD=your_key_password
3. Configurar notificaciones
Este paso es necesario para los variants firebase. Si solo planeas compilar variants libre,
puedes omitirlo.
-
Inicia sesión en la consola de Firebase.
-
Crea un nuevo proyecto.
-
Agrega dos aplicaciones Android en Firebase:
org.monogrampara builds releaseorg.monogram.debugpara builds debug
-
Descarga el archivo
google-services.jsony cópialo a la raíz de módulo app (monogram/app/google-services.json). Asegúrate de que el archivo incluya clientes para ambos package names. -
Ve a la sección Cloud Messaging.
-
Ve a Manage service accounts.
-
Selecciona la sección Keys en el tope de la ventana que se abre.
-
Clickea en Add key y selecciona la opción JSON. Espera al archivo a descargarse.
-
Vuelve a la pagina de la Telegram API donde recibiste tu App ID.
-
Clickea en Update después de la sección FCM credentials.
-
Sube el service account JSON en la página que se abre.
4. Primera Configuración: Compilar libvpx
Las animaciones requieren que libvpx esté compilado. Esto debe hacerse antes de iniciar una compilación de Gradle; de lo contrario, la compilación fallará.
- Cambia tu directorio de trabajo a
presentation/src/main/cpp. - En
build.sh, añade tuANDROID_NDK_HOME. - Ejecuta
build.shy espera a que termine.
5. Compilar y Ejecutar
- Abre el proyecto en Android Studio.
- Aumenta los límites de indexado del IDE para que
TdApi.java(el wrapper de TDLib) sea indexado correctamente. En Android Studio o IntelliJ IDEA, abre Help → Edit Custom Properties..., pega las siguientes líneas, y reinicia el IDE si es necesario:
# size in Kb
idea.max.intellisense.filesize=20480
# size in Kb
idea.max.content.load.filesize=20480
- Sincroniza Gradle.
- Selecciona la configuración de ejecución
app. - Conecta un dispositivo o inicia un emulador.
- Clickea Run.
Compilando TDLib
Si necesitas compilar TDLib desde el código fuente, primero, instala las dependencias necesarias. Para distribuciones basadas en Ubuntu o Debian:
sudo apt-get update
sudo apt-get install build-essential git curl wget php perl gperf unzip zip default-jdk cmake
Después ejecuta el script de compilación desde la raíz de tu proyecto:
./build-tdlib.sh
El script soporta:
./build-tdlib.sh official./build-tdlib.sh telemt./build-tdlib.sh both
Repositorios upstream usados por el script:
official: tdlib/tdtelemt: telemt/tdlib-obf
Si lo ejecutas sin argumentos, te pedirá elegir una opción.
Variants y tareas de Gradle
En Android Studio usa estos variants:
officialFirebaseDebugofficialFirebaseReleaseofficialLibreDebugofficialLibreReleasetelemtFirebaseDebugtelemtFirebaseReleasetelemtLibreDebugtelemtLibreRelease
Nombres de variants:
official/telemtselecciona la fuente de TDLibfirebasehabilita FCM / push con Firebaselibrecompila sin dependencias de Firebase
Tareas útiles de Gradle:
./gradlew :app:assembleOfficialFirebaseRelease
./gradlew :app:assembleTelemtFirebaseRelease
./gradlew :app:assembleOfficialFirebaseDebug
./gradlew :app:assembleTelemtFirebaseDebug
./gradlew :app:assembleOfficialLibreRelease
./gradlew :app:assembleTelemtLibreRelease
./gradlew :app:assembleOfficialLibreDebug
./gradlew :app:assembleTelemtLibreDebug
Nombres de APK:
- official Firebase:
monogram-arm64-v8a-<version>-release.apk - official libre:
monogram-libre-arm64-v8a-<version>-release.apk - Telemt Firebase:
monogram-telemt-arm64-v8a-<version>-release.apk - Telemt libre:
monogram-telemt-libre-arm64-v8a-<version>-release.apk
Contribuir
Damos la bienvenida a contribuciones! Dígase solución de bugs, mejorar la documentación, o sugerir nuevas características.
- Chequea las Incidencias — Busca incidencias abiertas o crea una nueva para discutir tus ideas.
- Trabaja desde
develop— Crea tu rama desdedevelopy mantén tu trabajo basado en esa rama. - Forkea y crea una rama — Forkea el repositorio y crea una rama de características.
- Estilo de Código — Sigue el estilo existente de código en Kotlin y directrices de Clean Architecture.
- Sube un PR — Abre un Pull Request a
developcon una descripción clara de tus cambios.
Important
- Respeta los Términos de Servicio de Telegram API.
- Asegúrate de que tu código pase todas las pruebas y chequeos.
Reportar Bugs y Sugerir Características
- Bugs — Abre una incidencia y usa la etiqueta
[Bug]en el título (ej.[Bug] La aplicación se crashea al iniciar). También puedes buscar todos los bugs conocidos en el Bug Tracker. - Solicitud de Características — Abre una incidencia y usa la etiqueta
[Feature](ej.[Feature] Soporte para mensajes programados). Las solicitudes de características existentes se pueden encontrar en el Feature Board.
Traducciones
MonoGram le da la bienvenida a traducciones de la comunidad! Puedes contribuir con tu propio lenguaje y editar el archivo strings resource.
Las source strings se pueden encontrar en
presentation/src/main/res/values/string.xml.
Para añadir un nuevo lenguaje, crea el
correspondientevalues-<idioma>/string.xml file (ej. values-de/string.xml
para el Alemán) y traduce las strings ahí. Abre un PR con tu traducción y nos
encargaremos de mezclarla.
Stack Tecnológico
MonoGram aprovecha las últimas herramientras de desarrollo y librerías de Android:
| Categoría | Librerías |
|---|---|
| Lenguaje | Kotlin |
| UI Toolkit | Jetpack Compose (Material 3) |
| Arquitectura | Decompose (Navigation), MVIKotlin |
| Inyección de Dependencias | Koin |
| Asincronía | Coroutines & Flow |
| Núcleo de Telegram | TDLib (Telegram Database Library) |
| Carga de imágenes | Coil 3 |
| Multimedia | Media3 (ExoPlayer) |
| Mapas | MapLibre |
| Base de Datos local | Room |
Estructura del Proyecto
Este proyecto sigue una estructura multi-módulo para asegurarse de separar propósitos y escalabilidad:
| Módulo | Descripción |
|---|---|
| :app | El módulo de la aplicación principal de Android. |
| :domain | Módulo puro en Kotlin que contiene la lógica de trabajo, casos de uso e interfaces de repositorio. |
| :data | Implementación de repositorios, fuentes de datos, e integración con TDLib. |
| :presentation | Componentes de UI, pantallas y modelos de visión. (MVI Stores). |
| :core | Clases comunes de utilidades y extensiones usadas entre módulos. |
| :baselineprofile | Perfiles Baseline para optimizar el inicio de la app y el rendimiento. |
Licencia
Este proyecto está licenciado bajo la GNU General Public License v3.0.



