16 KiB
Reticulum MeshChatX
English | Deutsch | Русский | 中文 | 日本語
Un fork ampiamente modificato e ricco di funzionalita di Reticulum MeshChat di Liam Cottle.
Questo progetto e indipendente dal progetto originale Reticulum MeshChat e non e affiliato ad esso.
- Sito web: meshchatx.com
- Codice sorgente: git.quad4.io/RNS-Things/MeshChatX
- Mirror ufficiale: github.com/Quad4/MeshChatX — usato anche per le build Windows e macOS al momento.
- Release: git.quad4.io/RNS-Things/MeshChatX/releases
- Changelog:
CHANGELOG.md - TODO: Boards
Modifiche importanti rispetto a Reticulum MeshChat
- Usa LXST
- Peewee ORM sostituito con SQL diretto
- Axios sostituito con
fetchnativo - Electron 41.x (runtime Node 24 incluso)
- Wheel
.whlcon web server e asset frontend integrati per piu opzioni di deploy - i18n
- PNPM e Poetry per le dipendenze
Warning
MeshChatX non garantisce la compatibilita dei dati con le versioni precedenti di Reticulum MeshChat. Eseguire un backup prima della migrazione o dei test.
Warning
I sistemi legacy non sono ancora completamente supportati. Requisiti minimi attuali: Python
>=3.11e Node>=24(Electron 41 allinea a Node 24;enginesinpackage.jsone la CI seguono la stessa linea).
Requisiti
- Python
>=3.11(dapyproject.toml) - Node.js
>=24(dapackage.json, campoengines) - pnpm
10.33.0(dapackage.json, campopackageManager) - Poetry (utilizzato in
Taskfile.ymle nei workflow CI)
task install
task lint:all
task test:all
task build:all
Metodi di installazione
Scegli il metodo in base all'ambiente e al formato del pacchetto.
| Metodo | Include frontend | Architetture | Ideale per |
|---|---|---|---|
| Immagine Docker | Si | linux/amd64, linux/arm64 |
Avvio rapido su server Linux |
Python wheel (.whl) |
Si | Qualsiasi architettura supportata da Python | Installazione headless/web-server senza build Node |
| Linux AppImage | Si | x64, arm64 |
Uso desktop portatile |
Pacchetto Debian (.deb) |
Si | x64, arm64 |
Installazione Debian/Ubuntu |
Pacchetto RPM (.rpm) |
Si | Dipende dal CI | Fedora/RHEL/openSUSE |
| Da sorgente | Compilato localmente | Architettura host | Sviluppo e build personalizzati |
Note:
- Il workflow di release compila esplicitamente Linux
x64earm64AppImage + DEB. - RPM viene anche tentato e caricato quando prodotto con successo.
Avvio rapido: Docker
docker compose up -d
Il file compose predefinito mappa:
127.0.0.1:8000sull'host -> porta8000del container./meshchat-config->/configper la persistenza
In caso di errori di permessi:
sudo chown -R 1000:1000 ./meshchat-config
Installazione da artefatti di release
1) Linux AppImage (x64/arm64)
- Scaricare
ReticulumMeshChatX-v<versione>-linux-<arch>.AppImagedalle release. - Rendere eseguibile e avviare:
chmod +x ./ReticulumMeshChatX-v*-linux-*.AppImage
./ReticulumMeshChatX-v*-linux-*.AppImage
2) Debian/Ubuntu .deb (x64/arm64)
- Scaricare
ReticulumMeshChatX-v<versione>-linux-<arch>.deb. - Installare:
sudo apt install ./ReticulumMeshChatX-v*-linux-*.deb
3) Sistemi RPM
- Scaricare
ReticulumMeshChatX-v<versione>-linux-<arch>.rpmse presente nella release. - Installare:
sudo rpm -Uvh ./ReticulumMeshChatX-v*-linux-*.rpm
4) Python wheel (.whl)
I wheel delle release includono gli asset web compilati.
pip install ./reticulum_meshchatx-*-py3-none-any.whl
meshchatx --headless
pipx e supportato:
pipx install ./reticulum_meshchatx-*-py3-none-any.whl
Esecuzione da sorgente (modalita web server)
Per sviluppo o build locali personalizzate.
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
Note sui comandi di installazione:
pnpm install --frozen-lockfilerifiuta di aggiornarepnpm-lock.yamle fallisce se il lockfile non corrisponde apackage.json. Cosi' si evita che una versione upstream inattesa venga installata silenziosamente.verify-store-integrity=truee' impostato anche nel.npmrcdel progetto; la riga esplicitapnpm config setrafforza inoltre la configurazione utente.- Gli script di lifecycle (
preinstall/postinstall) sono bloccati di default in pnpm v10+. Solo i pacchetti elencati inpnpm.onlyBuiltDependenciesdipackage.jsonpossono eseguire script di installazione (attualmenteelectron,electron-winstaller,esbuild,protobufjs). poetry check --lockfallisce subito sepoetry.locknon e' allineato conpyproject.toml;poetry installrisolve poi solo dal lockfile.- Per un'installazione Poetry strettamente basata sul lockfile (senza refresh implicito), fissa Poetry con
pip install "poetry==2.3.4", in linea con la CI.
Se vuoi aggiornare intenzionalmente le dipendenze, esegui pnpm update / poetry update in un commit dedicato e rivedi il diff del lockfile prima del push.
Esecuzione in sandbox (Linux)
Per eseguire il binario nativo meshchatx (alias: meshchat) con isolamento aggiuntivo del filesystem, puoi usare Firejail o Bubblewrap (bwrap) mantenendo l'accesso di rete normale per Reticulum e l'interfaccia web. Esempi completi (pip/pipx, Poetry, note sulla seriale USB) sono in:
La stessa pagina compare nell'elenco Documentazione in-app (documentazione MeshChatX) quando viene servita dai file meshchatx-docs inclusi o sincronizzati.
Desktop Linux: font emoji
Il selettore emoji mostra gli emoji Unicode standard usando i font di sistema (Electron/Chromium). Se compaiono quadrati vuoti ("tofu"), installate un pacchetto emoji a colori e riavviate l'app.
| Famiglia (esempi) | Pacchetto |
|---|---|
| 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 |
Dopo l'installazione, eseguite fc-cache -fv se i glifi non compaiono fino al prossimo accesso. Opzionale: noto-fonts per una copertura simboli più ampia su installazioni minime.
Compilazione pacchetti desktop da sorgente
Gli script sono definiti in package.json e 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
Oppure tramite Task:
task dist:fe:rpm
Supporto architetture
- Immagine Docker:
amd64,arm64 - Linux AppImage:
x64,arm64 - Linux DEB:
x64,arm64 - Windows:
x64,arm64(script di build disponibili) - macOS: script di build disponibili (
arm64,universal) per ambienti di build locali - Android: APK nativi —
arm64-v8a,x86_64, universale
Android
MeshChatX supporta build APK Android native (non solo Termux).
Build APK da sorgente
Dalla root del repository:
# 1) Build delle wheel Chaquopy usate da android/app/build.gradle
bash scripts/build-android-wheels-local.sh
# 2) Build di entrambe le varianti APK
cd android
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
Output APK (split degli ABI e APK universale; vedere splits { abi { ... } } in android/app/build.gradle):
Debug (android/app/build/outputs/apk/debug/):
app-arm64-v8a-debug.apk(dispositivi ARM64)app-x86_64-debug.apk(emulatori x86_64)app-universal-debug.apk(tutti gli ABI inclusi in un unico pacchetto)
Release (android/app/build/outputs/apk/release/):
app-arm64-v8a-release-unsigned.apkapp-x86_64-release-unsigned.apkapp-universal-release-unsigned.apk
Note:
- Gli output release sono non firmati di default se non configurate le firme.
- Se serve una sola variante:
:app:assembleDebugo:app:assembleRelease. - Android punta agli ABI
arm64-v8aex86_64come inandroid/app/build.gradle.
Documentazione aggiuntiva:
Configurazione
| Argomento | Variabile d'ambiente | Predefinito | Descrizione |
|---|---|---|---|
--host |
MESHCHAT_HOST |
127.0.0.1 |
Indirizzo di bind del web server |
--port |
MESHCHAT_PORT |
8000 |
Porta del web server |
--no-https |
MESHCHAT_NO_HTTPS |
false |
Disattiva HTTPS |
--ssl-cert / --ssl-key |
MESHCHAT_SSL_CERT / MESHCHAT_SSL_KEY |
(nessuno) | Percorsi PEM certificato e chiave; impostare entrambi. Sostituisce i certificati auto-generati sotto l'identita nella directory ssl/. |
--rns-log-level |
MESHCHAT_RNS_LOG_LEVEL |
(nessuno) | Livello di log Reticulum (RNS): none, critical, error, warning, notice, verbose, debug, extreme o numerico. La CLI ha priorita sulla variabile d'ambiente se entrambe sono impostate. |
--headless |
MESHCHAT_HEADLESS |
false |
Non aprire il browser automaticamente |
--auth |
MESHCHAT_AUTH |
false |
Attiva autenticazione base |
--storage-dir |
MESHCHAT_STORAGE_DIR |
./storage |
Directory dei dati |
--public-dir |
MESHCHAT_PUBLIC_DIR |
auto/bundle | Directory dei file frontend (per installazioni senza asset inclusi) |
Branch
| Branch | Scopo |
|---|---|
master |
Release stabili. Solo codice pronto per la produzione. |
dev |
Sviluppo attivo. Potrebbe contenere modifiche instabili o incomplete. |
Sviluppo
Attivita comuni da Taskfile.yml:
task install
task lint:all
task test:all
task build:all
Scorciatoie Makefile:
| Comando | Descrizione |
|---|---|
make install |
Installa dipendenze pnpm e poetry |
make run |
Esegue MeshChatX tramite poetry |
make build |
Compila il frontend |
make lint |
Esegue eslint e ruff |
make test |
Test frontend e backend |
make clean |
Rimuove artefatti di build e node_modules |
Versioning
Versione attuale nel repository: 4.5.0.
- La fonte della versione JavaScript/Electron e
package.json. meshchatx/src/version.pye sincronizzato dapackage.jsoncon:
pnpm run version:sync
Per release coerenti, allineare i campi di versione dove richiesto (package.json, pyproject.toml, meshchatx/__init__.py).
Sicurezza
SECURITY.md- Controlli di integrita integrati e HTTPS/WSS predefiniti nell'app
- Workflow di scansione CI in
.gitea/workflows/
Aggiungere una lingua
Il rilevamento della lingua locale è automatico. Aggiungi un nuovo file in meshchatx/src/frontend/locales/ (ad esempio xx.json) con le stesse chiavi di en.json e un campo in cima _languageName per l'etichetta nel selettore lingue. Puoi copiare en.json e tradurre tutto a mano; la generazione automatica è opzionale e non è mai obbligatoria.
Correzioni e traduzioni umane sono benvenute. Miglioramenti a un file esistente o un file interamente tradotto a mano possono essere inviati con una pull request o una segnalazione sul repository sorgente o sul mirror GitHub.
Opzionale: bozza con Argos Translate -- Se vuoi una prima bozza generata da en.json, puoi usare scripts/argos_translate.py. Gestisce la formattazione e aiuta a proteggere le variabili di interpolazione (come {count}).
# Installa argostranslate se non l'hai già fatto
pip install argostranslate
# Esegui lo script di traduzione
python scripts/argos_translate.py --from en --to xx --input meshchatx/src/frontend/locales/en.json --output meshchatx/src/frontend/locales/xx.json --name "Nome della tua lingua"
Dopo una passata automatica, fai verificare grammatica, contesto e tono a un LLM o a un revisore umano (es. formale vs informale).
Verifica la parità delle chiavi con: pnpm test -- tests/frontend/i18n.test.js --run
Non sono necessarie altre modifiche al codice. L'app, il selettore della lingua e i test scoprono le lingue dalla cartella meshchatx/src/frontend/locales/ durante la compilazione.
Crediti
- Liam Cottle - Reticulum MeshChat originale
- RFnexus - Parser Micron (JavaScript)
- markqvist - Reticulum, LXMF, LXST
Licenza
Le parti di proprieta del progetto sono rilasciate sotto 0BSD.
Le parti originali upstream derivate da MeshChat restano sotto MIT.
Per testo completo e note, vedi ../LICENSE.