25 KiB
Reticulum MeshChatX
English | Deutsch | Italiano | 中文 | 日本語
Существенно доработанный и функционально расширенный форк Reticulum MeshChat от Liam Cottle.
Этот проект независим от оригинального Reticulum MeshChat и не связан с ним.
- Сайт: meshchatx.com
- Исходный код: git.quad4.io/RNS-Things/MeshChatX
- Официальное зеркало на GitHub: github.com/Quad4-Software/MeshChatX
- Релизы: github.com/Quad4-Software/MeshChatX
- Журнал изменений:
CHANGELOG.md - Поддержка проекта:
donate.md(Поддержка проекта) - Umbrel App Store: apps.umbrel.com/app/meshchatx
rngit NomadNet Node: 5399f5a0212477618821e91e88ce053b:/page/index.mu
rngit: git clone rns://926baefe13daf5178c174f158dae1b45/quad4/MeshChatX
MeshChatX NomadNet Node: c10d80b1a42fa958c37a6cc30dc04f53:/page/index.mu
Важные отличия от 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)
Browser Versions Required:
Safari 16.4 или новее, Chrome 111 или новее, Firefox 128 или новее (встроенный веб-интерфейс).
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 |
| Из исходников | Собирается локально | Архитектура хоста | Разработка и кастомные сборки |
Примечания:
- GitHub Actions собирает помеченные тегом релизы (Linux wheel/AppImage/deb/rpm, Windows, macOS, Flatpak, Android APK при теге на dev/master, SLSA, черновик релиза) в одном запуске:
.github/workflows/build-release.yml; образ контейнера —.github/workflows/docker.yml. Android CI для веток и PR —.github/workflows/android-build.yml. - AppImage + DEB для Linux
x64иarm64собираются на GitHub; RPM собирается по возможности и выкладывается, если шаг дал артефакт.
Docker
- Docker Hub:
quad4io/meshchatx - GHCR:
ghcr.io/quad4-software/meshchatx
docker compose up -d
docker run -d --name reticulum-meshchatx \
--restart unless-stopped \
--security-opt no-new-privileges:true \
-p 127.0.0.1:8000:8000 \
-v meshchatx-config:/config \
ghcr.io/quad4-software/meshchatx:latest
Вместо образа GHCR можно указать quad4io/meshchatx:latest, если предпочитаете Docker Hub.
Compose-файл по умолчанию:
127.0.0.1:8000на хосте -> порт8000контейнера- Именованный том Docker
meshchatx-config->/configдля данных (подходит пользователю meshchat в образе, UID 1000, безchownна хосте для bind mount)
По желанию: каталог на хосте
Замените строку тома на -v "$(pwd)/meshchat-config:/config" (Compose: измените volumes у сервиса). Контейнер работает от UID 1000; каталог на хосте должен быть доступен на запись (обычно: sudo chown -R 1000:1000 ./meshchat-config). Создайте пустой каталог до первого запуска, чтобы Docker не создал его с неподходящими правами.
Просмотр или удаление именованного тома
docker volume inspect meshchatx-config
docker rm -f reticulum-meshchatx
docker volume rm meshchatx-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 "uv==0.11.12"
uv lock --check
uv sync --group dev
pnpm run build-frontend
uv 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). uv lock --checkсразу падает, еслиuv.lockне синхронизирован сpyproject.toml; затемuv sync --group devставит зависимости только из lock-файла.- Для строгой установки Poetry только из lock-файла зафиксируйте версию Poetry через
pip install "uv==0.11.12", как это делает CI.
Если вы намеренно хотите обновить зависимости, выполните pnpm update / uv lock отдельным коммитом и проверьте 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
Сборка в контейнере (wheel, AppImage, deb, rpm)
Dockerfile.build выполняет те же шаги, что и CI (Poetry, pnpm, task, пакетные зависимости APT). Ориентирован на linux/amd64 (NodeSource amd64, Task amd64). Цель по умолчанию: всё; её можно переопределить build-arg.
Для MESHCHATX_BUILD_TARGETS доступны: all (по умолчанию), wheel или electron (AppImage + deb для x64 и arm64, RPM по возможности, без wheel).
Сборка:
docker build -f Dockerfile.build -t meshchatx-build:local .
Только wheel:
docker build -f Dockerfile.build --build-arg MESHCHATX_BUILD_TARGETS=wheel -t meshchatx-build:wheel .
Скопируйте /artifacts из готового образа на хост:
cid=$(docker create meshchatx-build:local)
docker cp "${cid}:/artifacts" ./meshchatx-artifacts
docker rm "${cid}"
Поддержка архитектур
- Образ Docker:
amd64,arm64 - Linux AppImage:
x64,arm64 - Linux DEB:
x64,arm64 - Windows:
x64,arm64(скрипты сборки есть) - macOS: скрипты сборки (
arm64,universal) для локальных сред - Android: только universal APK (см.
android/README.md)
Android
MeshChatX поддерживает нативные Android APK (не только Termux).
Сборка APK из исходников
Из корня репозитория:
# 1) Собрать колёса Chaquopy для android/app/build.gradle
bash scripts/build-android-wheels-local.sh
# 2) Собрать universal APK (один debug + один release за прогон; см. android/README.md)
cd android
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
Один вариант Android. Gradle синхронизирует весь каталог meshchatx/ в app/src/main/python/meshchatx/, включая офлайн-колёса репозитория. Документированные и публикуемые сборки используют только universal: за один прогон один debug APK и один release APK, каждый со всеми нативными ABI из android/app/build.gradle.
- Debug:
android/app/build/outputs/apk/debug/app-debug.apk - Release:
android/app/build/outputs/apk/release/app-release-unsigned.apk
Примечания:
- Релизы по умолчанию не подписаны, пока не настроена подпись (
scripts/sign-android-apks.sh). - Нативные ABI внутри universal APK задаются в
android/app/build.gradle(в т.ч.armeabi-v7a, если включён). Сборка колёс дляarmeabi-v7aтребует Android SDK вANDROID_HOME(см.android/README.md). - Если в корне репо есть
dist/reticulum_meshchatx-*.whl(например изpython -m build --wheel -o dist .), обновление встроенного репозитория предпочитает эту wheel пакету MeshChatX с PyPI. В CI wheel собирается до шага Android 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 |
Базовая аутентификация |
--reset-password |
MESHCHAT_RESET_PASSWORD |
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 и UV |
make run |
Запуск MeshChatX через UV |
make build |
Сборка фронтенда |
make lint |
eslint и ruff |
make test |
Тесты фронтенда и бэкенда |
make clean |
Удалить артефакты сборки и node_modules |
Версионирование
Текущая версия в репозитории: 4.6.3.
- Редактируйте для релизного бампа только поле
versionвpackage.json. - Команда
pnpm run version:sync(также в началеpnpm run build) распространяет эту версию вpyproject.toml,meshchatx/src/version.py,THIRD_PARTY_NOTICES.txt(строка продукта), README / lang/README.* (строки «текущая версия»),docs/meshchatx_on_raspberry_pi.md(пример pipx) и вспомогательные поляpackaging/arch/PKGBUILD. meshchatx.__version__читается изmeshchatx/src/version.pyбез импортаmeshchatx.src, поэтому обычныйimport meshchatxостаётся лёгким.- Записи changelog по-прежнему вносятся вручную при релизе.
Безопасность
SECURITY.mdLEGAL.md- Встроенные проверки целостности и значения по умолчанию HTTPS/WSS в рантайме приложения.
- Сборка CI и релизы на GitHub Actions.
Добавление языка
Авторский рабочий процесс: ArgosTranslate, затем локальная LLM (Qwen 3 + Gemma 4).
Затем правки и улучшения от сообщества приветствуются через LXMF или любой доступный канал.
Обнаружение локали автоматическое. Добавьте файл в meshchatx/src/frontend/locales/ (например xx.json) с теми же ключами, что в en.json, и строку верхнего уровня _languageName для подписи в селекторе. Можно скопировать en.json и перевести вручную; машинная генерация (в т. ч. Argos) необязательна и никогда не требуется.
По желанию: старт с Argos Translate: для чернового перевода из en.json можно вызвать scripts/argos_translate.py (форматирование, цветной вывод, защита плейсхолдеров вроде {count}).
# Установите argostranslate при необходимости
pipx 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: проверка равенства ключей с en.json.
Никаких других изменений в коде не требуется. Приложение, селектор языка и тесты обнаруживают локали из каталога meshchatx/src/frontend/locales/ во время сборки.
Поддержка проекта
Пожертвования добровольны. Они помогают оплатить время и усилия на разработку этого приложения.
Как поддержать: donate.md (Monero, Ko-Fi, Buy Me a Coffee).
Авторы
- Liam Cottle - оригинальный Reticulum MeshChat
- RFnexus - парсер micron (JavaScript)
- markqvist - Reticulum, LXMF, LXST
Лицензия
Собственные части проекта лицензированы по 0BSD.
Оригинальные upstream-части из Reticulum MeshChat остаются под MIT.
Полный текст и уведомления см. в ../LICENSE.
