SingGram is an Android fork based on the official Telegram Android source. The production app lives in official-android/.
- Base: official Telegram Android source from
https://github.com/DrKLO/Telegram - Current imported upstream: Telegram Android
13.2.2/ version code7303 - Package name:
com.sing.singgram - Target build: arm64 Android APK
- License: GPL-2.0-or-later, following upstream Telegram Android
SingGram keeps Telegram's native Android client architecture and patches the official app surfaces directly instead of rebuilding Telegram in a separate UI stack.
- SingGram branding and package configuration
- Native Telegram Android UI as the base client
- Liquid Glass enabled through Telegram's native glass/blur pipeline
- Traditional Chinese and Cantonese-oriented settings polish
- SingGram settings, diagnostics, and push notification checks
- Android build scripts for local and GitHub Actions builds
- Upstream sync helper for pulling newer Telegram Android releases
official-android/ Official Telegram Android fork
scripts/build_official_android.sh Local arm64 release build
scripts/sync_official_android_upstream.sh Sync helper for Telegram upstream
.github/workflows/official-android-build.yml
docs/official-android-fork.md Fork, build, update, and release notes
Create a local credentials file first:
cp telegram_credentials.env.example telegram_credentials.envThen edit telegram_credentials.env locally:
TELEGRAM_API_ID=123456
TELEGRAM_API_HASH=your_hash
SINGGRAM_FORCE_LIQUID_GLASS=trueBuild:
scripts/build_official_android.shDefault output:
official-android/TMessagesProj_App/build/outputs/apk/arm64/release/app.apk
For a debug APK:
SINGGRAM_OFFICIAL_TASK=:TMessagesProj_App:assembleArm64Debug scripts/build_official_android.shThe workflow can be run manually from GitHub Actions. Required repository secrets:
TELEGRAM_API_ID
TELEGRAM_API_HASH
GOOGLE_SERVICES_JSON_BASE64
Create the Firebase secret from a local google-services.json:
base64 -i official-android/TMessagesProj/google-services.json | gh secret set GOOGLE_SERVICES_JSON_BASE64If publish_release is enabled when running the workflow, it publishes:
SingGram-arm64-release.apk
update.json
Stable public update manifest:
https://github.com/<owner>/<repo>/releases/latest/download/update.json
Stable public APK link:
https://github.com/<owner>/<repo>/releases/latest/download/SingGram-arm64-release.apk
GitHub Actions checks the official Telegram Android upstream on a schedule. If
DrKLO/Telegram has moved beyond the imported commit or version recorded in
.github/singgram-upstream.json, the checker commits the new upstream metadata,
app version name, README, and fork documentation to android-official-fork, then dispatches the public
SingGram release build.
The automatic checker does not blindly merge upstream source code. Use the sync script below when you want to review and merge Telegram Android source changes into SingGram.
Use the sync script to merge newer Telegram Android upstream changes into a temporary branch:
scripts/sync_official_android_upstream.sh masterThen resolve conflicts, build, test on a phone, and merge the sync branch only after the APK is usable.
After a reviewed upstream source merge, make sure .github/singgram-upstream.json
still points at the imported Telegram commit/version so the scheduled checker
knows the fork is current.
Recommended checks after every upstream update:
- Login and account switching
- Chat open/back navigation
- Message receive and notification behavior
- Media download and playback
- SingGram settings and diagnostics
- Liquid Glass surfaces
More details are in docs/official-android-fork.md.
Do not commit:
telegram_credentials.envgoogle-services.json- signing keys or keystores
- APK/AAB build outputs
- session databases or device logs
The public repository should contain source only. Credentials and Firebase config are restored in CI from GitHub Secrets.
Telegram Android is GPL-2.0-or-later. SingGram keeps that license inheritance for the forked Android source. If public APKs are distributed, publish the matching SingGram source for that release and keep private credentials/signing keys out of the repository.