Docs Tournaments
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 walks the same five phases:
setup β registration open β
registration closed β active β
completed (or cancelled)
The dashboard shows which one you are in on every tournament tab, with the next step as a button β see below.
What each phase means
Every tournament tab in the dashboard carries a phase rail: where you are, what it means, and the button that moves you on. You never have to remember this table β it is here for planning.
| Phase | What it means | Moving on |
|---|---|---|
| Setup | Format, seeding source and rules are still editable. Nothing is public and nobody can sign up. | Open registration. Every tournament passes through this β even an admin-managed one, where it is simply the gate to starting. |
| Registration open | Players can sign up from the Discord register button or the public page. You can still add, remove and reseed by hand. | Start straight away, or close registration first to freeze the field. Back: setup. |
| Registration closed | Sign-ups are refused. Admins can still edit the roster β closing only stops players adding themselves. | Start tournament. Back: reopen registration. |
| Running | The bracket is drawn and results are being recorded. Seeds cannot change and the roster is locked, though squad line-ups and the current Swiss round can still be edited. | Report matches on the Bracket tab. Back: undo start, which discards the bracket β available only until the first result is reported. After that the only exits are finishing and cancelling. |
| Complete | The final result is in: champion crowned, placements assigned, public page switched to its podium view. | Nothing β though undoing the final match reverts it to Running. |
Starting needs at least 2 entrants, and on an ad-hoc squad event every squad must be full with nobody left unplaced. When something is missing the rail lists it instead of offering a Start button that would be refused. Cancelling is available from every phase before completion: the roster and bracket are kept as a record, and the participant role comes off everyone.
Drew the bracket too early? Press Undo start on the phase rail. It throws the bracket away and returns to Registration closed, so drag-to-reseed, Auto-seed by Elo and Regenerate squads all work again β then start it fresh. It is refused once any result exists, because a reported result has already moved ratings and only undoing that match reverses it. Anyone dropped as a no-show at start time has to be re-added by hand.
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
- β’ A player who leaves mid-event can be dropped β from the Participants tab, or by ticking them on the report dialog as you record their last match. They keep every result they earned and stay on the crosstable, but they are not paired again and cannot place. If the next round has already been drawn and nobody has played it yet, it is drawn again without them rather than handing their opponent a free win
- β’ 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.
Pod Swiss (free-for-all)
Swiss for games whose match is a free-for-all rather than a duel β a 4-player FFA, a battle-royale scrim block, a multiplayer board game. Every round seats the whole field into pods, everyone plays, and where you finish scores points toward one table.
- β’ Pick players per pod (3β10), the round count, and the
points per place. Blank points default to
Kβ1 β¦ 0, so a 4-pod scores 3 / 2 / 1 / 0 - β’ Round 1 seats by seed; every round after that seats players on similar totals together
- β’ A field that doesn't divide evenly gets a short pod, never a bye β "first in a pod of one" isn't a result. Short pods are seated from the bottom of the table, because a smaller pod has the easier floor
- β’ Ties split the points for the places they cover: two players tied for 1st in a 4-pod both score 2.5, and the next is 3rd
- β’ Repeat seating is minimised, not forbidden. In a 4-pod you meet three opponents a round, so a hard no-repeat rule would be impossible by round three β a round with repeats is labelled rather than refused
- β’ Standings rank by points β pod strength (combined points of everyone you've sat with) β average finishing place β pods won β seed
- β’ On a linked leaderboard each pod records as one N-player match, and if your leaderboard has stats with point values (kills, eliminations) the report dialog collects them for a performance bonus on top of placement
Rounds default to βlog_K(players)β + 2 rather than the Swiss
rule, because one free-for-all is a noisier signal than one duel: the placements inside a pod
are correlated outcomes of a single event, not independent comparisons.
Pods β Final Pod
Pod Swiss as the first stage of a two-stage tournament, with the top N meeting in one deciding pod. Pick Group stage β playoff and choose Pods (FFA) as the first stage.
- β’ The final pod holds 2β10 players and is seated automatically when the last pod of the last round is reported
- β’ The champion is whoever wins the final pod β not whoever topped the standings. A shared 1st breaks on pod-stage rank
- β’ The podium ranks inside the final pod; any slot left over is filled from the stage standings, so 4th of a 3-player final is the best player who missed the cut
- β’ The final pod can't be skipped β a skipped final would complete a tournament with no champion
- β’ It counts as the
finalstage for Elo weighting, so a "2Γ on the final" multiplier applies to it
No knockout playoff is offered off a pod stage, on purpose: a 1v1 top cut off a free-for-all group stage is a different game than the one everyone just qualified through.
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.
Dropping out
People leave halfway through. In a knockout that needs no special handling β report their opponent as the winner. In Swiss and pod Swiss it does, because each round is drawn from the last one's results, so there is a Drop button beside each entrant on the Participants tab while the tournament is running. A dropped player keeps their results and their place on the crosstable β erasing them would rewrite the record of everyone who played them β but is never paired again, cannot take a playoff seat, and cannot place. Their open matches settle as walkovers for their opponents, worth a full point with no Elo recorded, so the round can close and the next one can be drawn. Re-enter puts them back in from the next round drawn.
Because a round is paired the moment the previous one closes, a player who leaves at the end of a round would otherwise be drawn into the next one and hand someone a free win. Two things prevent that. The report dialog carries a "dropping out after this match" tick for either side, so the last result of a round and the drop happen together. And whenever the live round has no results at all, dropping offers to redraw it over the players who are left β the standard Swiss order of collecting drops and then pairing. Keeping the existing pairings stays one click away, because "no results reported" does not always mean "nobody has started playing".
Ending early
A Swiss's length is fixed when it starts and does not adapt, so a field thinned by drops can end up scheduled for rounds it no longer needs β and an evening ends when it ends. A running Swiss or pod event can be finished from the standings on the Bracket tab: whatever is unplayed is marked not played, the round count is trimmed to the rounds that actually ran, and the table crowns a champion exactly as the last round would have. Different from cancelling, which ends the event with no champion at all. When the leader genuinely cannot be caught, the standings say so.
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.