18 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 su GitHub: github.com/Quad4-Software/MeshChatX
- Release: github.com/Quad4-Software/MeshChatX
- Changelog:
CHANGELOG.md
rngit: git clone rns://926baefe13daf5178c174f158dae1b45/quad4/MeshChatX
NomadNet Node: c10d80b1a42fa958c37a6cc30dc04f53:/page/index.mu
Modifiche importanti rispetto a Reticulum MeshChat
- Usa LXST per le chiamate
- 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 supportati. Base attuale: Python
>=3.11e Node>=24(Electron 41 allineato 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)
Browser Versions Required:
Safari 16.4 o successivo, Chrome 111 o successivo, Firefox 128 o successivo (interfaccia web integrata).
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 runner CI per l'artefatto pubblicato | Fedora/RHEL/openSUSE |
| Da sorgente | Compilato localmente | Architettura host | Sviluppo e build personalizzati |
Note:
- GitHub Actions compila le release con tag (Linux wheel/AppImage/deb/rpm, Windows, macOS, Flatpak, APK Android se il tag è su dev/master, SLSA, bozza di release) in un'unica esecuzione tramite
.github/workflows/build-release.yml; l'immagine container tramite.github/workflows/docker.yml. CI Android per branch e PR:.github/workflows/android-build.yml. - Per Linux,
x64earm64AppImage + DEB sono compilate su GitHub; il RPM e tentato e viene caricato quando l'artefatto e prodotto.
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 "$(pwd)/meshchat-config:/config" \
ghcr.io/quad4-software/meshchatx:latest
Al posto dell'immagine GHCR puoi usare quad4io/meshchatx:latest se preferisci Docker Hub.
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). 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 (documentazione MeshChatX) in-app quando viene servita dai file meshchatx-docs in bundle 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
Build container (wheel, AppImage, deb, rpm)
Dockerfile.build esegue le stesse fasi usate in CI (Poetry, pnpm, task, dipendenze APT). Orientato a linux/amd64 (tarball NodeSource amd64, Task amd64). Il target predefinito e completo; si puo sovrascrivere con un build-arg.
Valori per MESHCHATX_BUILD_TARGETS: all (default), wheel o electron (AppImage + deb per x64 e arm64, RPM se possibile, senza wheel).
Build:
docker build -f Dockerfile.build -t meshchatx-build:local .
Solo wheel:
docker build -f Dockerfile.build --build-arg MESHCHATX_BUILD_TARGETS=wheel -t meshchatx-build:wheel .
Copiare /artifacts dall'immagine finita all'host:
cid=$(docker create meshchatx-build:local)
docker cp "${cid}:/artifacts" ./meshchatx-artifacts
docker rm "${cid}"
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: solo APK universale (vedi
android/README.md)
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 APK universal (un debug + una release per esecuzione; vedi android/README.md)
cd android
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
Una sola variante Android. Gradle sincronizza l'intera directory meshchatx/ in app/src/main/python/meshchatx/, incluse le wheel offline del repository. Build documentate e pubblicate usano solo packaging universal: un APK debug e uno release per esecuzione, ciascuno con tutti gli ABI nativi configurati in 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
Note:
- Gli output di release non sono firmati finche non configuri la firma (
scripts/sign-android-apks.sh). - Gli ABI nativi nel APK universale seguono
android/app/build.gradle(inclusoarmeabi-v7ase abilitato). Le wheel perarmeabi-v7arichiedono Android SDK suANDROID_HOME(vediandroid/README.md). - Se esiste in root
dist/reticulum_meshchatx-*.whl(es. dapython -m build --wheel -o dist .), l'aggiornamento del repository in bundle preferisce quella wheel rispetto a PyPI. In CI la wheel viene costruita prima del passo Gradle Android.
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/bundled | Directory dei file frontend (necessaria per installazioni da sorgente senza asset in bundle) |
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 |
Versionamento
Versione attuale nel repository: 4.6.0.
- L'unico valore che modifichi per un bump di release e
versioninpackage.json. - Esegui
pnpm run version:sync(all'inizio anche dipnpm run build) per propagare inpyproject.toml,meshchatx/src/version.py,THIRD_PARTY_NOTICES.txt(riga prodotto), README / lang/README.* (righe "versione attuale"), esempio pipx indocs/meshchatx_on_raspberry_pi.md, e aiuti inpackaging/arch/PKGBUILD. meshchatx.__version__si legge dameshchatx/src/version.pysenza importaremeshchatx.src, cosi un sempliceimport meshchatxresta leggero.- Le voci del changelog restano manuali quando tagghi una release.
Sicurezza
SECURITY.mdLEGAL.md- Controlli di integrita integrati e valori predefiniti HTTPS/WSS nel runtime dell'app.
- Build CI e release su GitHub Actions.
Aggiungere una lingua
Flusso dell'autore: ArgosTranslate, poi LLM locale (Qwen 3 + Gemma 4).
Poi si accettano volentieri fix dalla community (LXMF o come mi contattate).
Il rilevamento locale e automatico. Aggiungi un file in meshchatx/src/frontend/locales/ (es. xx.json) con le stesse chiavi di en.json e un _languageName in cima per l'etichetta nel selettore. Puoi copiare en.json e tradurre tutto a mano; la generazione assistita da machine e opzionale e non e mai obbligatoria.
Opzionale: avvio con Argos Translate -- per una bozza partendo da en.json puoi usare scripts/argos_translate.py (formattazione, output a colori, variabili di interpolazione come {count}).
# Installa argostranslate se non l'hai gia
pipx 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 qualsiasi passaggio automatico, un LLM o un revisore umano controlli grammatica, contesto e tono (es. formale vs informale).
Esegui pnpm test -- tests/frontend/i18n.test.js --run per verificare la parita delle chiavi con en.json.
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 da Reticulum MeshChat restano sotto MIT.
Per testo completo e note, vedi ../LICENSE.