Development
Contributor workflow: install, format, lint, test, and locales.
Contributor workflow: install, format, lint, test, version bumps, and adding locales. Runtime install paths are in Installation and setup. Packaging is in Building from source and packaging.
Branches#
| Branch | Purpose |
|---|---|
| master | Stable releases |
| dev | Active development. May be incomplete or breaking. |
Daily commands#
task install
task hooks:install # pre-commit format/lint + commitlint (once per clone)
task format
task lint
task test
task build
Makefile targets call the same Taskfile commands:
| Command | Delegates to | Description |
|---|---|---|
| make install | task install | Install pnpm and UV dependencies |
| make run | task run | Run MeshChatX via UV |
| make build | task build | Build frontend and backend artifacts |
| make format | task format | Format frontend and backend |
| make lint | task lint | ESLint, vue-tsc, knip, Ruff, basedpyright |
| make test | task test | Frontend and backend tests |
| make clean | task clean | Remove build artifacts and node_modules |
| make tree-rsm-verify | (shell) | Verify meshchatx.rsm signature and hashes |
| make tree-rsm-sign | (shell) | Sign tree inventory (needs RNS_ID_PATH) |
| make hooks-install | task hooks:install | Git hooks: format/lint staged files, commitlint, RSM resign |
For a Vite HMR loop, use task dev as described in Installation and setup.
Lockfiles and install scripts#
From a clean clone:
git clone https://github.com/Quad4-Software/MeshChatX.git
cd MeshChatX
corepack enable
pnpm config set verify-store-integrity true
pnpm install --frozen-lockfile
pip install "uv==0.11.15"
uv lock --check
uv sync --group dev
pnpm run build-frontend
uv run python -m meshchatx.meshchat --headless --host 127.0.0.1
pnpm install --frozen-lockfile fails if pnpm-lock.yaml does not match package.json, so an unexpected upstream version cannot land silently. Store integrity is also on in pnpm-workspace.yaml. The extra pnpm config set line hardens the user-level config too.
pnpm v11+ blocks lifecycle scripts by default. Only packages listed under allowBuilds in pnpm-workspace.yaml may run install scripts (electron, electron-winstaller, esbuild). uv lock --check fails if uv.lock is out of date with pyproject.toml. uv sync then installs from the lockfile only. Pin UV with pip install "uv==0.11.15" to match CI.
To update dependencies on purpose, run pnpm update or uv lock in its own commit and read the lockfile diff before you push.
Versioning#
Edit the version field in package.json, then run pnpm run version:sync (also the first step of pnpm run build). That copies the number into pyproject.toml, the Python version modules, Android Gradle, electron/app-version.json, the README and translated READMEs, the Raspberry Pi pipx example, Arch PKGBUILD helpers, third-party notices, and GitHub issue-template placeholders.
Changelog entries are still written by hand when you cut a release. meshchatx.version is read from meshchatx/src/version.py without importing meshchatx.src, so import meshchatx stays lightweight.
Adding a language#
Locale discovery is automatic. Add a 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 selector label. Copy en.json and translate the values. Machine-assisted generation is optional.
For a machine-generated first draft from en.json, use scripts/argos_translate.py. It keeps interpolation variables such as {count} intact.
pipx install argostranslate
python scripts/argos_translate.py --from en --to xx --input meshchatx/src/frontend/locales/en.json --output meshchatx/src/frontend/locales/xx.json --name "Your Language Name"
After a machine pass, have an LLM or a human check grammar, context, and tone.
pnpm test -- tests/frontend/i18n.test.js --run
That checks key parity with en.json. No other code changes. The app, language selector, and tests pick up locales from meshchatx/src/frontend/locales/ at build time.
Translation fixes are welcome via LXMF (f489752fbef161c64d65e385a4e9fc74) or a pull request.
In-app MeshChatX guides under docs/en/ are English today. Localized landing pages exist for the Reticulum manual tab.
See also#
- Architecture and design for process layout and managers
- Building from source and packaging for offline and APK builds