Skip to content

About

Лучший кросплатформенный open source клиент SimpleX Chat

Resources

Stars

3 stars

Watchers

2 watching

Forks

Repository files navigation

🟢 TangleX Chat

Приватный мессенджер без серверов, без ID, без компромиссов. Независимый клиент с прямым FFI-доступом к протоколу SimpleX.

Flutter Dart License: AGPL Platform Protocol


📋 Оглавление


🚀 О проекте

TangleX Chat — это независимый кастомный клиент, работающий по протоколу SimpleX. Приложение использует прямой FFI-доступ к нативному ядру SimpleX (libsimplex.so), вызывая Haskell-ядро напрямую через dart:ffi, минуя все сетевые прослойки.

⚖️ TangleX Chat не является официальным продуктом SimpleX Chat Ltd. Название, логотип и брендинг TangleX Chat не связаны с товарными знаками SimpleX. Подробнее см. DISCLAIMER.md.

Результат? Минимальные задержки, полный контроль над взаимодействием с протоколом и возможность кастомизации, недоступная при использовании официального SDK.


✨ Ключевые преимущества

⚡ Прямой FFI-вызов ядра

Параметр Клиент через API/SDK TangleX Chat (FFI)
Вызовы Через IPC / HTTP-слой Напрямую в dart:ffi
Задержка +оверхед IPC/сериализации Минимальная
Зависимости Внешний процесс/сервис Встроенное ядро
Контроль Ограничен публичным API Полный доступ к командам

🎨 Уникальные функции

Функция Описание
🔴 Круглые видеосообщения Запись и воспроизведение «кружочков» в стиле Telegram — с прогресс-кольцом, перемоткой жестом и анимацией пульсации
🖼 Система стикеров Импорт .sxpz/.zip паков, создание своих паков, анимированные .webm стикеры с автосжатием превью
🎨 4 темы оформления Material, Nord, AMOLED (чистый чёрный), Solarized — с переключением светлой/тёмной/системной
🌐 Двуязычный интерфейс Русский 🇷🇺 + English 🇬🇧 — легковесная локализация без ARB-файлов
🐛 Debug-консоль Прямой ввод JSON-команд к ядру в реальном времени с лог-стримом
🖼 HD-загрузка с контролем Переключатель качества изображений с предупреждением о стабильности
📎 Мини-плеер аудио Встроенный плеер для голосовых сообщений прямо в чате
🗂 Медиа-галерея Просмотр всех медиа чата с группировкой изображений

🏗 Архитектурные преимущества

┌─────────────────────────────────────────────┐
│           Flutter UI — TangleX (Material 3)  │
│  ┌───────────┬───────────┬──────────────┐   │
│  │  Чаты     │ Коннект   │  Профиль     │   │
│  └───────────┴───────────┴──────────────┘   │
├─────────────────────────────────────────────┤
│         Riverpod State Management            │
│  (тема · локаль · профиль · сервис)         │
├─────────────────────────────────────────────┤
│        TanglexService (бизнес-логика)       │
│  ┌─────────────────────────────────────┐    │
│  │  Event Loop (Isolate)               │    │
│  │  chat_recv_msg_wait ←→ SendPort     │    │
│  └─────────────────────────────────────┘    │
├─────────────────────────────────────────────┤
│      FFI Layer (dart:ffi + ffigen)         │
│  TanglexNative → libsimplex.so             │
├─────────────────────────────────────────────┤
│       Haskell SimpleX Core (C API)          │
│  hs_init · chat_send_cmd · chat_recv_msg    │
│  © SimpleX Chat Ltd — AGPL-3.0              │
└─────────────────────────────────────────────┘

📦 Функции

💬 Мессенджер

Возможность Статус
Текстовые сообщения ✅
Отправка изображений (мульти-выбор) ✅
Видео-сообщения ✅
Голосовые сообщения ✅
Файлы любого типа ✅
Круглые видеосообщения ✅
HD-загрузка изображений ✅
Автоматическая загрузка медиа ✅
Медиа-галерея чата ✅
Группировка изображений ✅
Стикеры (статичные + анимированные) ✅
Создание стикер-паков ✅
Мини-плеер аудио ✅

👤 Профили и контакты

Возможность Статус
Создание профиля (имя, полное имя, био) ✅
Переключение между профилями ✅
Удаление профиля ✅
Подключение по SMP-ссылке (smp://...) ✅
Генерация ссылки для шаринга ✅
Принятие/отклонение запросов контакта ✅
Статус ожидающих контактов ✅

🎨 Интерфейс

Возможность Статус
Material 3 дизайн ✅
4 темы: Material / Nord / AMOLED / Solarized ✅
Светлая / Тёмная / Системная ✅
Русский + English ✅
Pull-to-refresh списка чатов ✅
Бейджи непрочитанных ✅
Превью последнего сообщения ✅
Аватары контактов ✅
Debug-консоль с сырыми командами ✅
Градиентный фон с паттерном ✅

🏗 Архитектура

FFI-интеграция

Клиент использует ffigen для генерации Dart-биндингов к C API SimpleX ядра:

// native/simplex.h — экспортируемые функции
hs_init              → Инициализация Haskell RTS
chat_migrate_init_key → Инициализация/миграция ядра
chat_send_cmd_retry  → Отправка JSON-команды
chat_recv_msg_wait   → Блокирующий приём событий
chat_encrypt_media   → Шифрование медиа
chat_decrypt_media   → Дешифрование медиа
chat_write_file      → Запись файла через ядро
chat_read_file       → Чтение файла через ядро

Event Loop

События от ядра принимаются в выделенном Dart Isolate, чтобы не блокировать UI-поток:

// tanglex_event_loop — изолированный цикл событий
chat_recv_msg_wait(chat_ctrl) → SendPort → ReceivePort → UI

State Management

  • Riverpod — управление состоянием
  • SharedPreferences — персистентность (тема, локаль, профиль)
  • ValueNotifier — реактивные логи и статусы

🛠 Стек технологий

Категория Технология
Фреймворк Flutter 3.11+, Dart 3.11+
State Management Flutter Riverpod 2.6.1
FFI ffi 2.1.4, ffigen 19.1.0
Хранение shared_preferences 2.5.3
Изображения image_picker, image, video_thumbnail
Камера camera 0.11.1
Видео video_player 2.9.2
Аудио just_audio 0.9.39
Файлы file_picker 8.1.2
Архивы archive 4.0.2
Локализация flutter_localizations, кастомная реализация

📥 Установка

Требования

  • Flutter SDK 3.11+
  • Dart SDK 3.11+
  • Android NDK 28.2.13676358 (для сборки libsimplex.so)
  • Скомпилированная библиотека libsimplex.so (Haskell SimpleX core)

Шаги

# 1. Клонировать репозиторий
git clone https://github.com/your-username/tanglex_chat.git
cd tanglex_chat

# 2. Установить зависимости
flutter pub get

# 3. Разместить libsimplex.so
# Поместите скомпилированную libsimplex.so в:
#   android/app/src/main/jniLibs/arm64-v8a/
#   android/app/src/main/jniLibs/armeabi-v7a/

# 4. Запустить приложение
flutter run

🔨 Сборка

Android (APK)

flutter build apk --release

Android (App Bundle)

flutter build appbundle --release

Генерация FFI-биндингов

# Убедитесь, что native/simplex.h актуален
dart run ffigen --config ffigen.yaml

Настройка NDK

Версия NDK зафиксирована в android/app/build.gradle.kts:

ndkVersion = "28.2.13676358"

📁 Структура проекта

tanglex_chat/
├── lib/
│   ├── main.dart                          # Точка входа, ProviderScope
│   └── src/
│       ├── ffi/
│       │   ├── tanglex_bindings.dart      # Автогенерация (ffigen)
│       │   └── tanglex_native.dart        # FFI-обёртка, Event Loop
│       ├── service/
│       │   └── tanglex_service.dart       # Бизнес-логика, команды
│       ├── ui/
│       │   ├── home_screen.dart           # Навигация: Чаты / Коннект / Профиль
│       │   ├── chats_screen.dart          # Список чатов, запросы
│       │   ├── chat_screen.dart           # Экран чата (~2500 строк)
│       │   ├── connect_screen.dart        # Подключение по ссылке
│       │   ├── create_profile_screen.dart # Создание профиля
│       │   ├── profile_screen.dart        # Профиль, мультипрофиль
│       │   ├── settings_screen.dart       # Настройки (тема, локаль)
│       │   └── debug_screen.dart          # Debug-консоль
│       ├── providers/
│       │   ├── persistent_store.dart      # Модели данных
│       │   ├── theme_provider.dart        # Тема (4 стиля × 3 режима)
│       │   └── locale_provider.dart       # Локаль (en/ru)
│       ├── stickers/
│       │   └── sticker_store.dart         # Стикер-паки
│       └── localization/
│           └── app_localizations.dart     # en/ru переводы
├── native/
│   └── simplex.h                          # C API заголовки (© SimpleX Chat Ltd)
├── android/                               # Android-проект
├── ios/                                   # iOS-заготовка
├── linux/                                 # Linux-заготовка
├── macos/                                 # macOS-заготовка
├── ffigen.yaml                            # Конфигурация ffigen
├── DISCLAIMER.md                          # Правовая информация
├── LICENSE                                # AGPL-3.0
└── pubspec.yaml                           # Зависимости

🖥 Платформы

Платформа Статус Примечание
Android 🟢 Работает FFI загружает libsimplex.so
iOS 🟡 Заготовка Нет FFI-интеграции
Linux 🟡 Заготовка Нет нативной библиотеки
macOS 🟡 Заготовка Нет нативной библиотеки
Windows 🔴 Не поддерживается Не реализовано
Web 🔴 Невозможно dart:ffi недоступен в вебе

⚠️ Известные ограничения

Ограничение Описание
FFI только на Android TanglexNative бросает UnsupportedError на не-Android платформах
Групповые чаты UI готов, но обработка ограничена («This chat is not ready yet»)
Нет QR-сканера Подключение только через ручной ввод/вставку smp:// ссылки
Нет пуш-уведомлений Event Loop — polling через chat_recv_msg_wait; нет FCM/APNs
HD-приём нестабилен Предупреждение: «can crash native core» для больших файлов
Share-кнопка TODO: не реализован шаринг ссылки

⚖️ Правовая информация

TangleX Chat — независимый проект, не аффилированный с SimpleX Chat Ltd.

  • Протокол SimpleX и ядро libsimplex.so разработаны SimpleX Chat Ltd. и распространяются под лицензией AGPL-3.0
  • Товарные знаки SimpleX и SimpleX Chat принадлежат SimpleX Chat Ltd.
  • TangleX Chat использует собственное название и брендинг в соответствии с политикой товарных знаков SimpleX
  • Все копирайты и лицензии оригинального SimpleX-кода сохранены в подкаталоге simplex-chat/

Подробности: DISCLAIMER.md


🤝 Вклад в проект

Pull Request'ы приветствуются! Для крупных изменений:

  1. Откройте issue для обсуждения
  2. Создайте feature-branch
  3. Внесите изменения
  4. Откройте PR с описанием

📄 Лицензия

Этот проект распространяется под лицензией GNU Affero General Public License v3.0 (AGPL-3.0).

Полный текст лицензии см. в файле LICENSE.

Ядро SimpleX Chat (каталог simplex-chat/) также лицензировано под AGPL-3.0 © SimpleX Chat Ltd.


Сделано с 💚 на Flutter & Dart FFI · TangleX Chat © 2026

About

Лучший кросплатформенный open source клиент SimpleX Chat

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages