English | 简体中文
Mithka is an independent, cross-platform Telegram client for Android, iOS, Windows, macOS, and Linux. It combines a Flutter interface with TDLib over Dart FFI to provide a compact, native-feeling messaging experience across phones and desktops.
Important
Mithka is an independent, unofficial project. It is not affiliated with, endorsed by, or connected to Telegram. “Telegram” is a trademark of its respective owner.
Mithka is also not affiliated with, endorsed by, sponsored by, or otherwise connected to Tencent or QQ. It does not use, include, copy, or redistribute proprietary QQ assets. “Tencent,” “QQ,” and their related trademarks and assets belong to their respective owners.
Mithka connects to Telegram through TDLib using Telegram API credentials that you provide. Use it at your own risk and in accordance with Telegram’s Terms of Service and API Terms.
| Platform | Beta | Stable release |
|---|---|---|
| Android | Google Play Open testing | Google Play |
| iOS | TestFlight | App Store |
| Windows | GitHub prereleases | Latest GitHub release |
| macOS | GitHub prereleases | Latest GitHub release |
| Linux | GitHub prereleases | Latest GitHub release |
The name is a small piece of wordplay inspired by the penguin mascot and two tiny units of mass:
- The mascot suggests a pengram: 🐧 + gram. Read as penta-gram, it is approximately 5 g.
- One mithqāl (مثقال), a traditional Islamic unit of mass, is approximately 4.6875 g.
Derived from mithqāl, Mithka is the featherweight sitting just below the (Tele)gram penguin on an imaginary scale.
Mithka connects to your real Telegram account and chats through TDLib. Its
custom interface includes live chat lists and conversations, reactions,
stickers (including animated .tgs and .webm formats), voice messages, polls,
checklists, Telegram Communities, location sharing, contacts, profiles,
moments-style stories, settings, and a one-to-one calling interface.
- The Flutter interface lives in
lib/and usesproviderwithChangeNotifierfor state management. - TDLib is connected through Dart FFI in
lib/tdlib/. A pinned nativelibtdjsonbinary is installed for each platform and is not committed to this repository. - The interface adapts to light and dark themes. It uses Cupertino and custom components rather than Material dialogs, snackbars, or switches.
Create your own api_id and api_hash at https://my.telegram.org, then place
them in the git-ignored lib/config/secrets.dart file:
class Secrets {
static const int apiId = 123456;
static const String apiHash = 'your_api_hash';
static bool get isConfigured => apiId != 0 && apiHash.isNotEmpty;
}scripts/tdjson-manifest.json pins the matching
prebuilt Android, iOS, macOS, Linux, and Windows artifacts published by
iebb/mithka-tdjson. The helper scripts
download and verify these artifacts; this repository does not build TDLib from
source.
# Android: install one or more ABIs under android/app/src/main/jniLibs/<abi>/
scripts/build-tdjson-android.sh arm64-v8a
# iOS: install ios/tdjson/tdjson.xcframework for the Runner target
scripts/build-tdjson-ios.sh
# Desktop: write the library to the requested path (linux, macos, or windows)
scripts/build-tdjson-desktop.sh macos /tmp/libtdjson.dylibThese downloaded libraries are reproducible local build inputs. Keep the
library for the platform you are building, or delete it and rerun the matching
helper when you need to reclaim disk space. Legacy .tdlib-build/ source trees,
including large libtdcore.a archives, are not runtime dependencies and can be
removed. See NATIVE.md for exact paths and cleanup guidance.
flutter pub get
flutter run # Run on a connected device or simulatorFirebase Analytics is optional for local development. If
android/app/google-services.json or ios/Runner/GoogleService-Info.plist is
missing—or contains only an empty placeholder—the app builds and runs with
analytics disabled. Maintainers and release CI provide the real, git-ignored
configuration files automatically.
Android release builds use the project’s upload key when
android/key.properties and its referenced keystore are available. Otherwise,
the build uses a debug signature. Neither file is committed to the repository.
masteris the validated development branch and does not publish packages to GitHub, Google Play, or TestFlight.- Pushing a validated
mastercommit torelease-iosstarts Xcode Cloud archives for iOS and macOS and delivers them to external TestFlight testers. Xcode Cloud keeps the same major and minor version while setting the patch version to0. - At 00:00 UTC each day, GitHub Actions merges new
mastercommits intonightlyand increments the patch version once. The workflow publishes dated Android, Windows, macOS, and Linux GitHub prereleases and submits the signed Android App Bundle to Google Play Open testing. - Pushing to
releasepublishes a dated stable, multi-platform GitHub release and submits the production Android App Bundle to Google Play through the same channel-aware workflow.
On CI runners, secrets.dart is generated from the TELEGRAM_API_ID and
TELEGRAM_API_HASH repository secrets.
Mithka is available under the BSD 3-Clause License.
TDLib and the components in third_party/ remain subject to their own licenses.
Mithka does not ship proprietary assets or trademarks from third-party apps.