First-time contributors are asked to sign our CLA — a bot comments on
your first pull request and signing is a single reply
(I have read the CLA Document and I hereby sign the CLA). In short: you keep
the copyright to your work and grant the maintainer the right to distribute it
under other terms too (e.g. a commercial license). The released code stays
AGPL-3.0; the CLA is what keeps dual-licensing possible without chasing every
past contributor. Unsigned PRs can't be merged.
Commits follow Conventional Commits, enforced by commitlint via a git hook:
feat: add frame snap guides
fix(server): close stale websocket rooms
chore: bump dependencies
Common types: feat, fix, chore, refactor, style, docs, test, ci, perf.
- Prettier formats everything (
npm run format); no semicolons, single quotes, 120 columns. - ESLint (
npm run lint) covers TS + React hooks. Warnings are tolerated tech debt; errors block. npm run typecheckmust pass.
A pre-commit hook (husky + lint-staged) runs ESLint and Prettier on staged files, and a commit-msg hook validates the message. Hooks install automatically via npm install (the prepare script).
CI runs typecheck, lint, format check, and build on every push and PR.