Documentation
Tournaments & Brackets
Run single and double elimination tournaments with registration, Elo-based seeding, and live public brackets
Overview
Team Up tournaments take an event from sign-ups to a crowned champion. You create and manage the tournament from the web dashboard, players register from Discord or the web, and everyone follows the bracket on a live public page. Tournaments can link to one of your leaderboards so seeding comes from real Elo ratings and results feed back into the ladder.
The Three Surfaces
- Web dashboard β create, seed, start, record results
- Discord β
/tournamentsschedule & live messages with register buttons - Public page β live bracket at
/l/your-league/t/your-tournament
Tournament Lifecycle
Every tournament moves through these statuses:
setup β registration open β
registration closed β active β
completed (or cancelled)
Creating a Tournament
Tournaments are created from the web dashboard β open your league and head to the Tournaments section. The create form covers:
Identity & Schedule
- β’ Name & URL slug β the slug becomes the public page address
- β’ Description β shown on the public page
- β’ Start time β drives the schedule timeline (optional until you start)
- β’ Info & rules β markdown field for rules, prize pool, channel links
Competition Settings
- β’ Data source β optionally link a leaderboard + rating type for seeding and Elo
- β’ Format β single or double elimination
- β’ Registration cap β 8, 16, 32, 64, 128, or unlimited (up to 256)
- β’ Registration mode β self-serve sign-ups or admin-managed roster
Locked after setup: the data source, format, and participant cap
can only be changed while the tournament is still in setup. Once
registration opens, those settings are fixed so the bracket stays consistent with what players signed up for. Elo weighting gets a later deadline β it stays editable
through registration and locks when the tournament goes active.
Registration
Rosters can be self-serve (players sign themselves up) or admin-managed (you add every participant). Admins can always add or remove participants from the dashboard, whichever mode is active.
Self-Serve Sign-ups
- β’ From Discord β members click the Register button on the
/tournaments schedulecard or the live tournament message - β’ From the web β league members sign up on the public tournament page
- β’ Registration stays open through the
setupandregistration openstatuses, until the cap is reached - β’ Players can unregister themselves β optionally only until an unregister deadline you set, so the bracket stays stable near start time
Admin-Managed Rosters
- β’ Add participants from your league roster in the dashboard's Participants tab
- β’ Each participant's Elo is snapshotted when they join the roster
- β’ Remove or replace participants any time before the tournament starts
- β’ Ideal for invitationals, qualifier-fed brackets, and curated events
Check-in
A short confirmation window before the start, so no-shows turn up in your roster instead of in round one. Optional, off by default, and independent of registration β check-in normally happens after registration has closed.
- β’ Schedule it β pick 15 minutes, 30 minutes, 1 hour or 2 hours before the start time on the Basics tab. The window closes at the start time and follows it if you reschedule.
- β’ Or open it on the night β Open check-in now on the Participants tab runs a 15-minute window, and works even with no start time set. Extend +10 min is right there for when people are still filing in.
- β’ Players confirm from the Check in button on the Discord tournament message, or on the public tournament page. You can also check anyone in by hand from the roster β the only way for entrants with no account, and how you fix a late arrival.
- β’ The Discord button is there from the moment a window is configured. Clicking it early tells you when check-in opens; clicking it late tells you it has closed. Neither writes anything.
- β’ Announce in Discord posts "check-in is open" in the tournament's channel and pings whoever hasn't checked in β press it again later to nudge the stragglers. A scheduled window also announces itself, best-effort; the button is the reliable path.
Nothing is dropped automatically. Check-in is advisory right up until you draw the bracket: when you press Start, the Bracket tab offers Drop N and start or Start with everyone. Dropping renumbers seeds and gives the top seeds byes. If nobody checked in, dropping isn't the default β an empty check-in usually means the window was broken, not that the whole field is absent β and it is refused outright if it would leave fewer than two players.
Seeding
Seeds determine bracket placement: the #1 seed plays the lowest seed in round one, and top seeds are kept on opposite sides of the bracket so they can only meet late.
Auto-Seed by Elo
One click in the Participants tab orders the whole field by current Elo rating from the linked leaderboard β highest rating gets the #1 seed. Unrated players sort to the bottom.
Requires a linked data source. Available while the tournament is in setup or registration.
Manual Seeding
Drag and drop participants into any order. Useful for qualifier results, standalone tournaments without a leaderboard link, or when you want to hand-craft the storyline.
New sign-ups are appended with the next free seed automatically.
Bracket Formats
Single Elimination
- β’ One loss and you're out β N players, N β 1 matches
- β’ Works with any field size: the bracket pads to the next power of two and byes resolve automatically in round one
- β’ Podium: champion, runner-up, and joint-third semifinalists β or a real 3rd and 4th with a third-place match
Double Elimination
- β’ Lose once β drop to the losers bracket; lose twice β out
- β’ Winners bracket + losers bracket + a single grand final (winners-bracket champion vs losers-bracket champion)
- β’ Works with any field of 4 or more β the draw pads to the next power of two and round-one byes go to the top seeds
Group Stage β Playoff
- β’ World Cup shaped: a first stage, then a knockout bracket between the top finishers
- β’ The first stage is round-robin groups or Swiss; the playoff runs single or double elimination
- β’ With groups: choose how many groups and how many advance from each. With Swiss: choose the round count and how many advance overall
- β’ Groups are drawn by seed in snake order so they come out strength-balanced β seeds 1β8 across four groups gives A=[1,8], B=[2,7], C=[3,6], D=[4,5]
- β’ Standings break ties by wins β head-to-head β score difference β score for β seed, so a group always resolves without a manual tiebreak
- β’ The bracket is drawn automatically when the last group fixture is reported, and the draw avoids round-one rematches between group-mates
- β’ A double-elimination playoff needs at least 4 qualifiers, so
groups Γ advancingmust be 4 or more
Third-place match
An optional bronze final for single-elimination brackets β including the playoff half of a two-stage tournament. The losing semifinalists play off for third, so the podium reports a real 3rd and 4th instead of joint third. The tournament completes once both it and the final are reported, in either order. Double elimination has no third-place match: the losers final already settles third on the field.
Swiss
- β’ Nobody is eliminated β everyone plays every round, and each round pairs players on similar records
- β’ Rounds default to
βlogβ(players)ββ enough for one undefeated player (8 β 3 rounds, 16 β 4). Set it manually if you prefer - β’ Pairings are generated one round at a time, since round N depends on round Nβ1. The next round appears the moment the current one is fully reported
- β’ Rematches are avoided β the pairing engine backtracks to find a draw where nobody repeats an opponent, and labels the round if no such draw exists
- β’ An odd field gets a bye each round, to the lowest-ranked player who hasn't had one. A Swiss bye counts as a win
- β’ Matches can end in a draw (Β½ point each, Elo settles as a draw) or be skipped (not played β no points, no Elo) so a round can complete even when a pairing never happens
- β’ Standings rank by points (win 1, draw Β½) β Buchholz (combined points of everyone you've played) β head-to-head β score difference β seed
- β’ Runs standalone, where the standings leader wins, or as the first stage of a two-stage tournament feeding a playoff bracket
Buchholz is the part people miss: two players on 3-0 are not equal if one played the top of the field and the other the bottom, and it is what separates them.
Running the Tournament
Status transitions live in the dashboard: Open Registration, Close Registration, and Start Tournament. Starting requires at least 2 participants β it locks the roster, compacts the seeds, and generates the bracket.
Recording Results
Pick the winner in the Bracket tab, optionally with per-side scores (e.g. games won in a Bo3) and a match note. The winner advances instantly; in double elimination the loser drops to the losers bracket. Swiss matches can also be recorded as a draw or skipped entirely when a pairing won't be played.
Undo
Recorded the wrong winner? Undo reverses the match and pulls players back out of downstream slots. Undo works top-down β if a later match was already reported, undo that one first. Elo changes from the match are rolled back too.
Completion
Recording the final completes the tournament: the champion is crowned, placements are assigned (1st, 2nd, joint 3rd β or 1stβ4th when a third-place match was played), the public page switches to its podium view, and a champion announcement posts to Discord. With a third-place match the tournament completes only once both it and the final are in.
Elo Integration
When a tournament is linked to a leaderboard, every recorded match is also written to that leaderboard's match history and updates Elo ratings β exactly like a regular recorded match. A strong tournament run moves the ladder.
Standalone tournaments (no data source) skip Elo entirely β the bracket alone decides the outcome. Note that a locked leaderboard blocks tournament match recording until it's unlocked.
Elo Weighting
A linked tournament can make its late rounds move ratings further than its early ones β so winning the final is worth more than winning a round-one match. Set a multiplier per stage on the tournament's settings tab, or take a preset: Gentle (1.25Γ quarterfinal, 1.5Γ semifinal, 2Γ final) or Steep (1.5Γ / 2Γ / 3Γ). Every stage is 1Γ until you change it.
Stages are named by rounds remaining, so in a 4-player bracket round one really is the
semifinal. Double elimination adds its own rows for the losers bracket and the grand final.
Weighted matches show a 2Γ badge on the bracket β on your dashboard and on the public page β so players see the stakes
before they play.
You also choose who the multiplier hits. Both players (the default) scales the winner's gain and the loser's loss equally, which keeps the ladder balanced β only the stakes change. Winner only rewards deep runs without punishing a late loss, and Loser only does the reverse.
Weighting one side and not the other means the rating gained no longer equals the rating lost, so ratings drift up (winner-only) or down (loser-only) across repeated tournaments. That's a real league-design choice, just a deliberate one. Weighting locks when the tournament starts, so every match in a round settles at the same rate β and undo still reverses exactly what was applied.
Discord Commands
The /tournaments command group keeps
your server in sync with the event. It's admin-only by default β grant access to other roles via Server Settings β Integrations in Discord.
/tournaments schedule [filter] Post the tournament schedulePosts an auto-updating schedule card listing upcoming and live tournaments (or past ones with filter: Past). Members register and unregister right from its
buttons. The card refreshes whenever a tournament is created, changes status, fills up, or ends β
up to 5 tracked schedule cards per server.
/tournaments view <tournament> Privately preview a tournamentShows the tournament embed only to you β handy for checking how an event looks before posting it publicly.
/tournaments display <tournament> Post the live tournament messagePosts the public tournament message with a Register button. It auto-updates as the event progresses, and when the final is recorded a separate champion announcement is posted to the same channel β a fresh message, so the win actually notifies the server.
Public Tournament Pages
Every league gets a tournament timeline at /l/your-league/t and every tournament
gets its own page at /l/your-league/t/your-tournament.
No Discord login needed β share the link anywhere.
The Page Follows the Event
- β’ Before β schedule, rules, roster, and a register button
- β’ Live β pannable, zoomable bracket, up-next matches, and a results feed
- β’ After β champion banner, podium, match history, and final standings
Branding & Visibility
- β’ Pages inherit your league's branding, or the linked leaderboard's theme
- β’ Per-tournament theme overrides with a live preview in the dashboard
- β’ Hide any tournament from the public listing while keeping its direct link working
- β’ Players' equipped nameplates show on the bracket and champion banner
Planning Your First Event?
The guide How to Run a Discord Tournament covers formats, seeding fairness, scheduling, and prizes β everything around the bracket itself.
Or start from the feature overview on the tournament bot page. To sketch a draw before you create the real event, the free bracket generator runs the same seeding and advancement code in your browser.