Thanks for your interest in improving Arbiter! Bug reports, feature ideas, docs, and code contributions are all welcome.
License note: This project is licensed under the Apache License 2.0. By contributing, you agree that your contributions are provided under the same license (Apache-2.0), per its Section 5. See LICENSE.
See the README for full setup. In short:
npm install
docker compose up -d # local Postgres
cp .env.example .env # fill in DISCORD_TOKEN, DISCORD_CLIENT_ID, DATABASE_URL
npm run db:generate
npm run db:migrate
npm run deploy:commands # register slash commands (set DISCORD_DEV_GUILD_ID for fast dev)
npm run dev- Run the checks and make sure they pass (CI runs the same on every PR):
npm run check
- If you change the database schema (
prisma/schema.prisma), include a migration:npm run db:migrate -- --name your_change
- Update the README/docs if you add or change commands or behavior.
- Add or update tests under
test/where it makes sense. - Keep PRs small and focused, with a clear description.
- Node.js ESM (
"type": "module"), Node 22+. src/commands/— slash commands and install-context policysrc/services/— business logic (org, match, referee, presets, profiles, standalone logs)src/ui/— Components V2 panels and modalssrc/interactions/router.js— button, select, modal, and autocomplete routingsrc/utils/— custom IDs and view mapping- Keep secrets out of code — everything sensitive comes from
.env.
Use the issue templates (Bug report / Feature request). For security issues, do not open a public issue — follow SECURITY.md.
Reach the maintainer Abdullah — Discord @monster20 or GitHub @devabdullahs.