Si deseas leer este documento en otro lenguaje: Русский, 한국어, اُردو, 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.
- 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.
Sigue estos pasos para configurar el proyecto localmente.
- Android Studio: Ladybug o más nuevo (recomendado).
- JDK: Java 17 o más nuevo.
git clone --recurse-submodules https://github.com/monogram-android/monogram.git
cd monogramPara 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- Inicia sesión en la consola de Firebase.
- Crea un nuevo proyecto.
- Agrega una nueva aplicación con el
applicationIdque necesitas. Si tienes múltiples aplicaciones con diferentes IDs, crea múltiples aplicaciones de Firebase. Por defecto, elapplicationIdpara compilaciones debug y release son diferentes. - Descarga el archivo
google-services.jsony cópialo a la raíz de módulo app (monogram/app/google-services.json). Si creaste múltiples aplicaciones, solo copia la configuración más reciente. - 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.
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.
- 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.
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 cmakeDespués ejecuta el script de compilación desde la raíz de tu proyecto:
./build-tdlib.shDamos 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.
- 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.
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.
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 |
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. |
Este proyecto está licenciado bajo la GNU General Public License v3.0.



