Developer Guide

Set up the LA-Mesh development environment, build the site, flash devices, and contribute.

Quick Start (Nix + direnv)

git clone https://github.com/Jesssullivan/LA-Mesh.git
cd LA-Mesh
direnv allow        # auto-enters Nix dev shell on cd
just info           # verify all tools are available

The Nix dev shell provides: meshtastic CLI, esptool.py, hackrf tools, bazelisk, just, nodejs, pnpm, git-cliff, shellcheck, ruff.

Without Nix: pip install meshtastic esptool ruff, npm install -g pnpm, cargo install just git-cliff.

Repository Structure

LA-Mesh/
├── site/              # SvelteKit documentation site
├── docs/              # Markdown documentation
├── configs/           # Device profiles and channel templates
├── bridges/           # SMS, email, MQTT bridge code
├── tools/             # Scripts: flash, test, configure, monitor
├── curriculum/        # Educational workshop modules
├── hardware/          # Inventory, BOM, deployment guides
├── firmware/          # Manifest, checksums, version pinning
└── captures/          # SDR capture storage (gitignored)

Common Just Recipes

CommandPurpose
just devStart docs site dev server (hot reload)
just buildBuild site for production
just checkRun all validations (format + type check)
just ciFull CI simulation (check + build)
just provision <device> <port>One-command device provisioning
just fetch-firmwareDownload and verify firmware
just firmware-versionsShow pinned firmware versions
just firmware-checkCheck for upstream updates
just mesh-infoShow connected device info
just mesh-nodesList visible mesh nodes
just configure-profile <profile>Apply device configuration profile
just configure-channelsApply LA-Mesh channel config

Branch Strategy

BranchPurpose
mainProduction -- deploys to GitHub Pages
feature/*Feature development
fix/*Bug fixes

PRs target main. CI must pass before merge.

CI/CD Workflows

WorkflowTriggerPurpose
ci.ymlPush/PR to mainLint, validate, build site
deploy-pages.ymlPush to mainDeploy GitHub Pages
firmware-check.ymlWeekly cronCheck for firmware updates
security-scan.ymlPush/PR to mainGitleaks, ShellCheck, YAML lint

Security: Never Commit

  • Secrets (never committed -- use encrypted storage)
  • PSK values (channel encryption keys)
  • API keys (SMS gateway, SMTP, MQTT credentials)
  • Private keys (SSH, GPG, TLS)

Enable the pre-commit hook: git config core.hooksPath .githooks

Recommended Operating Systems

OSUse Case
Linux MintDesktop OS for mesh operators -- stable, beginner-friendly, full hardware support
Rocky LinuxServer OS for gateway and bridge nodes -- enterprise-grade, long-term support

LA-Mesh - Community LoRa mesh network for Southern Maine

GitHub