El cliente de Telegram para macOS cuenta con un nuevo repositorio abierto: TelegramMessenger/telegram-macos bajo la licencia GPL-2.0. El repositorio anterior, overtake/TelegramSwift, no había recibido commits desde el 29 de julio de 2025, lo que impedía compilar un cliente actualizado a partir de él. Junto con este, se ha abierto el motor de red MTProto, escrito en Rust: su código se encuentra en un repositorio separado, y una comparación con el motor antiguo, así como una auditoría, están disponibles en la documentación del cliente. Telegram está preparando este motor para reemplazar la biblioteca anterior tanto para iOS como para macOS. Esto concierne principalmente a los desarrolladores de clientes de terceros y a quienes utilizan el canal beta de macOS: en la versión beta, el motor ya se puede activar manualmente.
Contenido del repositorio
El 23 de octubre a las 07:18 UTC, el enlace al repositorio fue publicado en el chat de los beta-testers del cliente. El repositorio en sí fue creado el 9 de octubre bajo otra dirección, macosswift/telegram: desde allí, GitHub ahora redirige a la nueva, y el README sigue haciendo referencia a la dirección antigua. El commit «Initial commit» está fechado el 20 de octubre, y la última modificación del README se realizó el 22 de octubre. En total, el repositorio contiene 8.605 archivos, y casi toda la interfaz está organizada en 156 paquetes Swift en la carpeta packages/.
El número de compilación en Telegram-Mac/Info.plist es 283305. Esta es la beta 13.0.283305 del 9 de octubre, lo que significa que el código abierto está dos semanas por detrás de la beta, que para la tarde del 23 de octubre había alcanzado la versión 13.1.0.283366. El módulo HTMLBubbles, que desde el 8 de octubre renderiza mensajes en HTML y JavaScript en la beta, no está presente en el código abierto.
Las instrucciones de compilación requieren Xcode 16 o superior y el conjunto de herramientas de Rust. El código compartido con iOS (TelegramCore, Postbox) se conecta como un submódulo submodules/telegram-ios. En .gitmodules se especifica una dirección de GitLab para este, pero el commit necesario 5bb60920e2 del 9 de octubre también está disponible en el repositorio público Telegram-iOS. Las reglas para los forks siguen siendo las mismas: obtener su propio API ID, no nombrar el fork Telegram, no usar el logotipo de la marca y publicar el código según lo exige la GPL.
El repositorio está diseñado para agentes de IA
En la raíz se encuentra AGENTS.md, una guía «para agentes que escriben código en este repositorio». Describe las reglas de codificación, un mapa de módulos y el proceso de lanzamiento de la beta: la compilación comienza cuando se envían cambios a la rama beta y se incrementa el número CFBundleVersion. Los comentarios en el código están prohibidos, excepto las etiquetas de servicio como //TODOLANG. CLAUDE.md consta de una sola línea con un enlace a AGENTS.md, y en la carpeta .claude/commands se encuentran dos comandos predefinidos para Claude Code: la creación de una pantalla y el trabajo con cadenas de localización.
Motor MTProto en Rust
MTProto es el protocolo que utilizan los clientes de Telegram para comunicarse con los servidores: cifrado, sesiones, conexiones a centros de datos. En iOS y macOS, hasta ahora, lo gestionaba MtProtoKit, una biblioteca escrita en Objective-C. Para reemplazarla, se ha escrito mtproto-engine. El primer commit en este se realizó el 2 de octubre, el último el 13 de octubre, con un total de 16 commits. El código está casi en su totalidad en Rust, bajo licencia GPL-2.0.
Según el README, el motor se conecta a TelegramCore a través de una capa intermedia NetworkEngine y funciona tanto en iOS como en macOS. MtProtoKit sigue siendo el motor predeterminado. El nuevo se selecciona en la configuración para desarrolladores, en el apartado «Network Engine», y comienza a funcionar después de un reinicio. Ambos motores escriben el mismo estado guardado, por lo que el cambio no cierra la sesión de la cuenta. En el repositorio público Telegram-iOS, el motor está conectado como un submódulo third-party/mtproto-engine al último commit del repositorio da4b217021.
La principal diferencia radica en los hilos. MtProtoKit ejecuta todas las sesiones de todas las cuentas, todo el análisis y todo el cifrado en una única cola compartida. Por lo tanto, la descarga de un archivo grande retrasa la entrega de actualizaciones en la sesión principal. El nuevo motor mantiene de dos a cuatro hilos de trabajo: las sesiones principales están asignadas al primero, las descargas y el CDN se distribuyen entre los demás, y el descifrado de una parte del archivo de 512 KB no ralentiza la sesión principal.
En la beta de macOS, el motor apareció antes de que se abriera el código. La cadena «Rust (restart required)» está presente en la compilación 12.10.283246 del 2 de octubre. En la siguiente compilación apareció la cadena «Engine switch to rust refused, the server disabled it», lo que significa que el servidor de Telegram puede prohibir el cambio. La documentación del repositorio denomina a este mecanismo «live kill switch» y atribuye su primera versión a las betas 283247 y 283248.
Resultados de las mediciones
La comparación de los motores se encuentra en el repositorio de macOS, en el archivo mtproto-rust-vs-mtprotokit.md. Su versión final está fechada el 2 de octubre. Las mediciones se realizaron a través de la pila real de TelegramCore contra un clúster de Telegram simulado detrás de un simulador de red, y algunas de las cifras se tomaron en servidores reales. Estos son los propios números del equipo, y nadie los ha verificado de forma independiente.
| Prueba | Rust | MtProtoKit |
|---|---|---|
| Archivo grande, latencia 100 ms, 200 Mbit/s | 22,3 MB/s | 6,7 MB/s |
| Archivo grande a través de CDN, misma red | 13,7 MB/s | 6,8 MB/s |
| Espera normal de respuesta con corte de red de 6 s | 72 ms | 4,3 s |
| Primera respuesta después del fin del corte | 0,07 s | 1,11 s |
| 10.000 solicitudes pequeñas, tiempo de CPU | 0,20 s | 1,05 s |
Un conjunto separado de 47 escenarios prueba los motores contra un servidor hostil que envía basura, repite respuestas y corta conexiones. Rust pasó los 47 y nunca ejecutó una solicitud dos veces. MtProtoKit terminó limpiamente 18. En 11 escenarios se colgó, en dos entró en un bucle infinito con carga de CPU, y en 24 ejecutó solicitudes repetidamente, un total de 49.395 veces.
Auditoría y monedero
En la carpeta docs/security-audit se encuentra el informe de auditoría de la pila de red de macOS del 2 de octubre. Según este, en la aplicación MtProtoKit todavía realiza cada intercambio de claves de autorización, mientras que el nuevo motor funciona con el parámetro generate_key = 0, es decir, no crea claves por sí mismo. El informe describe dos vulnerabilidades de alta importancia en MtProtoKit, compartidas con Telegram para iOS: la caída y el bloqueo del cliente antes de que se verifique la autenticidad del servidor. Ese mismo día, el commit c371b688c7 con la corrección del intercambio de claves de MtProtoKit se incorporó al repositorio público Telegram-iOS.
El monedero TON en Mac también se basa en Rust. El puerto manual del monedero de packages/Wallet ha sido eliminado, y macOS toma de telegram-ios el código común del monedero y la biblioteca wallet-engine en Rust bajo licencia Apache-2.0. Se conecta a través del generador de enlaces UniFFI, y sus cadenas de servicio ya están presentes en la beta de macOS en la compilación 12.10.283234 del 25 de septiembre.
En la misma organización TelegramMessenger, el 11 de octubre apareció un fork del motor JavaScript QuickJS-ng. Los commits en este se realizaron en nombre de la misma cuenta macosswift que en mtproto-engine. Aceleran el intérprete y la asignación de memoria. El código abierto aún no muestra dónde se utiliza este fork.




