Contributing
Thanks for looking. The project is early, so the most useful contributions are careful bug reports, tests and measurements.
#Ground rules
- English everywhere: code, comments, commit messages, documentation and issues.
- Original work only: do not copy code, maps, sprites or branding from Gather or any proprietary product. Any third-party asset or dependency must have a compatible licence and be listed.
- License: contributions are accepted under AGPL-3.0, with no additional restrictions on commercial use.
- Evidence over claims: do not describe a number as "capacity" unless it was measured, with the environment recorded. Keep measured results, estimates and not-run tests clearly separated.
#Development loop
Every change runs the gauntlet loop: written acceptance criteria, a test seen red first, scripts/gauntlet.sh green, and independent critics (UX, invariants, regression) with evidence.
./scripts/dev.sh # full local stack
cd server && go vet ./... && go test -race ./... # server tests
cd web && pnpm exec tsc --noEmit # type-check the client
cd e2e && pnpm install && node run.mjs # real-browser suite: own server, fresh database, real LiveKit#Invariants worth protecting
- The server is authoritative; the client sends intent.
- Never persist movement per step; never send movement per frame.
- Media authorisation is enforced by the server/SFU. Hiding or muting a video in the UI is not isolation.
- Every user-visible string goes through the i18n dictionary.
- Do not log chat content or secrets.
- Local development and production configuration must stay clearly distinct.
#Pull requests
Keep them focused, include tests for behaviour changes, and update the docs in the same PR. Describe exactly what you ran and what you did not.