Update Docs

This commit is contained in:
Ivan 2026-08-03 20:53:12 -05:00
parent 4e4ef0526a
commit af76f09db6
No known key found for this signature in database
24 changed files with 139 additions and 72 deletions

View file

@ -2,7 +2,7 @@
[Русский](lang/README.ru.md) | [Deutsch](lang/README.de.md) | [Italiano](lang/README.it.md) | [中文](lang/README.zh.md) | [日本語](lang/README.ja.md)
A extensively modified and feature-rich fork of [Reticulum MeshChat](https://github.com/liamcottle/reticulum-meshchat) by Liam Cottle.
Fork of [Reticulum MeshChat](https://github.com/liamcottle/reticulum-meshchat) by Liam Cottle. MeshChatX adds LXST voice calls, RRC relay chat, Nomad map overlays, plugins, raw SQLite (no Peewee), and Electron 41 desktop builds.
This project is independent from the original Reticulum MeshChat project and is not affiliated with it.
@ -197,7 +197,7 @@ If you intentionally want to update dependencies, run `pnpm update` / `uv lock`
To run the native `meshchatx` binary (alias: `meshchat`) with extra filesystem isolation, you can use **Firejail** or **Bubblewrap** (`bwrap`) while keeping normal network access for Reticulum and the web UI. Full examples (pip/pipx, Poetry, USB serial notes) are in:
- [`docs/meshchatx_linux_sandbox.md`](docs/meshchatx_linux_sandbox.md)
- [`docs/en/platform-guides/linux-sandbox.md`](docs/en/platform-guides/linux-sandbox.md)
The same page appears in the in-app **Documentation** list (MeshChatX docs) when served from the bundled or synced `meshchatx-docs` files.
@ -391,7 +391,7 @@ Notes:
Additional docs:
- [`docs/meshchatx_on_android_with_termux.md`](docs/meshchatx_on_android_with_termux.md)
- [`docs/en/platform-guides/android-termux.md`](docs/en/platform-guides/android-termux.md)
- [`android/README.md`](android/README.md)
## Configuration
@ -450,7 +450,7 @@ task build
Current version in this repo is `4.8.2`.
- **`package.json`** `version` is the only value you edit for a release bump.
- Run **`pnpm run version:sync`** (also run at the start of **`pnpm run build`**) to propagate that version into **`pyproject.toml`**, **`meshchatx/src/version.py`**, **`THIRD_PARTY_NOTICES.txt`** (product line), **README** / **lang/README.\*** “current version” lines, **`docs/meshchatx_on_raspberry_pi.md`** pipx example, and **`packaging/arch/PKGBUILD`** helpers.
- Run **`pnpm run version:sync`** (also run at the start of **`pnpm run build`**) to propagate that version into **`pyproject.toml`**, **`meshchatx/src/version.py`**, **`THIRD_PARTY_NOTICES.txt`** (product line), **README** / **lang/README.\*** “current version” lines, **`docs/en/platform-guides/raspberry-pi.md`** pipx example, and **`packaging/arch/PKGBUILD`** helpers.
- **`meshchatx.__version__`** is read from **`meshchatx/src/version.py`** without importing **`meshchatx.src`**, so a plain `import meshchatx` stays lightweight.
- **Changelog** entries stay manual when you cut a release.
@ -521,7 +521,7 @@ People are then welcome to submit fixes to me via LXMF (`f489752fbef161c64d65e38
Locale discovery is automatic. Add a new file under `meshchatx/src/frontend/locales/` (for example `xx.json`) with the same keys as `en.json` and a top-level `_languageName` string for the label shown in the language selector. You can copy `en.json` and translate every value by hand; **machine-assisted generation is optional** and never required.
**Optional: Argos Translate bootstrap** -- If you want a machine-generated first draft from `en.json`, you can use `scripts/argos_translate.py`. It handles formatting, color output, and helps protect interpolation variables (like `{count}`) from accidental edits.
**Optional: Argos Translate bootstrap.** For a machine-generated first draft from `en.json`, use `scripts/argos_translate.py`. It handles formatting, color output, and protects interpolation variables (like `{count}`) from accidental edits.
```bash
# Install argostranslate if you haven't already

View file

@ -1,6 +1,6 @@
# Architecture and design
MeshChatX is a heavily extended fork of Reticulum MeshChat. The goals below shaped how the codebase is organized.
MeshChatX is a fork of Reticulum MeshChat with LXST telephony, RRC relay chat, Nomad tooling, plugins, and a SQL backend without Peewee. The goals below shaped how the codebase is organized.
## Design goals

View file

@ -96,6 +96,6 @@ Legacy upstream data may still exist under `~/.reticulum-meshchat/`. Migration t
- **Architecture and design** explains backend managers, identity scoping, and the API model.
- **LXMF messaging** and **Audio calls** describe day-to-day communication features.
- **Reticulum interfaces** explains how your node joins the mesh.
- Platform guides under **Platform guides** cover Raspberry Pi, Android Termux, Meta Quest, Linux sandboxing, and Windows AppContainer sandboxing.
- Platform guides under **Platform guides** cover Raspberry Pi, Android Termux, Meta Quest, and Linux sandboxing (Firejail and Bubblewrap).
For protocol-level detail, open the **Reticulum** tab in Documentation or visit the [Reticulum manual](https://reticulum.network/manual/) online.

View file

@ -70,7 +70,7 @@ Privacy mode does not disable Reticulum mesh traffic. It limits clearnet fetches
On Linux, MeshChatX can enable two complementary in-process sandboxes when supported:
- **Landlock** restricts filesystem paths the backend may use. User-local pipx tools (for example Argos Translate under `~/.local`) need explicit read and sometimes write roots. See **Linux sandboxing** in Platform guides.
- **Seccomp-BPF** installs a syscall denylist (via libseccomp) that blocks kernel-admin and related calls a mesh client does not need
- **Seccomp-BPF** installs a syscall denylist (via libseccomp) that blocks kernel-admin and related calls a mesh client does not need.
Both auto-enable when available and fall back to a no-op when the platform, kernel, or libraries cannot support them. Override with:
@ -81,6 +81,10 @@ Android never enables these in-process sandboxes (the Android app seccomp policy
See **Linux sandboxing** in Platform guides for optional Firejail and Bubblewrap wrappers around the host install.
## Windows Electron AppContainer
Windows desktop builds can spawn the Python backend inside an LPAC AppContainer when `MESHCHAT_APPCONTAINER=1`. Default installs start the backend directly without that wrapper. Check `/api/v1/server/security` for `appcontainer_active` when debugging sandbox-related SQLite or filesystem errors on Windows.
## Blocking and filtering
Use **Blocked** for specific destination hashes. Combine with sieve filters, message blocklists, and LXMF stamp policies described in **LXMF messaging**.

View file

@ -200,7 +200,7 @@ CI release builds use the clearnet path. Without a bundled copy the Reticulum ta
MeshChatX includes optional tooling to pull `rns`, `lxmf`, `lxst`, and the Reticulum manual from markqvist's rngit remotes over the mesh instead of clearnet.
**Note:** Installing Python packages over RNS is significantly slower than PyPI and is intended for use in environments with mesh access but restricted clearnet. PyPI remains the default and recommended path for CI and standard development.
**Note:** Installing Python packages over RNS is slower than PyPI and fits mesh-only hosts with restricted clearnet. PyPI remains the default path for CI and standard development.
| Remote | Purpose |
| ------------------------------------------------------------ | --------------------- |

View file

@ -1,12 +1,12 @@
# Android with Termux
It's possible to run MeshChatX on Android using [Termux](https://termux.dev/). Installation is now much simpler since the wheel package includes both the server and pre-built web assets.
MeshChatX runs on Android through [Termux](https://termux.dev/). Release wheels ship the Python backend and built web UI, so you do not need Node on the phone for a normal install.
## Method 1: Install from Wheel (Recommended)
## Install from wheel
This is the easiest method - the wheel includes everything you need.
The wheel bundles server code and frontend assets.
### Install System Dependencies
### System packages
```
pkg upgrade
@ -18,7 +18,7 @@ pkg install build-essential
> Note: Python 3.11 or higher is required. Check with `python --version`.
### Download and Install Wheel
### Wheel install
Download the latest wheel from the [releases page](https://github.com/Quad4-Software/MeshChatX/releases), then:
@ -26,9 +26,9 @@ Download the latest wheel from the [releases page](https://github.com/Quad4-Soft
pip install reticulum_meshchatx-*-py3-none-any.whl
```
The wheel will automatically install all Python dependencies. Building `cryptography` may take a while on Android.
The wheel pulls Python dependencies automatically. Building `cryptography` can take several minutes on Android.
### Run MeshChatX
### Run
```
meshchatx
@ -36,13 +36,13 @@ meshchatx
(`meshchat` is a compatibility alias for the same entry point.)
Then open your Android web browser and navigate to `http://localhost:8000`
Open `http://localhost:8000` in the Android browser.
## Method 2: Install from Source
## Install from source
If you need to build from source (for development or if no wheel is available for your architecture):
Use this path for development or when no wheel fits your setup.
### Install System Dependencies
### System packages
```
pkg upgrade
@ -54,14 +54,14 @@ pkg install binutils
pkg install build-essential
```
### Install pnpm
### pnpm
```
corepack enable
corepack prepare pnpm@latest --activate
```
### Clone and Build
### Clone and build
```
git clone https://github.com/Quad4-Software/MeshChatX.git
@ -74,7 +74,7 @@ uv build --wheel
pip install dist/*.whl
```
### Run MeshChatX
### Run
```
meshchatx
@ -82,6 +82,6 @@ meshchatx
(`meshchat` is a compatibility alias for the same entry point.)
## Configuration Notes
## Configuration notes
> Note: The default `AutoInterface` may not work on your Android device. You will need to configure another interface such as `TCPClientInterface` in the settings.
> Note: The default `AutoInterface` may not work on your Android device. Configure another interface such as `TCPClientInterface` in the settings.

View file

@ -38,7 +38,7 @@ Adjust paths if you prefer another location.
Firejail applies a profile (or defaults) on top of your command. For MeshChatX you typically want:
- **Network** left available so Reticulum and the web UI can work (do not use `--net=none` unless you know you need it).
- **Writable** only your chosen data directory (and anything else the app truly needs).
- **Writable** only your chosen data directory (and any other paths the app needs).
### Installed `meshchatx` (pip, pipx, or system package)

View file

@ -4,6 +4,8 @@ The MeshChatX Android APK runs on Meta Quest 2, Quest 3, Quest 3S, and Quest Pro
MeshChatX opens as a **2D panel** inside your VR environment. It is not a native VR application. You get the full MeshChatX web UI in a floating window while you remain in your Quest home space.
![MeshChatX running on Meta Quest 2](../../../screenshots/vr/meshchatx-quest2.jpeg)
## What you need
- A Meta Quest 2 or newer headset
@ -15,7 +17,7 @@ MeshChatX opens as a **2D panel** inside your VR environment. It is not a native
Download the latest signed Android APK from the [MeshChatX releases page](https://github.com/Quad4-Software/MeshChatX/releases). Release assets are named like `meshchatx-*-release-signed.apk`.
You can also build the APK yourself, see [`android/README.md`](../android/README.md).
You can also build the APK yourself. See [`android/README.md`](../../../android/README.md).
## Enable Developer Mode
@ -24,3 +26,29 @@ You can also build the APK yourself, see [`android/README.md`](../android/README
3. Turn Developer Mode on and accept the prompt on the headset if asked.
Developer Mode is required for sideloading and for SideQuest to see the device.
## Install with SideQuest
Wired install (typical path):
1. Connect the Quest to your PC with USB-C.
2. Put on the headset. Accept **Allow USB debugging** when Meta prompts you.
3. Open the SideQuest desktop app. Confirm the headset shows as connected (green dot).
4. Click **Install APK file from folder on computer** (or drag the APK onto SideQuest).
5. Select the `meshchatx-*-release-signed.apk` file you downloaded.
Wireless ADB works when your PC and headset share a network and SideQuest can pair over Wi-Fi. Follow SideQuest's wireless pairing steps if you prefer that over USB.
## Launch on the headset
1. Open the **Apps** library on the Quest.
2. Filter to **Unknown Sources** (or **Unknown** on newer Horizon builds).
3. Select **MeshChatX**.
The app opens as a 2D panel. Grant microphone permission if you plan to use LXST calls.
## First run
MeshChatX stores data under the Android app sandbox like any other APK build. Add a Reticulum interface from **Interfaces** before you expect mesh traffic. Quest Wi-Fi only reaches your LAN and the internet. It does not replace a mesh uplink unless you configure one (for example a TCP client to a known peer).
For native Android builds (not Termux), see [`android/README.md`](../../../android/README.md).

View file

@ -21,7 +21,7 @@ Plugins cannot rewrite core MeshChatX. They do not get open-ended filesystem or
| --------------- | ------------------------- | ----------------------------------------------- |
| Frontend JS | Browser Web Worker | Medium. Sandboxed worker, capability grants |
| Backend WASM | `wasmtime` on the server | Medium. Fuel-metered, capability-gated host |
| Backend Python | In-process with MeshChatX | High. Permission-checked host, still powerful |
| Backend Python | In-process with MeshChatX | High. Permission-checked in-process host |
| Sideband `*.py` | In-process, flat files | Highest. Opt-in danger switch, full host access |
A packaged plugin can ship frontend only, backend only, or both.
@ -269,7 +269,7 @@ These run in-process with full host access. They are not ZIP-permission gated. K
## Operator tips
- Prefer signed packages from publishers you added yourself
- Deny `network: fetch` unless the plugin truly needs clearnet
- Deny `network: fetch` unless the plugin needs clearnet HTTP
- Prefer WASM backends over Python when you can
- Use `--disable-plugins` when diagnosing weird UI or backend behaviour
- Treat Sideband plugins like running arbitrary local scripts

View file

@ -199,7 +199,7 @@ Wenn Sie absichtlich Abhaengigkeiten aktualisieren wollen, fuehren Sie `pnpm upd
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, UV, Hinweise zu USB-Seriell) finden Sie in:
- [`docs/meshchatx_linux_sandbox.md`](../docs/meshchatx_linux_sandbox.md)
- [`docs/en/platform-guides/linux-sandbox.md`](../docs/en/platform-guides/linux-sandbox.md)
Dieselbe Seite erscheint in der in-app-Liste **Dokumentation** (MeshChatX-Dokumentation), wenn sie aus den gebuendelten oder synchronisierten `meshchatx-docs`-Dateien ausgeliefert wird.
@ -308,7 +308,7 @@ Hinweise:
Weitere Dokumentation:
- [`docs/meshchatx_on_android_with_termux.md`](../docs/meshchatx_on_android_with_termux.md)
- [`docs/en/platform-guides/android-termux.md`](../docs/en/platform-guides/android-termux.md)
- [`android/README.md`](../android/README.md)
## Konfiguration
@ -361,7 +361,7 @@ task build
Aktuelle Version in diesem Repository: `4.8.2`.
- Fuer Release-Bumps bearbeiten Sie **nur** `version` in **`package.json`**.
- **`pnpm run version:sync`** (wird auch zu Beginn von **`pnpm run build`** ausgefuehrt) verbreitet diese Version in **`pyproject.toml`**, **`meshchatx/src/version.py`**, **`THIRD_PARTY_NOTICES.txt`** (Produktzeile), **README** / **lang/README.\*** (Zeilen mit aktueller Version), **`docs/meshchatx_on_raspberry_pi.md`** (pipx-Beispiel) und Hilfsfelder in **`packaging/arch/PKGBUILD`**.
- **`pnpm run version:sync`** (wird auch zu Beginn von **`pnpm run build`** ausgefuehrt) verbreitet diese Version in **`pyproject.toml`**, **`meshchatx/src/version.py`**, **`THIRD_PARTY_NOTICES.txt`** (Produktzeile), **README** / **lang/README.\*** (Zeilen mit aktueller Version), **`docs/en/platform-guides/raspberry-pi.md`** (pipx-Beispiel) und Hilfsfelder in **`packaging/arch/PKGBUILD`**.
- **`meshchatx.__version__`** wird aus **`meshchatx/src/version.py`** gelesen, ohne `meshchatx.src` zu importieren, damit ein normales `import meshchatx` leicht bleibt.
- **Changelog**-Eintrage bleiben beim Release manuell.

View file

@ -199,7 +199,7 @@ Se vuoi aggiornare intenzionalmente le dipendenze, esegui `pnpm update` / `uv lo
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, UV, note sulla seriale USB) sono in:
- [`docs/meshchatx_linux_sandbox.md`](../docs/meshchatx_linux_sandbox.md)
- [`docs/en/platform-guides/linux-sandbox.md`](../docs/en/platform-guides/linux-sandbox.md)
La stessa pagina compare nell'elenco **Documentazione** (documentazione MeshChatX) in-app quando viene servita dai file `meshchatx-docs` in bundle o sincronizzati.
@ -308,7 +308,7 @@ Note:
Documentazione aggiuntiva:
- [`docs/meshchatx_on_android_with_termux.md`](../docs/meshchatx_on_android_with_termux.md)
- [`docs/en/platform-guides/android-termux.md`](../docs/en/platform-guides/android-termux.md)
- [`android/README.md`](../android/README.md)
## Configurazione
@ -361,7 +361,7 @@ I target `Makefile` sono wrapper sottili che delegano a `task` (stessi comandi d
Versione attuale nel repository: `4.8.2`.
- L'unico valore che modifichi per un bump di release e **`version` in `package.json`**.
- Esegui **`pnpm run version:sync`** (all'inizio anche di **`pnpm run build`**) per propagare in **`pyproject.toml`**, **`meshchatx/src/version.py`**, **`THIRD_PARTY_NOTICES.txt`** (riga prodotto), **README** / **lang/README.\*** (righe "versione attuale"), **esempio pipx in `docs/meshchatx_on_raspberry_pi.md`**, e aiuti in **`packaging/arch/PKGBUILD`**.
- Esegui **`pnpm run version:sync`** (all'inizio anche di **`pnpm run build`**) per propagare in **`pyproject.toml`**, **`meshchatx/src/version.py`**, **`THIRD_PARTY_NOTICES.txt`** (riga prodotto), **README** / **lang/README.\*** (righe "versione attuale"), **esempio pipx in `docs/en/platform-guides/raspberry-pi.md`**, e aiuti in **`packaging/arch/PKGBUILD`**.
- **`meshchatx.__version__`** si legge da **`meshchatx/src/version.py`** senza importare **`meshchatx.src`**, cosi un semplice `import meshchatx` resta leggero.
- Le voci del **changelog** restano manuali quando tagghi una release.

View file

@ -199,7 +199,7 @@ uv run python -m meshchatx.meshchat --headless --host 127.0.0.1
ネイティブの `meshchatx`(エイリアス: `meshchat`をファイルシステムをより隔離した状態で動かすには、Reticulum と Web UI 向けの通常のネットワークアクセスを保ちつつ **Firejail** または **Bubblewrap**`bwrap`を使えます。詳しい例pip/pipx、UV、USB シリアルの注意)は次を参照:
- [`docs/meshchatx_linux_sandbox.md`](../docs/meshchatx_linux_sandbox.md)
- [`docs/en/platform-guides/linux-sandbox.md`](../docs/en/platform-guides/linux-sandbox.md)
同梱または同期された `meshchatx-docs` から配信する場合、同じページがアプリ内 **ドキュメント** 一覧MeshChatX ドキュメント)にも表示されます。
@ -308,7 +308,7 @@ cd android
追加ドキュメント:
- [`docs/meshchatx_on_android_with_termux.md`](../docs/meshchatx_on_android_with_termux.md)
- [`docs/en/platform-guides/android-termux.md`](../docs/en/platform-guides/android-termux.md)
- [`android/README.md`](../android/README.md)
## 設定
@ -361,7 +361,7 @@ task build
このリポジトリの現在のバージョンは `4.8.2` です。
- リリースのバージョン上げは **`package.json``version` のみ**編集します。
- **`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`** の補助フィールドに反映します。
- **`pnpm run version:sync`****`pnpm run build`** 開始時にも実行)で、**`pyproject.toml`**、**`meshchatx/src/version.py`**、**`THIRD_PARTY_NOTICES.txt`**(製品行)、**README** / **lang/README.\***(現在のバージョン行)、**`docs/en/platform-guides/raspberry-pi.md`** の pipx 例、**`packaging/arch/PKGBUILD`** の補助フィールドに反映します。
- **`meshchatx.__version__`** は **`meshchatx/src/version.py`** から読み、**`meshchatx.src`** をインポートしないため、単なる `import meshchatx` は軽量のままです。
- **Changelog** のエントリはリリース時に手作業のままです。

View file

@ -199,7 +199,7 @@ uv run python -m meshchatx.meshchat --headless --host 127.0.0.1
Чтобы запускать нативный `meshchatx` (псевдоним: `meshchat`) с дополнительной изоляцией файловой системы, можно использовать **Firejail** или **Bubblewrap** (`bwrap`), сохраняя обычный сетевой доступ для Reticulum и веб-интерфейса. Полные примеры (pip/pipx, UV, USB-serial) в:
- [`docs/meshchatx_linux_sandbox.md`](../docs/meshchatx_linux_sandbox.md)
- [`docs/en/platform-guides/linux-sandbox.md`](../docs/en/platform-guides/linux-sandbox.md)
Та же страница отображается в списке **Документация** (документация MeshChatX) в приложении, если файлы отдаются из встроенных или синхронизированных `meshchatx-docs`.
@ -308,7 +308,7 @@ cd android
Дополнительная документация:
- [`docs/meshchatx_on_android_with_termux.md`](../docs/meshchatx_on_android_with_termux.md)
- [`docs/en/platform-guides/android-termux.md`](../docs/en/platform-guides/android-termux.md)
- [`android/README.md`](../android/README.md)
## Конфигурация
@ -361,7 +361,7 @@ task build
Текущая версия в репозитории: `4.8.2`.
- Редактируйте для релизного бампа **только** поле `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`**.
- Команда **`pnpm run version:sync`** (также в начале **`pnpm run build`**) распространяет эту версию в **`pyproject.toml`**, **`meshchatx/src/version.py`**, **`THIRD_PARTY_NOTICES.txt`** (строка продукта), **README** / **lang/README.\*** (строки «текущая версия»), **`docs/en/platform-guides/raspberry-pi.md`** (пример pipx) и вспомогательные поля **`packaging/arch/PKGBUILD`**.
- **`meshchatx.__version__`** читается из **`meshchatx/src/version.py`** без импорта **`meshchatx.src`**, поэтому обычный `import meshchatx` остаётся лёгким.
- Записи **changelog** по-прежнему вносятся вручную при релизе.

View file

@ -199,7 +199,7 @@ uv run python -m meshchatx.meshchat --headless --host 127.0.0.1
若要在额外隔离文件系统的情况下运行原生 `meshchatx`(别名:`meshchat`),可使用 **Firejail****Bubblewrap**`bwrap`),同时保留 Reticulum 与 Web 界面所需的网络访问。完整示例pip/pipx、UV、USB 串口说明)见:
- [`docs/meshchatx_linux_sandbox.md`](../docs/meshchatx_linux_sandbox.md)
- [`docs/en/platform-guides/linux-sandbox.md`](../docs/en/platform-guides/linux-sandbox.md)
从已捆绑或已同步的 `meshchatx-docs` 文件提供服务时,应用内 **文档** 列表MeshChatX 文档)亦会显示同一页面。
@ -308,7 +308,7 @@ cd android
更多文档:
- [`docs/meshchatx_on_android_with_termux.md`](../docs/meshchatx_on_android_with_termux.md)
- [`docs/en/platform-guides/android-termux.md`](../docs/en/platform-guides/android-termux.md)
- [`android/README.md`](../android/README.md)
## 配置
@ -361,7 +361,7 @@ task build
本仓库当前版本: `4.8.2`
- 发布版本号**只**改 **`package.json``version`**。
- 运行 **`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`** 的辅助字段。
- 运行 **`pnpm run version:sync`**(在 **`pnpm run build`** 开头也会执行)可将该版本同步到 **`pyproject.toml`**、**`meshchatx/src/version.py`**、**`THIRD_PARTY_NOTICES.txt`**(产品行)、**README** / **lang/README.\*** 中的“当前版本”行、**`docs/en/platform-guides/raspberry-pi.md`** 的 pipx 示例,以及 **`packaging/arch/PKGBUILD`** 的辅助字段。
- **`meshchatx.__version__`** 从 **`meshchatx/src/version.py`** 读取且不导入 **`meshchatx.src`**,因此普通 `import meshchatx` 仍很轻量。
- **变更日志**在发版时仍由人工维护。

Binary file not shown.

View file

@ -1,6 +1,6 @@
# Architecture and design
MeshChatX is a heavily extended fork of Reticulum MeshChat. The goals below shaped how the codebase is organized.
MeshChatX is a fork of Reticulum MeshChat with LXST telephony, RRC relay chat, Nomad tooling, plugins, and a SQL backend without Peewee. The goals below shaped how the codebase is organized.
## Design goals

View file

@ -96,6 +96,6 @@ Legacy upstream data may still exist under `~/.reticulum-meshchat/`. Migration t
- **Architecture and design** explains backend managers, identity scoping, and the API model.
- **LXMF messaging** and **Audio calls** describe day-to-day communication features.
- **Reticulum interfaces** explains how your node joins the mesh.
- Platform guides under **Platform guides** cover Raspberry Pi, Android Termux, Meta Quest, Linux sandboxing, and Windows AppContainer sandboxing.
- Platform guides under **Platform guides** cover Raspberry Pi, Android Termux, Meta Quest, and Linux sandboxing (Firejail and Bubblewrap).
For protocol-level detail, open the **Reticulum** tab in Documentation or visit the [Reticulum manual](https://reticulum.network/manual/) online.

View file

@ -70,7 +70,7 @@ Privacy mode does not disable Reticulum mesh traffic. It limits clearnet fetches
On Linux, MeshChatX can enable two complementary in-process sandboxes when supported:
- **Landlock** restricts filesystem paths the backend may use. User-local pipx tools (for example Argos Translate under `~/.local`) need explicit read and sometimes write roots. See **Linux sandboxing** in Platform guides.
- **Seccomp-BPF** installs a syscall denylist (via libseccomp) that blocks kernel-admin and related calls a mesh client does not need
- **Seccomp-BPF** installs a syscall denylist (via libseccomp) that blocks kernel-admin and related calls a mesh client does not need.
Both auto-enable when available and fall back to a no-op when the platform, kernel, or libraries cannot support them. Override with:
@ -81,6 +81,10 @@ Android never enables these in-process sandboxes (the Android app seccomp policy
See **Linux sandboxing** in Platform guides for optional Firejail and Bubblewrap wrappers around the host install.
## Windows Electron AppContainer
Windows desktop builds can spawn the Python backend inside an LPAC AppContainer when `MESHCHAT_APPCONTAINER=1`. Default installs start the backend directly without that wrapper. Check `/api/v1/server/security` for `appcontainer_active` when debugging sandbox-related SQLite or filesystem errors on Windows.
## Blocking and filtering
Use **Blocked** for specific destination hashes. Combine with sieve filters, message blocklists, and LXMF stamp policies described in **LXMF messaging**.

View file

@ -200,7 +200,7 @@ CI release builds use the clearnet path. Without a bundled copy the Reticulum ta
MeshChatX includes optional tooling to pull `rns`, `lxmf`, `lxst`, and the Reticulum manual from markqvist's rngit remotes over the mesh instead of clearnet.
**Note:** Installing Python packages over RNS is significantly slower than PyPI and is intended for use in environments with mesh access but restricted clearnet. PyPI remains the default and recommended path for CI and standard development.
**Note:** Installing Python packages over RNS is slower than PyPI and fits mesh-only hosts with restricted clearnet. PyPI remains the default path for CI and standard development.
| Remote | Purpose |
| ------------------------------------------------------------ | --------------------- |

View file

@ -1,12 +1,12 @@
# Android with Termux
It's possible to run MeshChatX on Android using [Termux](https://termux.dev/). Installation is now much simpler since the wheel package includes both the server and pre-built web assets.
MeshChatX runs on Android through [Termux](https://termux.dev/). Release wheels ship the Python backend and built web UI, so you do not need Node on the phone for a normal install.
## Method 1: Install from Wheel (Recommended)
## Install from wheel
This is the easiest method - the wheel includes everything you need.
The wheel bundles server code and frontend assets.
### Install System Dependencies
### System packages
```
pkg upgrade
@ -18,7 +18,7 @@ pkg install build-essential
> Note: Python 3.11 or higher is required. Check with `python --version`.
### Download and Install Wheel
### Wheel install
Download the latest wheel from the [releases page](https://github.com/Quad4-Software/MeshChatX/releases), then:
@ -26,9 +26,9 @@ Download the latest wheel from the [releases page](https://github.com/Quad4-Soft
pip install reticulum_meshchatx-*-py3-none-any.whl
```
The wheel will automatically install all Python dependencies. Building `cryptography` may take a while on Android.
The wheel pulls Python dependencies automatically. Building `cryptography` can take several minutes on Android.
### Run MeshChatX
### Run
```
meshchatx
@ -36,13 +36,13 @@ meshchatx
(`meshchat` is a compatibility alias for the same entry point.)
Then open your Android web browser and navigate to `http://localhost:8000`
Open `http://localhost:8000` in the Android browser.
## Method 2: Install from Source
## Install from source
If you need to build from source (for development or if no wheel is available for your architecture):
Use this path for development or when no wheel fits your setup.
### Install System Dependencies
### System packages
```
pkg upgrade
@ -54,14 +54,14 @@ pkg install binutils
pkg install build-essential
```
### Install pnpm
### pnpm
```
corepack enable
corepack prepare pnpm@latest --activate
```
### Clone and Build
### Clone and build
```
git clone https://github.com/Quad4-Software/MeshChatX.git
@ -74,7 +74,7 @@ uv build --wheel
pip install dist/*.whl
```
### Run MeshChatX
### Run
```
meshchatx
@ -82,6 +82,6 @@ meshchatx
(`meshchat` is a compatibility alias for the same entry point.)
## Configuration Notes
## Configuration notes
> Note: The default `AutoInterface` may not work on your Android device. You will need to configure another interface such as `TCPClientInterface` in the settings.
> Note: The default `AutoInterface` may not work on your Android device. Configure another interface such as `TCPClientInterface` in the settings.

View file

@ -38,7 +38,7 @@ Adjust paths if you prefer another location.
Firejail applies a profile (or defaults) on top of your command. For MeshChatX you typically want:
- **Network** left available so Reticulum and the web UI can work (do not use `--net=none` unless you know you need it).
- **Writable** only your chosen data directory (and anything else the app truly needs).
- **Writable** only your chosen data directory (and any other paths the app needs).
### Installed `meshchatx` (pip, pipx, or system package)

View file

@ -4,6 +4,8 @@ The MeshChatX Android APK runs on Meta Quest 2, Quest 3, Quest 3S, and Quest Pro
MeshChatX opens as a **2D panel** inside your VR environment. It is not a native VR application. You get the full MeshChatX web UI in a floating window while you remain in your Quest home space.
![MeshChatX running on Meta Quest 2](../../../screenshots/vr/meshchatx-quest2.jpeg)
## What you need
- A Meta Quest 2 or newer headset
@ -15,7 +17,7 @@ MeshChatX opens as a **2D panel** inside your VR environment. It is not a native
Download the latest signed Android APK from the [MeshChatX releases page](https://github.com/Quad4-Software/MeshChatX/releases). Release assets are named like `meshchatx-*-release-signed.apk`.
You can also build the APK yourself, see [`android/README.md`](../android/README.md).
You can also build the APK yourself. See [`android/README.md`](../../../android/README.md).
## Enable Developer Mode
@ -24,3 +26,29 @@ You can also build the APK yourself, see [`android/README.md`](../android/README
3. Turn Developer Mode on and accept the prompt on the headset if asked.
Developer Mode is required for sideloading and for SideQuest to see the device.
## Install with SideQuest
Wired install (typical path):
1. Connect the Quest to your PC with USB-C.
2. Put on the headset. Accept **Allow USB debugging** when Meta prompts you.
3. Open the SideQuest desktop app. Confirm the headset shows as connected (green dot).
4. Click **Install APK file from folder on computer** (or drag the APK onto SideQuest).
5. Select the `meshchatx-*-release-signed.apk` file you downloaded.
Wireless ADB works when your PC and headset share a network and SideQuest can pair over Wi-Fi. Follow SideQuest's wireless pairing steps if you prefer that over USB.
## Launch on the headset
1. Open the **Apps** library on the Quest.
2. Filter to **Unknown Sources** (or **Unknown** on newer Horizon builds).
3. Select **MeshChatX**.
The app opens as a 2D panel. Grant microphone permission if you plan to use LXST calls.
## First run
MeshChatX stores data under the Android app sandbox like any other APK build. Add a Reticulum interface from **Interfaces** before you expect mesh traffic. Quest Wi-Fi only reaches your LAN and the internet. It does not replace a mesh uplink unless you configure one (for example a TCP client to a known peer).
For native Android builds (not Termux), see [`android/README.md`](../../../android/README.md).

View file

@ -21,7 +21,7 @@ Plugins cannot rewrite core MeshChatX. They do not get open-ended filesystem or
| --------------- | ------------------------- | ----------------------------------------------- |
| Frontend JS | Browser Web Worker | Medium. Sandboxed worker, capability grants |
| Backend WASM | `wasmtime` on the server | Medium. Fuel-metered, capability-gated host |
| Backend Python | In-process with MeshChatX | High. Permission-checked host, still powerful |
| Backend Python | In-process with MeshChatX | High. Permission-checked in-process host |
| Sideband `*.py` | In-process, flat files | Highest. Opt-in danger switch, full host access |
A packaged plugin can ship frontend only, backend only, or both.
@ -269,7 +269,7 @@ These run in-process with full host access. They are not ZIP-permission gated. K
## Operator tips
- Prefer signed packages from publishers you added yourself
- Deny `network: fetch` unless the plugin truly needs clearnet
- Deny `network: fetch` unless the plugin needs clearnet HTTP
- Prefer WASM backends over Python when you can
- Use `--disable-plugins` when diagnosing weird UI or backend behaviour
- Treat Sideband plugins like running arbitrary local scripts

View file

@ -4,8 +4,8 @@
*
* Writes: meshchatx/__init__.py (__version__), meshchatx/src/version.py, pyproject.toml [project].version,
* meshchatx/src/backend/data/THIRD_PARTY_NOTICES.txt (reticulum-meshchatx line only),
* README + lang README "current version" lines, docs/meshchatx_on_raspberry_pi.md,
* meshchatx/src/frontend/public/meshchatx-docs/meshchatx_on_raspberry_pi.md,
* README + lang README "current version" lines, docs/en/platform-guides/raspberry-pi.md,
* meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/raspberry-pi.md,
* meshchatx/src/backend/data/licenses_backend.json (reticulum-meshchatx entry),
* android/app/build.gradle,
* pipx example, packaging/arch/PKGBUILD pkgver / printf fallback,
@ -101,8 +101,11 @@ function patchRaspberryPiDoc(c) {
return x;
}
patchFile("docs/meshchatx_on_raspberry_pi.md", patchRaspberryPiDoc);
patchFile("meshchatx/src/frontend/public/meshchatx-docs/meshchatx_on_raspberry_pi.md", patchRaspberryPiDoc);
patchFile("docs/en/platform-guides/raspberry-pi.md", patchRaspberryPiDoc);
patchFile(
"meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/raspberry-pi.md",
patchRaspberryPiDoc
);
const licensesBackendPath = path.join(root, "meshchatx", "src", "backend", "data", "licenses_backend.json");
if (fs.existsSync(licensesBackendPath)) {