20 KiB
Reticulum MeshChatX
English | Deutsch | Italiano | 中文 | 日本語
Существенно доработанный и функционально расширенный форк Reticulum MeshChat от Liam Cottle.
Этот проект независим от оригинального Reticulum MeshChat и не связан с ним.
- Сайт: meshchatx.com
- Исходный код: git.quad4.io/RNS-Things/MeshChatX
- Официальное зеркало: github.com/Quad4/MeshChatX — пока также используется для сборок Windows и macOS.
- Релизы: git.quad4.io/RNS-Things/MeshChatX/releases
- Журнал изменений:
CHANGELOG.md - TODO: Boards
Важные отличия от Reticulum MeshChat
- Используется LXST
- Peewee ORM заменён на прямой SQL
- Axios заменён на нативный
fetch - Electron 41.x (встроенная среда Node 24)
- Колёса
.whlс веб-сервером и встроенным фронтендом для разных сценариев развёртывания - i18n
- PNPM и Poetry для зависимостей
Warning
MeshChatX не гарантирует совместимость данных со старыми версиями Reticulum MeshChat. Сделайте резервную копию перед миграцией или тестированием.
Warning
Устаревшие системы пока не полностью поддерживаются. Текущие требования: Python
>=3.11и Node>=24(Electron 41 соответствует Node 24; полеenginesвpackage.jsonи CI на той же линии).
Требования
- Python
>=3.11(изpyproject.toml) - Node.js
>=24(изpackage.json, полеengines) - pnpm
10.33.0(изpackage.json, полеpackageManager) - Poetry (используется в
Taskfile.ymlи CI)
task install
task lint:all
task test:all
task build:all
Способы установки
Выберите способ в соответствии со средой и форматом пакета.
| Метод | Включает фронтенд | Архитектуры | Лучше всего для |
|---|---|---|---|
| Docker-образ | Да | linux/amd64, linux/arm64 |
Быстрый запуск на серверах Linux |
Python wheel (.whl) |
Да | Любая архитектура, поддерживаемая Python | Безголовый/веб-сервер без сборки Node |
| Linux AppImage | Да | x64, arm64 |
Портативное использование на ПК |
Debian-пакет (.deb) |
Да | x64, arm64 |
Установка на Debian/Ubuntu |
RPM-пакет (.rpm) |
Да | Зависит от CI | Fedora/RHEL/openSUSE |
| Из исходников | Собирается локально | Архитектура хоста | Разработка и кастомные сборки |
Примечания:
- Релизный workflow явно собирает Linux
x64иarm64AppImage + DEB. - RPM также собирается при попытке и загружается при успехе.
Быстрый старт: Docker
docker compose up -d
Compose-файл по умолчанию:
127.0.0.1:8000на хосте -> порт8000контейнера./meshchat-config->/configдля данных
Если возникают ошибки прав доступа:
sudo chown -R 1000:1000 ./meshchat-config
Установка из релизных артефактов
1) Linux AppImage (x64/arm64)
- Скачайте
ReticulumMeshChatX-v<версия>-linux-<арх>.AppImageиз релизов. - Сделайте исполняемым и запустите:
chmod +x ./ReticulumMeshChatX-v*-linux-*.AppImage
./ReticulumMeshChatX-v*-linux-*.AppImage
2) Debian/Ubuntu .deb (x64/arm64)
- Скачайте
ReticulumMeshChatX-v<версия>-linux-<арх>.deb. - Установите:
sudo apt install ./ReticulumMeshChatX-v*-linux-*.deb
3) RPM-системы
- Скачайте
ReticulumMeshChatX-v<версия>-linux-<арх>.rpm, если есть в релизе. - Установите:
sudo rpm -Uvh ./ReticulumMeshChatX-v*-linux-*.rpm
4) Python wheel (.whl)
В релизных wheel включены собранные веб-ресурсы.
pip install ./reticulum_meshchatx-*-py3-none-any.whl
meshchatx --headless
pipx также поддерживается:
pipx install ./reticulum_meshchatx-*-py3-none-any.whl
Запуск из исходников (режим веб-сервера)
Для разработки или локальной сборки.
git clone https://git.quad4.io/RNS-Things/MeshChatX.git
cd MeshChatX
corepack enable
pnpm config set verify-store-integrity true
pnpm install --frozen-lockfile
pip install "poetry==2.3.4"
poetry check --lock
poetry install
pnpm run build-frontend
poetry run python -m meshchatx.meshchat --headless --host 127.0.0.1
Пояснения к командам установки:
pnpm install --frozen-lockfileзапрещает обновлениеpnpm-lock.yamlи завершится с ошибкой, если lock-файл не соответствуетpackage.json. Это исключает скрытую установку неожиданной upstream-версии.verify-store-integrity=trueуже задан в.npmrcпроекта; явныйpnpm config setдополнительно ужесточает пользовательскую конфигурацию.- Lifecycle-скрипты (
preinstall/postinstall) по умолчанию заблокированы в pnpm v10+. Скрипты установки могут запускать только пакеты изpnpm.onlyBuiltDependenciesвpackage.json(сейчас этоelectron,electron-winstaller,esbuild,protobufjs). poetry check --lockсразу падает, еслиpoetry.lockне синхронизирован сpyproject.toml; затемpoetry installставит зависимости только из lock-файла.- Для строгой установки Poetry только из lock-файла зафиксируйте версию Poetry через
pip install "poetry==2.3.4", как это делает CI.
Если вы намеренно хотите обновить зависимости, выполните pnpm update / poetry update отдельным коммитом и проверьте diff lock-файлов до пуша.
Запуск в песочнице (Linux)
Чтобы запускать нативный meshchatx (псевдоним: meshchat) с дополнительной изоляцией файловой системы, можно использовать Firejail или Bubblewrap (bwrap), сохраняя обычный сетевой доступ для Reticulum и веб-интерфейса. Полные примеры (pip/pipx, Poetry, USB-serial) в:
Та же страница отображается во встроенной Документации (документация MeshChatX), когда она отдаётся из meshchatx-docs.
Linux на ПК: шрифты эмодзи
Выбор эмодзи отображает стандартные Unicode-эмодзи системными шрифтами (Electron/Chromium). Если вместо них пустые квадраты («тофу»), установите пакет цветных эмодзи и перезапустите приложение.
| Семейство (примеры) | Пакет |
|---|---|
| Arch Linux, Artix, Manjaro | noto-fonts-emoji (sudo pacman -S noto-fonts-emoji) |
| Debian, Ubuntu | fonts-noto-color-emoji (sudo apt install fonts-noto-color-emoji) |
| Fedora | google-noto-emoji-color-fonts |
После установки при необходимости выполните fc-cache -fv. Опционально: noto-fonts для лучшего покрытия символов на минимальных установках.
Сборка настольных пакетов из исходников
Скрипты заданы в package.json и Taskfile.yml.
Linux x64 AppImage + DEB
pnpm run dist:linux-x64
Linux arm64 AppImage + DEB
pnpm run dist:linux-arm64
RPM
pnpm run dist:rpm
Через Task:
task dist:fe:rpm
Поддержка архитектур
- Образ Docker:
amd64,arm64 - Linux AppImage:
x64,arm64 - Linux DEB:
x64,arm64 - Windows:
x64,arm64(скрипты сборки есть) - macOS: скрипты сборки (
arm64,universal) для локальных сред - Android: нативные APK — ABI
arm64-v8a,x86_64, плюс universal
Android
MeshChatX поддерживает нативные Android APK (не только Termux).
Сборка APK из исходников
Из корня репозитория:
# 1) Собрать колёса Chaquopy для android/app/build.gradle
bash scripts/build-android-wheels-local.sh
# 2) Собрать обе вариации APK
cd android
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
Выходные APK (разбиение по ABI и универсальный APK; см. splits { abi { ... } } в android/app/build.gradle):
Отладка (android/app/build/outputs/apk/debug/):
app-arm64-v8a-debug.apk(устройства ARM64)app-x86_64-debug.apk(эмуляторы x86_64)app-universal-debug.apk(все включённые ABI в одном пакете)
Релиз (android/app/build/outputs/apk/release/):
app-arm64-v8a-release-unsigned.apkapp-x86_64-release-unsigned.apkapp-universal-release-unsigned.apk
Примечания:
- Релизные артефакты по умолчанию не подписаны, если не настроена подпись.
- Если нужна одна вариация:
:app:assembleDebugили:app:assembleRelease. - Целевые ABI —
arm64-v8aиx86_64согласноandroid/app/build.gradle.
Дополнительная документация:
Конфигурация
| Аргумент | Переменная окружения | По умолчанию | Описание |
|---|---|---|---|
--host |
MESHCHAT_HOST |
127.0.0.1 |
Адрес привязки веб-сервера |
--port |
MESHCHAT_PORT |
8000 |
Порт веб-сервера |
--no-https |
MESHCHAT_NO_HTTPS |
false |
Отключить HTTPS |
--ssl-cert / --ssl-key |
MESHCHAT_SSL_CERT / MESHCHAT_SSL_KEY |
(нет) | Пути к PEM-сертификату и ключу; задаются вместе. Переопределяют автосгенерированные сертификаты в каталоге ssl/ у идентичности. |
--rns-log-level |
MESHCHAT_RNS_LOG_LEVEL |
(нет) | Уровень лога стека Reticulum (RNS): none, critical, error, warning, notice, verbose, debug, extreme или число. CLI перекрывает переменную окружения, если заданы оба. |
--headless |
MESHCHAT_HEADLESS |
false |
Не открывать браузер автоматически |
--auth |
MESHCHAT_AUTH |
false |
Базовая аутентификация |
--storage-dir |
MESHCHAT_STORAGE_DIR |
./storage |
Каталог данных |
--public-dir |
MESHCHAT_PUBLIC_DIR |
авто/bundled | Каталог фронтенда (для установок без встроенных ресурсов) |
Ветки
| Ветка | Назначение |
|---|---|
master |
Стабильные релизы. Только код для продакшена. |
dev |
Активная разработка. Возможны нестабильные или неполные изменения. |
Разработка
Типичные задачи из Taskfile.yml:
task install
task lint:all
task test:all
task build:all
Сокращения Makefile:
| Команда | Описание |
|---|---|
make install |
Установить зависимости pnpm и poetry |
make run |
Запуск MeshChatX через poetry |
make build |
Сборка фронтенда |
make lint |
eslint и ruff |
make test |
Тесты фронтенда и бэкенда |
make clean |
Удалить артефакты сборки и node_modules |
Версионирование
Текущая версия в репозитории: 4.5.0.
- Источник версии JS/Electron —
package.json. meshchatx/src/version.pyсинхронизируется изpackage.json:
pnpm run version:sync
Для согласованных релизов выравнивайте поля версий где нужно (package.json, pyproject.toml, meshchatx/__init__.py).
Безопасность
SECURITY.md- Встроенные проверки целостности и HTTPS/WSS по умолчанию в приложении
- CI-сканирование в
.gitea/workflows/
Добавление языка
Обнаружение локали происходит автоматически. Добавьте новый файл в meshchatx/src/frontend/locales/ (например xx.json) с теми же ключами, что и в en.json, и полем _languageName в начале для подписи в селекторе языка. Можно скопировать en.json и перевести всё вручную; автоматическая генерация (Argos и т. п.) необязательна и не требуется.
Исправления и переводы от людей приветствуются. Улучшения существующих файлов локали или полностью ручной перевод можно прислать через pull request или issue в исходном репозитории или на зеркале GitHub.
По желанию: черновик через Argos Translate -- если нужен машинный первый проход из en.json, можно использовать scripts/argos_translate.py. Он обрабатывает форматирование и помогает защитить переменные интерполяции (например {count}).
# Установите argostranslate, если вы еще этого не сделали
pip install argostranslate
# Запустите скрипт перевода
python scripts/argos_translate.py --from en --to xx --input meshchatx/src/frontend/locales/en.json --output meshchatx/src/frontend/locales/xx.json --name "Название вашего языка"
После машинного черновика имеет смысл проверить грамматику, контекст и тон с помощью LLM или человека (формальный или неформальный стиль).
Проверьте совпадение ключей с помощью: pnpm test -- tests/frontend/i18n.test.js --run
Никаких других изменений в коде не требуется. Приложение, селектор языка и тесты обнаруживают локали из каталога meshchatx/src/frontend/locales/ во время сборки.
Авторы
- Liam Cottle — оригинальный Reticulum MeshChat
- RFnexus — парсер Micron (JavaScript)
- markqvist — Reticulum, LXMF, LXST
Лицензия
Собственные части проекта лицензированы по 0BSD.
Оригинальные upstream-части, унаследованные от MeshChat, остаются под MIT.
Полный текст и уведомления см. в ../LICENSE.