Thanks for your interest in contributing. Here's everything you need to get started.
Note for coding agents:
AGENTS.mdis the canonical instruction set, with domain-specific detail in.agents/skills/. This guide is the human-facing summary and defers to those for conventions.
- Node.js 20+
- npm 10+
- Chrome or Edge — required for Web Serial (USB) and Web Bluetooth (BLE). The WiFi WebSocket transport works in any modern browser.
- A MeshCore companion radio (optional but helpful for end-to-end testing)
git clone https://github.com/kNoAPP/MeshCore-WebAgent.git
cd MeshCore-WebAgent
npm install
npm run devRun all checks before pushing — CI enforces every one of them:
npm run spell-check # cspell
npm run format:check # Prettier (run `npm run format` to auto-fix)
npm run lint # ESLint
npm run type-check # TypeScript
npm run build # static export → out/Branches should follow this pattern:
<handle>/<issue#>-<type>-<short-description>
Examples: kNoAPP/41-feat-wifi-reconnect, mario/none-chore-modify-eslint,
docs/readme-update
If there's no linked issue, specify none. Types: feat, fix, docs,
refactor, test, ci, chore
This project uses Conventional Commits:
<type>(<scope>): <short description>
[optional body]
[optional footer]
Examples:
feat(transport): add WiFi auto-reconnect on disconnectfix(parser): handle malformed BLE frames gracefullydocs: update browser requirements in README
PR titles must also follow this format — CI will reject non-conforming titles.
- Fork the repo and create your branch from
develop(the default branch) - Make your changes with all five checks passing (spell-check, format check, lint, type-check, build)
- Fill out the PR template completely — replace each
Noneplaceholder if applicable and leave the guidance comments in place - Open the PR against
develop;@kNoAPPis requested automatically via CODEOWNERS
First-time contributors are welcome to add themselves to the
AUTHORS file in the same PR — anyone who has contributed to the
project (not just via code) is encouraged to do so.
PRs that change the binary protocol layer (lib/meshcore/) should include a
description of which Companion Protocol commands are affected and reference the
relevant protocol docs.
The full policy lives in the code-style skill (.agents/skills/code-style/).
The essentials:
- TypeScript strict mode — no
any, no// @ts-ignorewithout a comment explaining why - All user-facing text is localized with
react-i18next— add strings tolocales/en.jsonand render witht('...'); never hardcode display text - TSDoc on the public API surface; inline
//comments only when the why is non-obvious - No new abstractions beyond what the immediate task requires
- Tailwind classes for layout/spacing; CSS variables (
app/globals.css) for theming - State changes go through Zustand actions in
store/meshStore.ts, not local component state
If you introduce a legitimate technical term that cspell flags, add it to the
words array in cspell.json.
- Bugs — use the bug report template
- Feature requests — use the feature request template
- Security vulnerabilities — see SECURITY.md; do not open public issues