Exporter MD TXT
Sur cette page

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