Thanks for considering a contribution. Pull requests are welcome. Before opening one, please take a few minutes to read this document and the project's developer guides.
AGENTS.md— conventions, the local Docker dev stack (./sbpp.sh), the six quality gates CI runs on every PR, and the cheat-sheet for common changes.ARCHITECTURE.md— codebase tour: how the web panel boots, request lifecycle, database access patterns, and how the SourceMod plugins fit in.- Docs site (sources under
docs/) — self-hoster documentation (install, upgrade, configure, FAQ). Self-hoster-visible changes ship docs updates in the same PR.
The SourceBans++ web panel (everything under
web/) is offered under a dual-licence model: free under the
Elastic License 2.0 for hobby use, community use, and
every redistributor that isn't operating the panel as a hosted /
managed service to third parties; and under a separate commercial
licence for game-server hosting companies that bundle SourceBans++ as
a paid feature (see README.md for the
commercial-licence contact).
To make that arrangement workable, contributions to web/** from
anyone other than the project maintainer are accepted under a
Contributor Licence Agreement ("CLA") that grants the maintainer the
right to relicense the web panel under different terms in the future,
including the commercial terms above. You retain copyright in
everything you contribute — the CLA is a licence grant, not a
copyright assignment.
The full text lives in CLA.md. It's about a page long.
-
Open a pull request that touches
web/**. -
Wait ~30 seconds for the CLA bot to comment with the sign instructions. (First-time PRs occasionally take a minute — that's normal; the bot is a GitHub Action, not a hosted service.)
-
Reply on the PR with exactly:
I have read the CLA Document and I hereby sign the CLA
-
The bot updates the CLA status check to green within a few seconds. You're done.
You only need to sign once — your signature applies to every future
PR you open against this repo, and is recorded on the
cla-signatures branch of the repository.
- The maintainer (
rumblefrog) — covered by ownership. - GitHub App bots (e.g.
dependabot[bot]) — covered by ownership of the configuration that opens those PRs. The allowlist in.github/workflows/cla.ymlis the source of truth. - PRs that only touch SourceMod plugins under
game/addons/sourcemod/**— those stay under GPLv3 (strong copyleft) and aren't part of the dual-licence arrangement. If your PR mixesweb/**and plugin files, the CLA check fires because of theweb/**half; signing once unblocks both.
The web panel is offered free under the Elastic License 2.0 for hobby and community use, and under a separate commercial licence for game-server hosts offering the panel as part of a managed-service product. The CLA gives the maintainer the right to offer both — without it, every contributor would need to be contacted individually for every future relicensing decision, which doesn't scale.
If you have legal questions about the CLA, please open an issue or reach out via the Discord before signing.
CI runs six gates on every PR (PHPStan, PHPUnit, ts-check, API
contract, Playwright E2E, plugin build). Mirror them locally with
./sbpp.sh before opening — see the
Quality gates section of AGENTS.md for
the full list and which subset applies to plugin-only changes.
Please open an issue with reproduction details. If the report needs to be private, contact a maintainer on Discord first.