A cross-platform (iOS + Android) Telegram client built with Flutter on top of TDLib via FFI, with a dense, mobile-native messaging interface.
Disclaimer
Mithka is an independent, unofficial project. It is not affiliated with, endorsed by, or connected to Telegram in any way. "Telegram" is a trademark of its respective owner.
The app talks to Telegram's network through TDLib using your own Telegram API credentials. Use it at your own risk and in accordance with Telegram's Terms of Service and API Terms.
iOS beta builds are available on TestFlight: https://testflight.apple.com/join/tVC8WkbW
A play on small units of mass, by way of the penguin:
- The penguin mascot is a pengram — 🐧 + gram, read as penta-gram ≈ 5 g.
- One mithqāl (مثقال), a traditional Islamic unit of mass, is ≈ 4.6875 g.
So Mithka (from mithqāl) is the featherweight just under the (Tele)gram penguin on the scale.
Mithka connects to real Telegram (your account, your chats) through TDLib and
presents it with a custom interface: chat list, conversations with live state,
reactions and stickers (including animated .tgs/.webm), voice notes, polls
and checklists, location sharing, contacts, profiles, moments-style stories,
settings, and a 1:1 call UI.
- Flutter UI (
lib/), state viaprovider+ChangeNotifier. - TDLib linked through Dart FFI (
lib/tdlib/); the nativelibtdjsonbinary is downloaded/built per platform (see below) and is not committed. - All theming is adaptive (light / dark); UI components are Cupertino/custom — no Material dialogs, snackbars, or switches.
You need your own Telegram API credentials (api_id / api_hash) from
https://my.telegram.org. They are read from a git-ignored
lib/config/secrets.dart:
class Secrets {
static const int apiId = 123456;
static const String apiHash = 'your_api_hash';
static bool get isConfigured => apiId != 0 && apiHash.isNotEmpty;
}The TDLib native library is prepared with helper scripts (output is git-ignored).
iOS downloads a prebuilt artifact from
iebb/mithka-tdjson; Android still
builds per ABI locally.
# Android (per ABI) — produces android/app/src/main/jniLibs/<abi>/libtdjson.so
scripts/build-tdjson-android.sh arm64-v8a
# iOS — downloads ios/tdjson/tdjson.xcframework consumed by the Runner
scripts/build-tdjson-ios.shThen run:
flutter pub get
flutter run # on a connected device / simulatorRelease builds are signed with the project's upload key when
android/key.properties (and the referenced keystore) are present; otherwise a
debug signature is used. Neither the keystore nor key.properties is committed.
GitHub Actions runs format + analyze + tests on the release branch (see
.github/workflows/). secrets.dart is generated on the runner from the
TELEGRAM_API_ID / TELEGRAM_API_HASH repository secrets.
TDLib is © Telegram, used under its own license. This repository contains only original, independently-written code; it ships no third-party app's proprietary assets or trademarks.