commit 65044a54ef0054145dfc1ee2fd557c6410e1d8ac Author: Sudo-Ivan Date: Thu Jan 1 15:00:04 2026 -0600 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..1b52b63 --- /dev/null +++ b/README.md @@ -0,0 +1,154 @@ +# Reticulum MeshChatX + +A heavily customized and updated fork of [Reticulum MeshChat](https://github.com/liamcottle/reticulum-meshchat). + +## Features of this Fork + +| Feature | Description | +|-------------------------------------------------------------------|-----------------------------------------------------------------------------| +| Custom UI/UX | Modern, improved interface | +| Inbound LXMF & local node stamps | Configure inbound messaging and node propogation addresses | +| Improved config parsing | More accurate and flexible parsing of config files | +| Automatic HTTPS | Generates self-signed certificates for secure access | +| Cancelable fetches & downloads | Cancel page fetching or downloading | +| Built-in page archiving | Archive pages; background crawler automatically archives nodes that announces| +| Translator tool | Translate messages via Argos Translate or LibreTranslate API | +| Network visualization | Faster, improved visualization page | +| User & node blocking | Block specific users or nodes | +| Database insights | Advanced settings and raw database access | +| Multi-language support | Internationalization (i18n) provided | +| Offline maps (OpenLayers + MBTiles) | Interactive map using OpenLayers with MBTiles offline support | +| Extra tools | RNCP, RNStatus, RNProbe, Translator, Message Forwarding | +| Major codebase reorganization | Cleaner, refactored architecture | +| Better Dependency management | Poetry for Python, PNPM for Node.js packages | +| Increased statistics | More network and usage stats (About page) | +| Supply Chain Protection | Actions and docker images use full SHA hashes | +| Docker optimizations | Smaller sizes, more secure | +| Electron improvements | Security, ASAR packaging | +| Updated dependencies | Latest PNPM and Python package versions | +| Linting & SAST cleanup | Improved code quality and security | +| Performance improvements | Faster and more efficient operation | +| SQLite backend | Raw SQLite database backend (replaces Peewee ORM) | +| Map | OpenLayers and MBTiles support | + +## TODO + +- [ ] Tests and proper CI/CD pipeline. +- [ ] RNS hot reload fix +- [ ] Backup/Import identities, messages and interfaces. +- [ ] Full LXST support. +- [ ] Offline Reticulum documentation tool +- [ ] Spam filter (based on keywords) +- [ ] Multi-identity support. +- [ ] TAK tool/integration +- [ ] RNS Tunnel - tunnel your regular services over RNS to another MeshchatX user. +- [ ] RNS Filesync - P2P file sync + +## Usage + +Check [releases](https://git.quad4.io/RNS-Things/reticulum-meshchatX/releases) for pre-built binaries or appimages. + +## Building + +This project uses [Task](https://taskfile.dev/) for build automation. Install Task first, then: + +```bash +task install # installs Python deps via Poetry and Node deps via pnpm +task build +``` + +You can run `task run` or `task develop` (a thin alias) to start the backend + frontend loop locally through `poetry run meshchat`. + +### Available Tasks + +| Task | Description | +|------|-------------| +| `task install` | Install all dependencies (syncs version, installs node modules and python deps) | +| `task node_modules` | Install Node.js dependencies only | +| `task python` | Install Python dependencies using Poetry only | +| `task sync-version` | Sync version numbers across project files | +| `task run` | Run the application | +| `task develop` | Run the application in development mode (alias for `run`) | +| `task build` | Build the application (frontend and backend) | +| `task build-frontend` | Build only the frontend | +| `task clean` | Clean build artifacts and dependencies | +| `task wheel` | Build Python wheel package (outputs to `python-dist/`) | +| `task build-appimage` | Build Linux AppImage | +| `task build-exe` | Build Windows portable executable | +| `task dist` | Build distribution (defaults to AppImage) | +| `task electron-legacy` | Install legacy Electron version | +| `task build-appimage-legacy` | Build Linux AppImage with legacy Electron version | +| `task build-exe-legacy` | Build Windows portable executable with legacy Electron version | +| `task build-docker` | Build Docker image using buildx | +| `task run-docker` | Run Docker container using docker-compose | + +All tasks support environment variable overrides. For example: +- `PYTHON=python3.12 task install` +- `DOCKER_PLATFORMS=linux/amd64,linux/arm64 task build-docker` + +### Python Packaging + +The backend uses Poetry with `pyproject.toml` for dependency management and packaging. Before building, run `python3 scripts/sync_version.py` (or `task sync-version`) to ensure the generated `src/version.py` reflects the version from `package.json` that the Electron artifacts use. This keeps the CLI release metadata, wheel packages, and other bundles aligned. + +#### Build Artifact Locations + +Both `poetry build` and `python -m build` generate wheels inside the default `dist/` directory. The `task wheel` shortcut wraps `poetry build -f wheel` and then runs `python scripts/move_wheels.py` to relocate the generated `.whl` files into `python-dist/` (the layout expected by `scripts/test_wheel.sh` and the release automation). Use `task wheel` if you need the artifacts in `python-dist/`; `poetry build` or `python -m build` alone will leave them in `dist/`. + +#### Building with Poetry + +```bash +# Install dependencies +poetry install + +# Build the package (wheels land in dist/) +poetry build + +# Install locally for testing (consumes dist/) +pip install dist/*.whl +``` + +#### Building with pip (alternative) + +If you prefer pip, you can build/install directly: + +```bash +# Build the wheel +pip install build +python -m build + +# Install locally +pip install . +``` + +### Building in Docker + +```bash +task build-docker +``` + +`build-docker` creates `reticulum-meshchatx:local` (or `$DOCKER_IMAGE` if you override it) via `docker buildx`. Set `DOCKER_PLATFORMS` to `linux/amd64,linux/arm64` when you need multi-arch images, and adjust `DOCKER_BUILD_FLAGS`/`DOCKER_BUILD_ARGS` to control `--load`/`--push`. + +### Running with Docker Compose + +```bash +task run-docker +``` + +`run-docker` feeds the locally-built image into `docker compose -f docker-compose.yml up --remove-orphans --pull never reticulum-meshchatx`. The compose file uses the `MESHCHAT_IMAGE` env var so you can override the target image without editing the YAML (the default still points at `ghcr.io/sudo-ivan/reticulum-meshchatx:latest`). Use `docker compose down` or `Ctrl+C` to stop the container. + +The Electron build artifacts will still live under `dist/` for releases. + +### Standalone Executables (cx_Freeze) + +The `cx_setup.py` script uses cx_Freeze for creating standalone executables (AppImage for Linux, NSIS for Windows). This is separate from the Poetry/pip packaging workflow. + +## Internationalization (i18n) + +Multi-language support is in progress. We use `vue-i18n` for the frontend. + +Translation files are located in `meshchatx/src/frontend/locales/`. + +Currently supported languages: +- English (Primary) +- Russian +- German \ No newline at end of file