Projects
Sigram preview

Sigram

Project status: In progress

Android · Application · Developer · Jun 2026

An 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.

AndroidJavaSignal ProtocollibsignalE2EEMessaging

Gallery


Notes

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.