No description
Find a file
2026-04-12 19:12:43 -05:00
.gitea/workflows feat(workflows): add Gitea workflow to sync GitHub release assets for Windows/macOS 2026-04-08 03:28:08 -05:00
.github feat(workflows): add Gitea workflow to sync GitHub release assets for Windows/macOS 2026-04-08 03:28:08 -05:00
android chore(dependencies): remove requests package from pyproject.toml, requirements.txt, and build.gradle 2026-04-08 16:09:04 -05:00
docs fix: update command to run MeshChatX using the correct module path and add RNS log level configuration to documentation 2026-04-08 16:31:29 -05:00
electron Remove status indication 2026-03-06 15:58:22 -06:00
lang chore(codebase): formatting with ruff and eslint/prettier 2026-04-09 14:31:58 -05:00
logo 1.0.0 2026-01-01 15:25:23 -06:00
meshchatx refactor(components): format 2026-04-12 19:12:35 -05:00
misc feat(readme): add external dependencies section listing LXMF, LXST, and RNS 2026-01-01 22:46:15 -06:00
packaging/arch chore: update version to 4.4.0 in PKGBUILD and adjust pkgver function accordingly 2026-03-24 00:41:24 +03:00
screenshots docs(README): remove overview section and associated screenshot 2026-01-02 01:30:05 -06:00
scripts feat(workflows): add Gitea workflow to sync GitHub release assets for Windows/macOS 2026-04-08 03:28:08 -05:00
tests refactor(tests): update test selectors 2026-04-12 19:12:24 -05:00
.dockerignore chore: update .dockerignore and .gitignore to include test result directories 2026-03-31 03:00:11 +03:00
.gitignore chore: update .dockerignore and .gitignore to include test result directories 2026-03-31 03:00:11 +03:00
.npmrc chore(npm): update .npmrc to set node-linker to hoisted and remove fetch configuration 2026-01-03 17:20:09 -06:00
.prettierignore Add .pnpm-store/ to .dockerignore, .gitignore, and .prettierignore 2026-03-22 14:11:18 +03:00
.prettierrc 1.0.0 2026-01-01 15:25:23 -06:00
CHANGELOG.md chore(changelog): update CHANGELOG.md 2026-04-12 19:12:43 -05:00
CONTRIBUTING fix(CONTRIBUTING): correct typo in attachment support description and add a note for patience 2026-04-08 15:21:37 -05:00
CONTRIBUTORS Add CONTRIBUTING and CONTRIBUTORS 2026-03-09 12:17:11 -05:00
cosign.pub feat(ci): add scripts for cosign setup, release asset attestation, and verification 2026-03-31 00:32:22 +03:00
cx_setup.py Add CHANGELOG.md to include files in build process if it exists 2026-01-10 18:56:14 -06:00
docker-compose.dev.yml Cleanup docker files 2026-03-09 13:42:00 -05:00
docker-compose.yml Cleanup docker files 2026-03-09 13:42:00 -05:00
docker-entrypoint.sh Add docker-entrypoint.sh and update Dockerfile for entrypoint configuration 2026-03-22 15:04:07 +03:00
Dockerfile fix(Dockerfile): update CMD to use meshchatx instead of meshchat 2026-04-08 15:31:12 -05:00
eslint.config.mjs Disable specific security rules in ESLint configuration for improved flexibility 2026-02-23 19:52:46 -06:00
forge.config.js feat(build): improve macOS build process with universal support and architecture-specific configurations 2026-04-03 13:12:31 -05:00
LICENSE Update copyright holder in LICENSE file from Sudo-Ivan to Quad4 2026-02-28 00:48:14 -06:00
Makefile fix: update application run command in Makefile and Taskfile to use the correct module path for meshchat 2026-04-08 16:31:17 -05:00
MANIFEST.in chore(manifest): update MANIFEST.in to include backend files and exclude frontend and cache directories 2026-01-04 23:19:59 -06:00
package-legacy.json feat(package): add toolsets configuration for appimage version 1.0.2 in package.json and package-legacy.json 2026-04-01 11:49:39 +03:00
package.json chore(dependencies): update package versions in package.json, pnpm-lock.yaml, and poetry.lock for improved stability and performance 2026-04-12 18:24:11 -05:00
playwright.config.js fix(e2e): update default backend port to avoid conflicts and ensure consistent configuration across files 2026-03-31 17:42:12 +03:00
pnpm-lock.yaml chore(dependencies): update package versions in package.json, pnpm-lock.yaml, and poetry.lock for improved stability and performance 2026-04-12 18:24:11 -05:00
poetry.lock chore(dependencies): update package versions in package.json, pnpm-lock.yaml, and poetry.lock for improved stability and performance 2026-04-12 18:24:11 -05:00
postcss.config.js 0.1.0 2026-01-01 15:05:29 -06:00
pyproject.toml chore(dependencies): remove requests package from pyproject.toml, requirements.txt, and build.gradle 2026-04-08 16:09:04 -05:00
pytest.ini feat(tests): add integration marker for optional tests in pytest configuration 2026-03-31 00:32:53 +03:00
README.md chore(codebase): formatting with ruff and eslint/prettier 2026-04-09 14:31:58 -05:00
requirements.txt chore(requirements): update cryptography package version from 46.0.6 to 46.0.7 2026-04-09 14:29:30 -05:00
SECURITY.md docs(SECURITY.md): update security recommendations to include serving /robots.txt with Disallow directive for crawlers 2026-04-08 16:31:23 -05:00
tailwind.config.js feat(tailwind): add markdown renderer to content paths for Tailwind CSS configuration to support backend styling 2026-01-03 19:22:21 -06:00
Taskfile.yml fix: update application run command in Makefile and Taskfile to use the correct module path for meshchat 2026-04-08 16:31:17 -05:00
TODO.md Update TODO link 2026-03-09 13:42:20 -05:00
vite.config.js feat(vite.config): improve chunk grouping with priority settings and add shared-async group for better optimization 2026-04-01 12:11:23 +03:00
vitest.config.js feat(tests): add console patching to suppress specific error messages and update Vitest configuration 2026-04-12 17:41:09 -05:00

Reticulum MeshChatX

Русский | Deutsch | Italiano | 中文 | 日本語

A extensively modified and feature-rich fork of Reticulum MeshChat by Liam Cottle.

This project is independent from the original Reticulum MeshChat project and is not affiliated with it.

Important Changes from Reticulum MeshChat

  • Uses LXST
  • Replaced Peewee ORM with raw SQL.
  • Replaced Axios with native fetch.
  • Uses latest Electron.
  • .whls ships with webserver and built-in frontend assets for more deployment options.
  • i18n
  • PNPM and Poetry for dependency management.

Warning

MeshChatX is not guaranteed to be wire/data compatible with older Reticulum MeshChat releases. Back up data before migration/testing.

Warning

Legacy systems are not fully supported yet. Current baseline is Python >=3.11 and Node >=24.

Requirements

  • Python >=3.11 (from pyproject.toml)
  • Node.js >=24 (from package.json)
  • pnpm 10.32.1 (from package.json)
  • Poetry (used by Taskfile.yml and CI workflows)
task install
task lint:all
task test:all
task build:all

Install Methods

Use the method that matches your environment and packaging preference.

Method Includes frontend assets Architectures Best for
Docker image Yes linux/amd64, linux/arm64 Fastest setup on Linux servers/hosts
Python wheel (.whl) Yes Any Python-supported architecture Headless/web-server install without Node build
Linux AppImage Yes x64, arm64 Portable desktop use
Debian package (.deb) Yes x64, arm64 Debian/Ubuntu installs
RPM package (.rpm) Yes CI-runner dependent for published artifact Fedora/RHEL/openSUSE style systems
From source Built locally Host architecture Development and custom builds

Notes:

  • The release workflow explicitly builds Linux x64 and arm64 AppImage + DEB.
  • RPM is also attempted by release workflow and uploaded when produced.

Quick Start: Docker

docker compose up -d

Default compose file maps:

  • 127.0.0.1:8000 on host -> container port 8000
  • ./meshchat-config -> /config for persistence

If your local meshchat-config permissions block writes, fix ownership:

sudo chown -R 1000:1000 ./meshchat-config

Install from Release Artifacts

1) Linux AppImage (x64/arm64)

  1. Download ReticulumMeshChatX-v<version>-linux-<arch>.AppImage from releases.
  2. Make it executable and run:
chmod +x ./ReticulumMeshChatX-v*-linux-*.AppImage
./ReticulumMeshChatX-v*-linux-*.AppImage

2) Debian/Ubuntu .deb (x64/arm64)

  1. Download ReticulumMeshChatX-v<version>-linux-<arch>.deb.
  2. Install:
sudo apt install ./ReticulumMeshChatX-v*-linux-*.deb

3) RPM-based systems

  1. Download ReticulumMeshChatX-v<version>-linux-<arch>.rpm if present in the release.
  2. Install with your distro tool:
sudo rpm -Uvh ./ReticulumMeshChatX-v*-linux-*.rpm

4) Python wheel (.whl)

Release wheels include the built web assets.

pip install ./reticulum_meshchatx-*-py3-none-any.whl
meshchatx --headless

pipx is also supported:

pipx install ./reticulum_meshchatx-*-py3-none-any.whl

Run from Source (Web Server Mode)

Use this when developing or when you need a local custom build.

git clone https://git.quad4.io/RNS-Things/MeshChatX.git
cd MeshChatX
corepack enable
pnpm install
pip install poetry
poetry install
pnpm run build-frontend
poetry run python -m meshchatx.meshchat --headless --host 127.0.0.1

Run sandboxed (Linux)

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:

The same page appears in the in-app Documentation list (MeshChatX docs) when served from the bundled or synced meshchatx-docs files.

Build Desktop Packages from Source

These scripts are defined in package.json and 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

Or through Task:

task dist:fe:rpm

Architecture Support Summary

  • Docker image: amd64, arm64
  • Linux AppImage: x64, arm64
  • Linux DEB: x64, arm64
  • Windows: x64, arm64 (build scripts available)
  • macOS: build scripts available (arm64, universal) for local build environments
  • Android: build workflow and Android project are present in this repository

Android

Use the dedicated docs:

Configuration

MeshChatX supports both CLI args and env vars.

Argument Environment Variable Default Description
--host MESHCHAT_HOST 127.0.0.1 Web server bind address
--port MESHCHAT_PORT 8000 Web server port
--no-https MESHCHAT_NO_HTTPS false Disable HTTPS
--ssl-cert / --ssl-key MESHCHAT_SSL_CERT / MESHCHAT_SSL_KEY (none) PEM certificate and private key paths; both must be set together. Overrides auto-generated certs under the identity ssl/ directory.
--rns-log-level MESHCHAT_RNS_LOG_LEVEL (none) Reticulum (RNS) stack log level: none, critical, error, warning, notice, verbose, debug, extreme, or a numeric level. CLI overrides env when both are set.
--headless MESHCHAT_HEADLESS false Do not auto-launch browser
--auth MESHCHAT_AUTH false Enable basic auth
--storage-dir MESHCHAT_STORAGE_DIR ./storage Data directory
--public-dir MESHCHAT_PUBLIC_DIR auto/bundled Frontend files directory (needed for source installs without bundled assets)

Branches

Branch Purpose
master Stable releases. Production-ready code only.
dev Active development. May contain breaking or incomplete changes.

Development

Common tasks from Taskfile.yml:

task install
task lint:all
task test:all
task build:all

Makefile shortcuts are also available:

Command Description
make install Install pnpm and poetry dependencies
make run Run MeshChatX via poetry
make build Build frontend
make lint Run eslint and ruff
make test Run frontend and backend tests
make clean Remove build artifacts and node_modules

Versioning

Current version in this repo is 4.4.0.

  • package.json is the JavaScript/Electron version source.
  • meshchatx/src/version.py is synced from package.json using:
pnpm run version:sync

For release consistency, keep version fields aligned where required (package.json, pyproject.toml, meshchatx/__init__.py).

Security

Security and integrity details:

  • SECURITY.md
  • Built-in integrity checks and HTTPS/WSS defaults in app runtime
  • CI scanning workflows in .gitea/workflows/

Adding a Language

Locale discovery is automatic. To add a new language, create a single JSON file:

  1. Generate a blank template from en.json:
python scripts/generate_locale_template.py

This writes locales.json with every key set to an empty string.

  1. Rename it to your language code and move it into the locales directory:
mv locales.json meshchatx/src/frontend/locales/xx.json
  1. Set _languageName at the top of the file to the native name of the language (e.g. "Espanol", "Francais"). This is displayed in the language selector.

  2. Translate all remaining values.

  3. Run pnpm test -- tests/frontend/i18n.test.js --run to verify key parity with en.json.

No other code changes are required. The app, language selector, and tests all discover locales from the meshchatx/src/frontend/locales/ directory at build time.

Credits