bracket
Selfhosted tournament system
What is it?
What it is
A tournament management platform supporting single elimination, round-robin, and Swiss formats with drag-and-drop scheduling, team management, and customizable dashboards.
Why it exists
To provide an easy-to-use, self-hosted solution for organizing and managing sports tournaments with flexible structures and dynamic scheduling.
Who should use it
Sports organizers, clubs, schools, and developers seeking a self-hosted, extensible tournament management system with support for multiple formats and customization.
Who should avoid it
Users looking for a purely SaaS solution, those unwilling to manage Docker or self-hosted services, or projects requiring a permissive license (AGPL‑3.0 may be restrictive).
How it works
A quick walkthrough in plain English
How bracket handles a request
Step 1 of 4
Your app sends a request
A user action or another service calls the API.
Features
Advantages
- Free and open-source (AGPL-3.0)
- Easy self-hosted deployment with Docker Compose
- Intuitive drag-and-drop interface
- Supports a variety of tournament formats
- Flexible multi-stage and multi-club architecture
- Automatic Swiss pairing reduces manual work
- Customizable public dashboards for spectators
- Active community and regular releases
- Multilingual support via Crowdin
- Comprehensive documentation and live demo
Disadvantages
- AGPL-3.0 license may impose restrictions on proprietary use
- Requires Docker and PostgreSQL for easiest setup
- No manual language selection in UI (relies on browser settings)
- Demo data is temporary (deleted after 30 minutes)
- Development setup requires multiple tools (pnpm, uv, Node)
- May be overkill for very simple single-match tournaments
Installation
compose
git clone git@github.com:evroon/bracket.git cd bracket sudo docker compose up -d
FAQ
How do I quickly run Bracket locally for testing?
Clone the repository and run `sudo docker compose up -d` from the project root. This starts the backend, frontend, and PostgreSQL containers. You can then access Bracket at http://localhost:3000 and log in with the demo credentials (username: test@example.org, password: aeGhoe1ahng2Aezai0Dei6Aih6dieHoo).
What tournament formats does Bracket support?
Bracket supports single elimination, round‑robin, and Swiss formats. You can build multi‑stage tournaments with multiple groups or brackets within each stage.
How can I populate the database with dummy data for development?
After the containers are running, execute `docker exec bracket-backend uv run --no-dev ./cli.py create-dev-db`. This inserts sample teams, players, clubs, and tournaments into the PostgreSQL database.
How do I configure Bracket for development or production?
Configuration is handled via environment variables. For the backend, use `.env` files such as `dev.env` or `prod.env`, or set variables directly in `docker-compose.yml`. The frontend uses Vite’s environment loading, so you can also set variables in `.env` files or via Docker environment variables.
Where can I find more information on using and deploying Bracket?
The official documentation is available at https://docs.bracketapp.nl. Key sections include the Quickstart guide, Usage guide, Configuration docs, and Deployment instructions.
How can I contribute translations to Bracket?
Bracket uses Crowdin for translations. Visit https://crowdin.com/project/bracket to add or refine translations. The docs also explain how to set up a local translation workflow.
Featured in Videos
YouTube tutorials and walkthroughs for bracket
Alternatives
Similar projects ranked by category, topics, and text overlap.