
Sigram
Project status: In progressAn Android messaging client that looks and feels exactly like Telegram, but runs entirely on the Signal protocol underneath. Telegram's Android UI is stripped of its MTProto/TDLib backend and rewired through a bridge layer to Signal's end-to-end encrypted stack — libsignal, signal-service-java, RingRTC, and SQLCipher.
Gallery
01 / 01Notes
Telegram UI × Signal Backend — an Android app where the user sees Telegram's interface (every screen, animation, cell, toolbar, and sheet) while every message, call, and contact flows through Signal's end-to-end encrypted protocol and servers.
This is not a theme or redesign. It is literally Telegram's Android UI code, stripped of Telegram's backend (MTProto, TDLib, Telegram API), and rewired to Signal's backend through an adapter layer.
Currently working: login, contact sync, and text messages.
Architecture: Adapter / Bridge Pattern
┌─────────────────────────────────────────────────┐
│ Telegram UI Layer (KEPT) │
│ ActionBar, Cells, Components, ChatActivity, │
│ DialogsActivity, PhotoViewer, VoIPFragment, │
│ Stories, custom views, animations │
├─────────────────────────────────────────────────┤
│ Sigram Bridge (NEW) │
│ TLRPC Wrappers: Dialog↔ThreadRecord, │
│ Message↔MessageRecord, User↔Recipient │
│ Controllers → Signal Repositories/Services │
│ Signal LiveData → NotificationCenter events │
├─────────────────────────────────────────────────┤
│ Signal Backend (IMPORTED) │
│ libsignal-client, signal-service-java, │
│ SQLCipher, RingRTC, Jobs, Crypto, Groups, │
│ Stories, Contacts, Notifications │
└─────────────────────────────────────────────────┘
How It Works
A tap on "Send" in Telegram's ChatActivity is translated by the Sigram bridge into Signal's MessageSender. libsignal encrypts with the Double Ratchet, signal-service-java ships it to Signal's servers, the recipient receives it over WebSocket, Signal decrypts and stores it in SQLCipher, and the bridge posts a NotificationCenter event so Telegram's ChatMessageCell renders the message.
What's Kept from Telegram
- All UI code: screens, cells, components, adapters, animations
- Navigation:
ActionBarLayout,BaseFragment,LaunchActivity - Event bus:
NotificationCenter(internal observer pattern) - Theming and the device-class performance system
What's Imported from Signal
- libsignal-client — end-to-end encryption (Double Ratchet, X3DH, PQXDH)
- signal-service-java — server communication (WebSocket + REST)
- RingRTC — voice/video calling (WebRTC)
- SQLCipher — encrypted local database
- All Signal features: registration, messaging, groups (GV2), stories, reactions, calls, disappearing messages, safety numbers, linked devices, and sealed sender
Current State
Local builds package Signal Android's app-owned backend, commit login through Signal's local registration repository, and start Signal's receive/job runtime after login. 1:1 messaging is dev-ready.