No description
  • Java 54.4%
  • C++ 25.8%
  • C 11.4%
  • Assembly 4%
  • Go 1.4%
  • Other 2.6%
Find a file
2026-11-03 23:20:12 +03:00
.github Read pushed commits from the event file so large pushes still publish 2026-10-21 18:42:25 +03:00
assets Логотип в README — текущая иконка приложения 2026-08-18 23:05:58 +03:00
buildSrc update to 12.10.0 (7031) 2026-08-22 22:16:59 +09:00
docs fix: make bot privacy modes exclusive and animate switches 2026-10-30 03:03:37 +03:00
gradle chore: update dependencies 2026-08-21 23:35:54 +09:00
tests Attribute code a plugin executes from files it unpacked to that plugin 2026-11-03 22:30:53 +03:00
TMessagesProj Add the always show downloads icon toggle to exteraless navigation settings [skip publish] 2026-11-03 23:20:12 +03:00
TMessagesProj_Modules Update to 13.1.1 2026-10-31 19:26:13 +03:00
Tools CI: не отправлять сборки в Telegram, оставлять артефактами 2026-08-16 15:57:24 +03:00
.gitignore Merge pull request #33 from 0niel/ignore-jvm-crash-dumps 2026-09-11 18:03:35 +03:00
.gitmodules Update to 13.0.2 2026-10-13 22:57:17 +03:00
build.gradle Lower minSdk to 24, the floor Chaquopy requires 2026-09-17 21:31:41 +03:00
gradle.properties Update to 13.1.1 2026-10-31 19:26:13 +03:00
gradlew chore: update dependencies 2026-06-21 16:21:52 +09:00
gradlew.bat chore: update dependencies 2026-06-21 16:21:52 +09:00
LICENSE Remove web translators & Fixes 2020-06-26 05:43:17 +00:00
README.md Refresh the README with current features, Python 3.11 and build requirements 2026-11-03 21:49:34 +03:00
settings.gradle Update to 13.1.1 2026-10-31 19:26:13 +03:00

exteraless

exteraless

Открытая версия exteraGram — с моделью разрешений для плагинов

Канал


Что это

exteraless — форк NagramX, в котором возможности exteraGram реализованы с открытым исходным кодом. Основа — Telegram для Android 13.1.1.

Отдельный упор — безопасность плагинов. В exteraGram плагин не ограничен ни в чём; здесь у него есть модель разрешений: плагин объявляет, что ему нужно, это видно на экране установки, и получает он только то, что вы разрешили.

Проект в бете: часть возможностей exteraGram ещё не перенесена. Если заметили, что каких-то функций не хватает, — откройте issue или напишите в канал.

  • Имя пакета: com.exteraless.app
  • Только 64-битные устройства (arm64-v8a, x86_64)

Что внутри

Плагины

  • Совместимость с плагинами exteraGram: одиночные .plugin, архивы .elyx/.eaf, плагины с DEX и хуки Java-методов (Xposed API)
  • Разрешения: сеть, файлы, чтение и отправка сообщений, интенты, настройки, хуки, нативные библиотеки. Запрос без разрешения тихо отклоняется и попадает в журнал
  • Журнал активности плагина с поиском и экспортом
  • Защита от падений: плагин, который раз за разом роняет приложение, отключается; после нескольких падений на старте включается безопасный режим
  • Экспорт и импорт всех плагинов вместе с настройками
  • Python 3.11 на своей сборке Chaquopy

Клиент

  • Настройки exteraGram: оформление, чаты, иконпаки, боковое меню, полоса пилюль, поиск по настройкам
  • Плеер в стиле Material 3 с настраиваемой обложкой, мини-плеером, очередью и синхронизированными текстами песен
  • Режим призрака и сохранение удалённых и отредактированных сообщений (с исключениями по чатам)
  • Своя ИИ-служба вместо встроенных в Telegram редактора и пересказов
  • Темы Monet, включая стиль Inugram
  • Вход на другие устройства по QR из бокового меню

Ссылки

Сборка

Понадобятся JDK 21, Android SDK с NDK и CMake, Python 3.11 на машине сборки.

  1. Склонировать репозиторий вместе с подмодулями:

    git clone --recursive --shallow-submodules https://github.com/exteraless/exteraless.git exteraless
    

    Если репозиторий уже склонирован без подмодулей:

    git submodule update --init --recursive --depth=1
    
  2. Получить TELEGRAM_APP_ID и TELEGRAM_APP_HASH на my.telegram.org и создать local.properties в корне проекта:

    TELEGRAM_APP_ID=<ваш_app_id>
    TELEGRAM_APP_HASH=<ваш_app_hash>
    

    Если python3 в системе не 3.11, указать нужный интерпретатор:

    CHAQUOPY_BUILD_PYTHON=/usr/bin/python3.11
    
  3. Для подписи APK положить свой TMessagesProj/release.keystore и дописать в local.properties:

    KEYSTORE_PASS=<пароль_хранилища>
    ALIAS_NAME=<имя_ключа>
    ALIAS_PASS=<пароль_ключа>
    

    Ключа в репозитории нет намеренно. Без него сборка не падает — APK подписывается отладочным ключом Android.

  4. Для push-уведомлений заменить TMessagesProj/google-services.json своим (Firebase, имя пакета com.exteraless.app).

  5. Необязательно: свои ключи в local.properties — MAPS_API_KEY (Google Maps; ключ привязан к пакету и подписи, поэтому чужой показывает пустую карту) и GLYPH_API_KEY (Nothing Glyph). Для канала метаданных — его числовой id без префикса -100 в BaseRemoteHelper.CHANNEL_METADATA_ID.

  6. Собрать: ./gradlew :TMessagesProj:assembleDebug или открыть проект в Android Studio. Среда выполнения Python собирается из подмодуля TMessagesProj/chaquopy во время сборки; Cython для этого ставится сам.

Про ABI. Переменная NATIVE_TARGET задаёт цель: arm64-v8a или x86_64 (один ABI, быстрее), пусто или universal (один APK с обоими ABI), SKIP (без нативной части — только Java и ресурсы). 32-битные ABI не собираются.

Сборка через GitHub Actions

Нужны два секрета репозитория:

  • LOCAL_PROPERTIES — содержимое local.properties в base64:

    base64 -w0 local.properties
    
  • RELEASE_KEYSTORE — файл ключа в base64:

    base64 -w0 TMessagesProj/release.keystore
    

Дальше запустить workflow Release Build. Готовый APK лежит в артефактах прогона.

Авторы дизайна

Иконки и оформление, унаследованные от exteraGram, созданы его дизайнером — @the8055u и студией @BlueprintDsgn. Права на эти материалы принадлежат авторам.

Благодарности


English

What this is

exteraless is a fork of NagramX that implements exteraGram's features open-source. It is based on Telegram for Android 13.1.1.

The special focus is plugin security. In exteraGram a plugin is not restricted in any way; here it comes with a permission model: a plugin declares what it needs, you see that on the install sheet, and it gets only what you allow.

The project is in beta: some exteraGram features have not been ported yet. If you notice a missing feature, open an issue or write to the channel.

  • Package name: com.exteraless.app
  • 64-bit devices only (arm64-v8a, x86_64)

What's inside

  • exteraGram plugins: single-file .plugin, .elyx/.eaf archives, DEX plugins and Java method hooks (Xposed API)
  • Permissions for network, files, reading and sending messages, intents, settings, hooks and native libraries; denied calls fail quietly and go to the plugin's activity log
  • Crash protection: a plugin that keeps crashing the app is disabled, repeated launch crashes bring up safe mode
  • Export and import of all plugins with their settings
  • Python 3.11 on our own Chaquopy build
  • exteraGram settings, a Material 3 music player with synced lyrics, ghost mode, saved deleted and edited messages, Monet themes, QR login for other devices

Building

You need JDK 21, the Android SDK with NDK and CMake, and Python 3.11 on the build machine.

  1. Clone with submodules:

    git clone --recursive --shallow-submodules https://github.com/exteraless/exteraless.git exteraless
    
  2. Get TELEGRAM_APP_ID and TELEGRAM_APP_HASH from my.telegram.org and put them into local.properties in the project root. If python3 is not 3.11, set CHAQUOPY_BUILD_PYTHON there to a 3.11 interpreter.

  3. For release signing, drop your own TMessagesProj/release.keystore and add KEYSTORE_PASS, ALIAS_NAME, ALIAS_PASS to local.properties. No keystore is shipped with the repository; without one the build is signed with the Android debug key.

  4. For push notifications, replace TMessagesProj/google-services.json with your own Firebase config for com.exteraless.app.

  5. Optional: MAPS_API_KEY and GLYPH_API_KEY in local.properties, and your metadata channel id (without -100) in BaseRemoteHelper.CHANNEL_METADATA_ID.

  6. Build with ./gradlew :TMessagesProj:assembleDebug or from Android Studio. The Python runtime is built from the TMessagesProj/chaquopy submodule during the build.

NATIVE_TARGET selects the ABI: arm64-v8a or x86_64 (one ABI, faster), empty or universal (one APK with both), SKIP (no native part). 32-bit ABIs are not built.

For CI, set two repository secrets — LOCAL_PROPERTIES and RELEASE_KEYSTORE, both base64-encoded — and run the Release Build workflow. The APK ends up in the run artifacts.

Design credits

Icons and visual design inherited from exteraGram are the work of its designer, @the8055u, and the @BlueprintDsgn studio. Rights to those materials belong to their authors.