{"id":13821824,"url":"https://github.com/evroon/bracket","last_synced_at":"2025-12-29T22:05:04.322Z","repository":{"id":65401551,"uuid":"576223889","full_name":"evroon/bracket","owner":"evroon","description":"Selfhosted tournament system","archived":false,"fork":false,"pushed_at":"2025-05-13T04:12:35.000Z","size":16764,"stargazers_count":1100,"open_issues_count":27,"forks_count":89,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-05-13T05:21:11.329Z","etag":null,"topics":["api","bracket","brackets","docker","docusaurus","fastapi","json","mantine","nextjs","postgresql","python","react","reactjs","selfhosted","sports","tournament-bracket","tournament-manager","tournaments","web","yarn"],"latest_commit_sha":null,"homepage":"https://docs.bracketapp.nl","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/evroon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-12-09T09:56:31.000Z","updated_at":"2025-05-13T04:16:02.000Z","dependencies_parsed_at":"2024-01-21T14:29:37.010Z","dependency_job_id":"4065464e-19a3-4e77-886f-7bc72e1a15c1","html_url":"https://github.com/evroon/bracket","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evroon%2Fbracket","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evroon%2Fbracket/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evroon%2Fbracket/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evroon%2Fbracket/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/evroon","download_url":"https://codeload.github.com/evroon/bracket/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254471061,"owners_count":22076585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","bracket","brackets","docker","docusaurus","fastapi","json","mantine","nextjs","postgresql","python","react","reactjs","selfhosted","sports","tournament-bracket","tournament-manager","tournaments","web","yarn"],"created_at":"2024-08-04T08:01:29.716Z","updated_at":"2025-12-29T22:05:04.317Z","avatar_url":"https://github.com/evroon.png","language":"Python","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg\n    width=\"500\"\n    src=\"frontend/public/favicon-wide.svg\"\n    alt=\"Bracket - Tournament System\"\n  /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/evroon/bracket/actions\"\n    \u003e\u003cimg\n      src=\"https://img.shields.io/github/actions/workflow/status/evroon/bracket/backend.yml\"\n      alt=\"build status\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://crowdin.com/project/bracket\"\n    \u003e\u003cimg\n      src=\"https://badges.crowdin.net/bracket/localized.svg\"\n      alt=\"translations\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/evroon/bracket/commits/\"\n    \u003e\u003cimg\n      src=\"https://img.shields.io/github/last-commit/evroon/bracket\"\n      alt=\"last commit\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/evroon/bracket/releases\"\n    \u003e\u003cimg\n      src=\"https://img.shields.io/github/v/release/evroon/bracket\"\n      alt=\"release\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/evroon/bracket\"\n    \u003e\u003cimg\n      src=\"https://codecov.io/gh/evroon/bracket/branch/master/graph/badge.svg?token=YJL0DVPFFG\"\n      alt=\"codecov\"\n  /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.bracketapp.nl/demo\"\u003eDemo\u003c/a\u003e\n  ·\n  \u003ca href=\"https://docs.bracketapp.nl\"\u003eDocumentation\u003c/a\u003e\n  ·\n  \u003ca href=\"https://docs.bracketapp.nl/docs/running-bracket/quickstart\"\u003eQuickstart\u003c/a\u003e\n  ·\n  \u003ca href=\"https://github.com/evroon/bracket\"\u003eGitHub\u003c/a\u003e\n  ·\n  \u003ca href=\"https://github.com/evroon/bracket/releases\"\u003eReleases\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://trendshift.io/repositories/13714\" target=\"_blank\"\u003e\u003cimg src=\"https://trendshift.io/api/badge/repositories/13714\" alt=\"evroon/bracket | Trendshift\" width=\"250\" height=\"55\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003ch1\u003e\u003c/h1\u003e\n\nTournament system meant to be easy to use. Bracket is written in async Python (with\n[FastAPI](https://fastapi.tiangolo.com)) and [Vite](https://vite.dev/) as frontend using the\n[Mantine](https://mantine.dev/) library.\n\nIt has the following features:\n- Supports **single elimination, round-robin and swiss** formats.\n- **Build your tournament structure** with multiple stages that can have multiple groups/brackets in\n  them.\n- **Drag-and-drop matches** to different courts or reschedule them to another start time.\n- Various **dashboard pages** are available that can be presented to the public, customized with a\n  logo.\n- Create/update **teams**, and add players to **teams**.\n- Create **multiple clubs**, with **multiple tournaments** per club.\n- **Swiss tournaments** can be handled dynamically, with automatic scheduling of matches.\n\n\u003cimg alt=\"\" src=\"docs/content/img/bracket-screenshot-design.png\" width=\"100%\" /\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://docs.bracketapp.nl\"\u003e\u003cstrong\u003eExplore the Bracket docs\u0026nbsp;\u0026nbsp;▶\u003c/strong\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# Live Demo\nA demo is available for free at \u003chttps://www.bracketapp.nl/demo\u003e. The demo lasts for 30 minutes, after which\nyour data will de deleted. \n\n# Quickstart\nTo quickly run bracket to see how it works, clone it and run `docker compose up`:\n```bash\ngit clone git@github.com:evroon/bracket.git\ncd bracket\nsudo docker compose up -d\n```\n\nThis will start the backend and frontend of Bracket, as well as a postgres instance. You should now\nbe able to view bracket at http://localhost:3000. You can log in with the following credentials:\n\n- Username: `test@example.org`\n- Password: `aeGhoe1ahng2Aezai0Dei6Aih6dieHoo`.\n\nTo insert dummy rows into the database, run:\n```bash\ndocker exec bracket-backend uv run --no-dev ./cli.py create-dev-db\n```\n\nSee also the [quickstart docs](https://docs.bracketapp.nl/docs/running-bracket/quickstart).\n\n# Usage\nRead the [usage guide](https://docs.bracketapp.nl/docs/usage/guide) for how to organize a tournament in Bracket from start to finish.\n\n# Configuration\nRead the [configuration docs](https://docs.bracketapp.nl/docs/running-bracket/configuration) for how to configure Bracket.\n\nBracket's backend is configured using `.env` files (`prod.env` for production, `dev.env` for development etc.).\nBut you can also configure Bracket using environment variables directly, for example by specifying them in the `docker-compose.yml`.\n\nThe frontend doesn't can be configured by environment variables as well, as well as `.env` files using Vite's way of loading environment variables.\n\n# Running Bracket in production\nRead the [deployment docs](https://docs.bracketapp.nl/docs/deployment) for how to deploy Bracket and run it in production.\n\nBracket can be run in Docker or by itself (using `uv` and `pnpm`).\n\n# Development setup\nRead the [development docs](https://docs.bracketapp.nl/docs/community/development) for how to run Bracket for development.\n\nPrerequisites are `pnpm`, `postgresql` and `uv` to run the frontend, database and backend.\n\n# Translations\nBased on your browser settings, your language should be automatically detected and loaded. For now,\nthere's no manual way of choosing a different language.\n\n## Supported Languages\nTo add/refine translations, [Crowdin](https://crowdin.com/project/bracket) is used.\nSee the [docs](https://docs.bracketapp.nl/docs/community/contributing/#translating) for more information.\n\n# More screenshots\n\u003cimg alt=\"\" src=\"docs/content/img/schedule_preview.png\" width=\"50%\" /\u003e\u003cimg alt=\"\"\nsrc=\"docs/content/img/planning_preview.png\" width=\"50%\" /\u003e \u003cimg alt=\"\"\nsrc=\"docs/content/img/builder_preview.png\" width=\"50%\" /\u003e\u003cimg alt=\"\"\nsrc=\"docs/content/img/standings_preview.png\" width=\"50%\" /\u003e\n\n# Help\nIf you're having trouble getting Bracket up and running, or have a question about usage or configuration, feel free to ask.\nThe best place to do this is by creating a [Discussion](https://github.com/evroon/bracket/discussions).\n\n# Supporting Bracket\nIf you're using Bracket and would like to help support its development, that would be greatly appreciated!\n\nSeveral areas that we need a bit of help with at the moment are:\n- ⭐ **Star Bracket** on GitHub\n- 🌐 **Translating**: Help make Bracket available to non-native English speakers by adding your language (via [crowdin](https://crowdin.com/project/bracket))\n- 📣 **Spread the word** by sharing Bracket to help new users discover it\n- 🖥️ **Submit a PR** to add a new feature, fix a bug, extend/update the docs or something else\n\nSee the [contribution docs](https://docs.bracketapp.nl/docs/community/contributing) for more information on how to contribute\n\n# Contributors\n\u003c!-- readme: collaborators,contributors,dependabot/- -start --\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/evroon\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/11857441?v=4\" width=\"100;\" alt=\"evroon\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eErik Vroon\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/robigan\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/35210888?v=4\" width=\"100;\" alt=\"robigan\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eNull\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/BachErik\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/75324423?v=4\" width=\"100;\" alt=\"BachErik\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eBachErik\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/djpiper28\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/13609136?v=4\" width=\"100;\" alt=\"djpiper28\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eDanny Piper\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/MaxRickettsUy\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/22103252?v=4\" width=\"100;\" alt=\"MaxRickettsUy\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eMax Ricketts-Uy\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/sevi418\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/91365763?v=4\" width=\"100;\" alt=\"sevi418\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eSevi C\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/nvanheuverzwijn\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/943226?v=4\" width=\"100;\" alt=\"nvanheuverzwijn\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eNicolas Vanheuverzwijn\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/FelipeGdM\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/1054087?v=4\" width=\"100;\" alt=\"FelipeGdM\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eFelipe Gomes De Melo\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/IzStriker\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/44909896?v=4\" width=\"100;\" alt=\"IzStriker\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eIzStriker\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/jmillxyz\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/531476?v=4\" width=\"100;\" alt=\"jmillxyz\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eJon Miller\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/oscartobar\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/10423124?v=4\" width=\"100;\" alt=\"oscartobar\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eOscar Tobar Rios\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/babeuh\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/60193302?v=4\" width=\"100;\" alt=\"babeuh\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eRaphael Le Goaller\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\u003c!-- readme: collaborators,contributors,dependabot/- -end --\u003e\n\n# License\nBracket is licensed under [AGPL-v3.0](https://choosealicense.com/licenses/agpl-3.0/).\n\nPlease note that any contributions also fall under this license.\n\nSee [LICENSE](LICENSE)\n","funding_links":[],"categories":["Python","api"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevroon%2Fbracket","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevroon%2Fbracket","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevroon%2Fbracket/lists"}