16 KiB
Reticulum MeshChatX
English | Русский | Italiano | 中文 | 日本語
Ein umfassend modifizierter und funktionsreicher Fork von Reticulum MeshChat von Liam Cottle.
Dieses Projekt ist unabhaengig vom originalen Reticulum MeshChat und steht in keiner Verbindung dazu.
- Website: meshchatx.com
- Quellcode: git.quad4.io/RNS-Things/MeshChatX
- Offizieller Spiegel: github.com/Quad4/MeshChatX – derzeit auch fuer Windows- und macOS-Builds genutzt.
- Releases: git.quad4.io/RNS-Things/MeshChatX/releases
- Aenderungsprotokoll:
CHANGELOG.md - TODO: Boards
Wichtige Aenderungen gegenueber Reticulum MeshChat
- Verwendet LXST
- Peewee-ORM durch direktes SQL ersetzt
- Axios durch natives
fetchersetzt - Aktuelles Electron
.whl-Pakete mit Webserver und eingebauten Frontend-Assets fuer mehr Deploy-Optionen- i18n
- PNPM und Poetry fuer Abhaengigkeiten
Warning
MeshChatX garantiert keine Datenkompatibilitaet mit aelteren Reticulum-MeshChat-Versionen. Erstellen Sie vor Migration oder Tests eine Datensicherung.
Warning
Aeltere Systeme werden noch nicht vollstaendig unterstuetzt. Aktuelle Mindestanforderungen: Python
>=3.11und Node>=22(Electron nutzt Node 22; CI kann neuer sein).
Voraussetzungen
- Python
>=3.11(auspyproject.toml) - Node.js
>=22(auspackage.json) - pnpm
10.32.1(auspackage.json) - Poetry (verwendet in
Taskfile.ymlund CI-Workflows)
task install
task lint:all
task test:all
task build:all
Installationsmethoden
Waehlen Sie die Methode passend zu Umgebung und Paketierung.
| Methode | Frontend enthalten | Architekturen | Geeignet fuer |
|---|---|---|---|
| Docker-Image | Ja | linux/amd64, linux/arm64 |
Schnellster Start auf Linux-Servern |
Python Wheel (.whl) |
Ja | Jede Python-unterstuetzte Architektur | Headless/Webserver ohne Node-Build |
| Linux AppImage | Ja | x64, arm64 |
Portabler Desktop-Einsatz |
Debian-Paket (.deb) |
Ja | x64, arm64 |
Debian/Ubuntu-Installation |
RPM-Paket (.rpm) |
Ja | CI-abhaengig | Fedora/RHEL/openSUSE |
| Aus Quellcode | Lokal gebaut | Host-Architektur | Entwicklung und individuelle Builds |
Hinweise:
- Der Release-Workflow baut explizit Linux
x64undarm64AppImage + DEB. - RPM wird ebenfalls versucht und bei Erfolg hochgeladen.
Schnellstart: Docker
docker compose up -d
Standard-Compose-Datei:
127.0.0.1:8000auf dem Host -> Container-Port8000./meshchat-config->/configfuer Persistenz
Bei Berechtigungsproblemen:
sudo chown -R 1000:1000 ./meshchat-config
Installation aus Release-Artefakten
1) Linux AppImage (x64/arm64)
ReticulumMeshChatX-v<version>-linux-<arch>.AppImagevon den Releases herunterladen.- Ausfuehrbar machen und starten:
chmod +x ./ReticulumMeshChatX-v*-linux-*.AppImage
./ReticulumMeshChatX-v*-linux-*.AppImage
2) Debian/Ubuntu .deb (x64/arm64)
ReticulumMeshChatX-v<version>-linux-<arch>.debherunterladen.- Installieren:
sudo apt install ./ReticulumMeshChatX-v*-linux-*.deb
3) RPM-basierte Systeme
ReticulumMeshChatX-v<version>-linux-<arch>.rpmherunterladen, falls im Release vorhanden.- Installieren:
sudo rpm -Uvh ./ReticulumMeshChatX-v*-linux-*.rpm
4) Python Wheel (.whl)
Release-Wheels enthalten die gebauten Web-Assets.
pip install ./reticulum_meshchatx-*-py3-none-any.whl
meshchatx --headless
pipx wird ebenfalls unterstuetzt:
pipx install ./reticulum_meshchatx-*-py3-none-any.whl
Aus Quellcode ausfuehren (Webserver-Modus)
Fuer Entwicklung oder lokale Custom-Builds.
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.1.1"
poetry check --lock
poetry install
pnpm run build-frontend
poetry run python -m meshchatx.meshchat --headless --host 127.0.0.1
Hinweise zu den Installationsbefehlen:
pnpm install --frozen-lockfileverweigert Aenderungen anpnpm-lock.yamlund schlaegt fehl, wenn die Lockdatei nicht zupackage.jsonpasst. Damit wird verhindert, dass eine unerwartete Upstream-Version still eingespielt wird.verify-store-integrity=trueist auch in der projektweiten.npmrcgesetzt; die explizitepnpm config set-Zeile haertet zusaetzlich die Benutzerkonfiguration.- Lifecycle-Skripte (
preinstall/postinstall) sind in pnpm v10+ standardmaessig blockiert. Nur die unterpnpm.onlyBuiltDependenciesinpackage.jsonaufgefuehrten Pakete duerfen Installationsskripte ausfuehren (aktuellelectron,electron-winstaller,esbuild,protobufjs). poetry check --lockschlaegt frueh fehl, wennpoetry.locknicht mitpyproject.tomlsynchron ist;poetry installaufloest danach nur aus der Lockdatei.- Fuer eine strikte Lockfile-Installation (ohne implizite Lock-Aktualisierung) Poetry mit
pip install "poetry==2.1.1"pinnen, passend zur CI-Version.
Wenn Sie absichtlich Abhaengigkeiten aktualisieren wollen, fuehren Sie pnpm update / poetry update in einem dedizierten Commit aus und pruefen Sie das resultierende Lockdatei-Diff vor dem Push.
Sandboxing (Linux)
Um das native meshchatx-Programm (Alias: meshchat) mit zusaetzlicher Dateisystem-Isolation auszufuehren, koennen Sie Firejail oder Bubblewrap (bwrap) nutzen, bei weiterhin normalem Netzwerkzugriff fuer Reticulum und die Web-Oberflaeche. Vollstaendige Beispiele (pip/pipx, Poetry, Hinweise zu USB-Seriell) finden Sie in:
Dieselbe Seite erscheint in der in-app-Dokumentation (MeshChatX-Docs), wenn sie aus den gebuendelten oder synchronisierten meshchatx-docs-Dateien ausgeliefert wird.
Linux-Desktop: Emoji-Schriften
Die Emoji-Auswahl rendert Standard-Unicode-Emoji mit den Systemschriften (Electron/Chromium). Wenn Emoji als leere Kaestchen („Tofu“) erscheinen, installieren Sie ein Farb-Emoji-Paket und starten Sie die App neu.
| Distribution (Beispiele) | Paket |
|---|---|
| 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 |
Nach der Installation bei Bedarf fc-cache -fv ausfuehren. Optional: noto-fonts fuer breitere Symbolabdeckung bei minimalen Installationen.
Desktop-Pakete aus Quellcode bauen
Diese Skripte sind in package.json und Taskfile.yml definiert.
Linux x64 AppImage + DEB
pnpm run dist:linux-x64
Linux arm64 AppImage + DEB
pnpm run dist:linux-arm64
RPM
pnpm run dist:rpm
Oder ueber Task:
task dist:fe:rpm
Architekturunterstuetzung
- Docker-Image:
amd64,arm64 - Linux AppImage:
x64,arm64 - Linux DEB:
x64,arm64 - Windows:
x64,arm64(Build-Skripte vorhanden) - macOS: Build-Skripte vorhanden (
arm64,universal) fuer lokale Build-Umgebungen - Android: native APKs — ABIs
arm64-v8a,x86_64, plus universal
Android
MeshChatX unterstuetzt native Android-APK-Builds (nicht nur Termux).
APKs aus Quellcode bauen
Vom Repository-Root:
# 1) Chaquopy-Wheels gemaess android/app/build.gradle bauen
bash scripts/build-android-wheels-local.sh
# 2) Beide APK-Varianten bauen
cd android
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
APK-Ausgaben (ABI-Splits plus universelles APK; siehe splits { abi { ... } } in android/app/build.gradle):
Debug (android/app/build/outputs/apk/debug/):
app-arm64-v8a-debug.apk(ARM64-Geraete)app-x86_64-debug.apk(x86_64-Emulatoren)app-universal-debug.apk(alle gebundelten ABIs in einem Paket)
Release (android/app/build/outputs/apk/release/):
app-arm64-v8a-release-unsigned.apkapp-x86_64-release-unsigned.apkapp-universal-release-unsigned.apk
Hinweise:
- Release-Ausgaben sind standardmaessig unsigniert, sofern keine Signatur konfiguriert ist.
- Wenn nur eine Variante noetig ist:
:app:assembleDebugoder:app:assembleRelease. - Android zielt auf die ABIs
arm64-v8aundx86_64gemaessandroid/app/build.gradle.
Weitere Dokumentation:
Konfiguration
| Argument | Umgebungsvariable | Standard | Beschreibung |
|---|---|---|---|
--host |
MESHCHAT_HOST |
127.0.0.1 |
Webserver-Bind-Adresse |
--port |
MESHCHAT_PORT |
8000 |
Webserver-Port |
--no-https |
MESHCHAT_NO_HTTPS |
false |
HTTPS deaktivieren |
--ssl-cert / --ssl-key |
MESHCHAT_SSL_CERT / MESHCHAT_SSL_KEY |
(keine) | PEM-Zertifikat und Schluessel; beide setzen. Ueberschreibt automatisch erzeugte Zertifikate unter der Identitaet im Verzeichnis ssl/. |
--rns-log-level |
MESHCHAT_RNS_LOG_LEVEL |
(keine) | Reticulum (RNS) Log-Level: none, critical, error, warning, notice, verbose, debug, extreme oder numerisch. CLI ueberschreibt die Umgebungsvariable, wenn beide gesetzt sind. |
--headless |
MESHCHAT_HEADLESS |
false |
Browser nicht automatisch oeffnen |
--auth |
MESHCHAT_AUTH |
false |
Basis-Authentifizierung aktivieren |
--storage-dir |
MESHCHAT_STORAGE_DIR |
./storage |
Datenverzeichnis |
--public-dir |
MESHCHAT_PUBLIC_DIR |
auto/bundled | Frontend-Verzeichnis (fuer Installationen ohne gebundelte Assets) |
Branches
| Branch | Zweck |
|---|---|
master |
Stabile Releases. Nur produktionsreifer Code. |
dev |
Aktive Entwicklung. Kann instabile oder unvollstaendige Aenderungen enthalten. |
Entwicklung
Gaengige Aufgaben aus Taskfile.yml:
task install
task lint:all
task test:all
task build:all
Makefile-Kurzformen:
| Befehl | Beschreibung |
|---|---|
make install |
pnpm- und Poetry-Abhaengigkeiten installieren |
make run |
MeshChatX ueber Poetry starten |
make build |
Frontend bauen |
make lint |
eslint und ruff ausfuehren |
make test |
Frontend- und Backend-Tests |
make clean |
Build-Artefakte und node_modules entfernen |
Versionierung
Aktuelle Version in diesem Repository: 4.5.0.
package.jsonist die Quelle fuer die JavaScript/Electron-Version.meshchatx/src/version.pywird auspackage.jsonsynchronisiert mit:
pnpm run version:sync
Fuer konsistente Releases die Versionsfelder dort abgleichen, wo noetig (package.json, pyproject.toml, meshchatx/__init__.py).
Sicherheit
SECURITY.md- Integrierte Integritaetspruefungen und HTTPS/WSS-Standardeinstellungen in der App
- CI-Scanning-Workflows in
.gitea/workflows/
Sprache hinzufuegen
Die Locale-Erkennung erfolgt automatisch. Legen Sie eine neue Datei unter meshchatx/src/frontend/locales/ an (z. B. xx.json) mit denselben Schluesseln wie en.json und einem obersten Feld _languageName fuer die Anzeige in der Sprachauswahl. Sie koennen en.json kopieren und alles von Hand uebersetzen; maschinelle Erzeugung ist optional und nie verpflichtend.
Korrekturen und menschliche Uebersetzungen sind willkommen. Verbesserungen an bestehenden Locale-Dateien oder vollstaendig manuell uebersetzte Dateien koennen Sie per Pull Request oder Issue im Quellcode-Repository oder beim GitHub-Spiegel einreichen.
Optional: Argos-Translate-Bootstrap -- Wenn Sie einen maschinellen Erstentwurf aus en.json wollen, koennen Sie scripts/argos_translate.py nutzen. Es kuemmert sich um Formatierung und schuetzt Interpolationsvariablen (wie {count}) vor versehentlichen Aenderungen.
# Installieren Sie argostranslate, falls noch nicht geschehen
pip install argostranslate
# Fuehren Sie das Uebersetzungsskript aus
python scripts/argos_translate.py --from en --to xx --input meshchatx/src/frontend/locales/en.json --output meshchatx/src/frontend/locales/xx.json --name "Ihr Sprachname"
Nach einem maschinellen Entwurf sollten ein LLM oder ein Mensch Grammatik, Kontext und Ton pruefen (z. B. formell vs. informell).
Schluesselparitaet pruefen: pnpm test -- tests/frontend/i18n.test.js --run
Keine weiteren Code-Aenderungen noetig. App, Sprachwahl und Tests lesen Locales zur Build-Zeit aus meshchatx/src/frontend/locales/.
Mitwirkende
- Liam Cottle - Originales Reticulum MeshChat
- RFnexus - Micron-Parser (JavaScript)
- markqvist - Reticulum, LXMF, LXST
Lizenz
Die projekt-eigenen Anteile stehen unter 0BSD.
Urspruengliche Upstream-Anteile von MeshChat bleiben unter MIT.
Vollstaendiger Text und Hinweise in ../LICENSE.