diff --git a/README.md b/README.md index 6f15b874..868a24a1 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/docs/en/architecture.md b/docs/en/architecture.md index 127c3e8c..d29fd653 100644 --- a/docs/en/architecture.md +++ b/docs/en/architecture.md @@ -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 diff --git a/docs/en/getting-started.md b/docs/en/getting-started.md index e4e1ef29..61147d7a 100644 --- a/docs/en/getting-started.md +++ b/docs/en/getting-started.md @@ -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. diff --git a/docs/en/identity-and-security.md b/docs/en/identity-and-security.md index 4c6ec42d..bc5660dc 100644 --- a/docs/en/identity-and-security.md +++ b/docs/en/identity-and-security.md @@ -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**. diff --git a/docs/en/installation.md b/docs/en/installation.md index 188c2cda..402b475e 100644 --- a/docs/en/installation.md +++ b/docs/en/installation.md @@ -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 | | ------------------------------------------------------------ | --------------------- | diff --git a/docs/en/platform-guides/android-termux.md b/docs/en/platform-guides/android-termux.md index 9c8c2908..65e8ffa8 100644 --- a/docs/en/platform-guides/android-termux.md +++ b/docs/en/platform-guides/android-termux.md @@ -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. diff --git a/docs/en/platform-guides/linux-sandbox.md b/docs/en/platform-guides/linux-sandbox.md index d36dbdcb..d6313d31 100644 --- a/docs/en/platform-guides/linux-sandbox.md +++ b/docs/en/platform-guides/linux-sandbox.md @@ -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) diff --git a/docs/en/platform-guides/quest-sidequest.md b/docs/en/platform-guides/quest-sidequest.md index db7264a7..45138176 100644 --- a/docs/en/platform-guides/quest-sidequest.md +++ b/docs/en/platform-guides/quest-sidequest.md @@ -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). diff --git a/docs/en/plugins.md b/docs/en/plugins.md index e60627fd..560d9964 100644 --- a/docs/en/plugins.md +++ b/docs/en/plugins.md @@ -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 diff --git a/lang/README.de.md b/lang/README.de.md index 119ecb27..9350e3cd 100644 --- a/lang/README.de.md +++ b/lang/README.de.md @@ -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. diff --git a/lang/README.it.md b/lang/README.it.md index 22bffc6b..fe6ced95 100644 --- a/lang/README.it.md +++ b/lang/README.it.md @@ -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. diff --git a/lang/README.ja.md b/lang/README.ja.md index 55f41d57..4dfad4cc 100644 --- a/lang/README.ja.md +++ b/lang/README.ja.md @@ -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** のエントリはリリース時に手作業のままです。 diff --git a/lang/README.ru.md b/lang/README.ru.md index c1e40991..f8e291b1 100644 --- a/lang/README.ru.md +++ b/lang/README.ru.md @@ -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** по-прежнему вносятся вручную при релизе. diff --git a/lang/README.zh.md b/lang/README.zh.md index 4fa15afe..fd0c5526 100644 --- a/lang/README.zh.md +++ b/lang/README.zh.md @@ -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` 仍很轻量。 - **变更日志**在发版时仍由人工维护。 diff --git a/meshchatx.rsm b/meshchatx.rsm index 48055124..262b0049 100644 Binary files a/meshchatx.rsm and b/meshchatx.rsm differ diff --git a/meshchatx/src/frontend/public/meshchatx-docs/en/architecture.md b/meshchatx/src/frontend/public/meshchatx-docs/en/architecture.md index 127c3e8c..d29fd653 100644 --- a/meshchatx/src/frontend/public/meshchatx-docs/en/architecture.md +++ b/meshchatx/src/frontend/public/meshchatx-docs/en/architecture.md @@ -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 diff --git a/meshchatx/src/frontend/public/meshchatx-docs/en/getting-started.md b/meshchatx/src/frontend/public/meshchatx-docs/en/getting-started.md index e4e1ef29..61147d7a 100644 --- a/meshchatx/src/frontend/public/meshchatx-docs/en/getting-started.md +++ b/meshchatx/src/frontend/public/meshchatx-docs/en/getting-started.md @@ -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. diff --git a/meshchatx/src/frontend/public/meshchatx-docs/en/identity-and-security.md b/meshchatx/src/frontend/public/meshchatx-docs/en/identity-and-security.md index 4c6ec42d..bc5660dc 100644 --- a/meshchatx/src/frontend/public/meshchatx-docs/en/identity-and-security.md +++ b/meshchatx/src/frontend/public/meshchatx-docs/en/identity-and-security.md @@ -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**. diff --git a/meshchatx/src/frontend/public/meshchatx-docs/en/installation.md b/meshchatx/src/frontend/public/meshchatx-docs/en/installation.md index 188c2cda..402b475e 100644 --- a/meshchatx/src/frontend/public/meshchatx-docs/en/installation.md +++ b/meshchatx/src/frontend/public/meshchatx-docs/en/installation.md @@ -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 | | ------------------------------------------------------------ | --------------------- | diff --git a/meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/android-termux.md b/meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/android-termux.md index 9c8c2908..65e8ffa8 100644 --- a/meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/android-termux.md +++ b/meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/android-termux.md @@ -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. diff --git a/meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/linux-sandbox.md b/meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/linux-sandbox.md index d36dbdcb..d6313d31 100644 --- a/meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/linux-sandbox.md +++ b/meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/linux-sandbox.md @@ -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) diff --git a/meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/quest-sidequest.md b/meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/quest-sidequest.md index db7264a7..45138176 100644 --- a/meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/quest-sidequest.md +++ b/meshchatx/src/frontend/public/meshchatx-docs/en/platform-guides/quest-sidequest.md @@ -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). diff --git a/meshchatx/src/frontend/public/meshchatx-docs/en/plugins.md b/meshchatx/src/frontend/public/meshchatx-docs/en/plugins.md index e60627fd..560d9964 100644 --- a/meshchatx/src/frontend/public/meshchatx-docs/en/plugins.md +++ b/meshchatx/src/frontend/public/meshchatx-docs/en/plugins.md @@ -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 diff --git a/scripts/sync_version.js b/scripts/sync_version.js index 2ddef745..24acd5fb 100644 --- a/scripts/sync_version.js +++ b/scripts/sync_version.js @@ -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)) {