Tournament Organizer's Quick Start Guide

Get from an empty room to a finished, published tournament — with pictures. v1.0

This is the field guide: pick the format that fits your event, see what its draw actually looks like, and run it on the day. It's built around four real formats a club runs all the time — an internal round-robin, a group-stage → knockout, an everybody-keeps-playing compass draw, and a Swiss for a big one-day field. Each is a one-click built-in format in iMatch, so the draw, the schedule, and the standings all just work.

Two companions sit next to this guide: the one-page Operator Quickstart (the lifecycle, fast, with every imgr command) and the full Tournament Operator Manual (every format, edge case, and recovery move). For hands-on lessons, the iMatch Academy lets you press play and watch each algorithm build the result.

Before you go on-site

Step 1 — Pick your format

Start here. The right format depends on how many players you have, how competitive the day is, and whether you want everyone to keep playing after a loss.

If you want…UseField sizeEveryone keeps playing?Feel
Max play, no elimination — practice, ladder night, a small social box A · Round Robin
round_robin_single
4–12 (best ≈ 8–10)Yes — every player plays every otherRelaxed, lots of games
A real podium — guaranteed group play, then a knockout to crown a champion B · Group → Knockout
group_knockout_adaptive
8–64 (sweet spot 16–32)Group stage yes; knockout no (3rd-place playoff)Competitive, clear winner
Nobody goes home early — one loss shouldn't end your day; everyone gets a placement C · Compass Draw
compass_16
9–16Yes — lose and you're routed to a consolation directionInclusive, every entrant placed
A big field in one day — more players than a round-robin can fit, but you still don't want early eliminations D · Swiss
swiss_5_rounds
8–64 (sweet spot 16–32)Yes — fixed 5 rounds, no one is knocked outEfficient, performance-ranked

Field size is load-bearing. iMatch rejects a draw if the entry count falls outside a format's range (the group formats size their groups from the count). Stay inside the ranges above and the draw generates cleanly.

Singles, doubles, or team? Every format here works for any event type — set the event's type to singles, doubles, mixed, or team (Manager: the event's Type field; CLI: --type mixed). A team event plays a multi-rubber tie per fixture (e.g. Swaythling, Corbillon): the format above decides how the teams meet — group, knockout, Swiss — and each tie expands into its rubbers underneath.

Step 2 — The run-day loop (every format)

Whichever format you pick, the day follows the same eight stages. Each recipe below just changes Stage 2 (the format) and what the draw looks like — the rest is identical.

1CreateTournament: sport, venue, dates
2Events + formatAdd event, pin a format
3RegisterOpen entries, take a roster
4Check-inMark who's present; withdraw no-shows
5Seed + drawSeed by rating, generate, publish
6ScheduleTables + block, auto-schedule
7PlayRecord results live
8PublishStandings final, results public

The shared spine in imgr (same for every recipe)

imgr tournament create --name "Spring Open 2026" --venue "Main Hall" \
  --start-date 2026-04-15 --end-date 2026-04-17 --sport tt
# → step 2 differs per recipe (see each card's "Set it up")
imgr tournament publish $TOURNAMENT_ID                   # draft → published (required before registration)
imgr tournament start-registration $TOURNAMENT_ID
imgr entry register $EVENT_ID --player "Maria Lopez"     # one player at a time (CSV bulk-import is coming soon)
imgr tournament close-registration $TOURNAMENT_ID
imgr tournament start-checkin $TOURNAMENT_ID
imgr entry check-in $ENTRY_ID                            # withdraw no-shows: entry withdraw $ENTRY_ID --reason "no-show"
imgr seed generate $EVENT_ID --method rating             # highest rating = seed 1
imgr event generate-draw $EVENT_ID
imgr event publish-draw $TOURNAMENT_ID $EVENT_ID
imgr schedule generate --tournament $TOURNAMENT_ID --block $BLOCK_ID \
  --algorithm PRIORITY --match-duration 25 --buffer 5 --min-rest 20
imgr match result $MATCH_ID --winner entry1 --scores "11-7,11-9,11-6"
imgr bracket standings $BRACKET_ID                       # look up the bracket id via: imgr match list $EVENT_ID
imgr tournament complete $TOURNAMENT_ID
Recipe A · everyone plays everyone

10-Player Round Robin

Use this when… it's an internal practice, training box, or club ladder night and you want maximum playing time with no one eliminated.

Round robin — 10 players, 45 matches (every pair plays once) vs → P1P2P3 P4P5P6 P7P8P9 P10 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 = one match (45 total) = a player vs self (no match)
Players10 (range 4–12)
Matches45
Tables × time2–3 tables · ~half day
ResultFull ranking, 1st–10th

Set it up in iMatch

Manager: New Tournament → add one event → pick the built-in “Round Robin (Single)” → set max entries to 12.

imgr — step 2 for this recipe

imgr event create $TOURNAMENT_ID --name "Practice Box" \
  --type singles --format round_robin_single --max-entries 12

Then run the shared spine (register → check-in → seed → event generate-draw → schedule → results).

How it finishes

Standings rank by wins, and break ties with the ladder: head-to-head → games ratio → points ratio. With a small field a three-way tie is common, so expect the tiebreakers to do real work — iMatch shows which one decided each position.

On the day

Recipe B · groups, then a knockout

Two-Stage: Round Robin → Knockout

Use this when… you have a real field and want guaranteed group play and a knockout to crown a champion — the standard tournament shape.

Stage 1: round-robin groups → Stage 2: knockout (16 players shown) Group A A1 ✓A2 ✓ A3A4 top 2advance Group B B1 ✓B2 ✓ B3B4 Group C C1 ✓C2 ✓ C3C4 Group D D1 ✓D2 ✓ D3D4 cross-seeded A1 D2 C1 B2 B1 C2 D1 A2 SF1 SF2 SF3 SF4 Finalist 1 Finalist 2 CHAMPION 3rd-place playoff the two semifinal losers
Players16 shown (range 8–64)
Stage 1Groups of ~4, RR
Stage 2Top 2 → knockout + 3rd place
ResultChampion + podium

Set it up in iMatch

Manager: New Tournament → add event → pick the built-in “Group to Knockout (adaptive)”. The group count auto-sizes from your entries (≈4 per group), top 2 advance, and a third-place playoff is added automatically.

imgr — step 2 for this recipe

imgr event create $TOURNAMENT_ID --name "Men's Singles Open" \
  --type singles --format group_knockout_adaptive --max-entries 32

Run the shared spine. event generate-draw materializes the group stage first; the knockout fills in once group results decide who advances.

Want every player ranked (5th–8th, 9th–12th…), not just the podium? Swap the format to the built-in “Group to Full Classification” (group_classification_adaptive): same groups, but the second stage ranks every qualifier 1..N instead of stopping at a 3rd-place match.

On the day

Recipe C · lose and keep playing

Compass Draw

Use this when… you don't want anyone knocked out after one loss. Every entrant keeps playing and earns a placement — great for junior events, round-ups, and “everyone came to play” days.

Compass draw — main draw + 7 consolation directions (16 players) MAIN (East draw) N NE Ewin SE S SW W NW Lose → routed to a direction → keep playing. Every entrant finishes in a placement tier (~32 matches).
Players16 (range 9–16)
Matches~32
EliminationsNone — everyone plays on
ResultEvery entrant placed

Set it up in iMatch

Manager: New Tournament → add event → pick the built-in “Compass Draw (16, 8 directions)” → set max entries to 16.

imgr — step 2 for this recipe

imgr event create $TOURNAMENT_ID --name "Junior Round-Up" \
  --type singles --format compass_16 --max-entries 16

Run the shared spine. The draw routes every loser to a consolation direction, so the table count stays busy all day — schedule generously.

Heads-up on size: Compass is built for 9–16 players. For a bigger “everyone keeps playing” field, use Group to Full Classification (group_classification_adaptive, 8–64), which also ranks every entrant. For a simpler one-loss-then-second-chance shape, Double Elimination (double_elim_standard) gives a single losers/consolation bracket.

On the day

Recipe D · big field, few rounds

Swiss System

Use this when… you have more players than a round-robin can fit in a day, but you don't want to knock anyone out — everyone plays a fixed five rounds against opponents on their own record.

Swiss — 5 rounds, paired by record, nobody eliminated (16 players) Round 1after 2 roundsafter 4 roundsfinal standings 16 players seeded pairings 8 matches 2–04 players 1–18 players 0–24 players 4–0 · 3–1contenders 2–2the pack 1–3 · 0–4still playing Standings 1 – 16 ranked by wins, then the tiebreak ladder (head-to-head → ratios) every entrant placed no one eliminated Each round you're paired with someone on your own record — win and you climb, lose and you slide, but you keep playing all five rounds.
Players16 shown (range 8–64)
Rounds5 (fixed)
Matches~8 per round
ResultFull ranking, no eliminations

Set it up in iMatch

Manager: New Tournament → add event → pick the built-in “Swiss System (5 rounds)” → set max entries to your field cap.

imgr — step 2 for this recipe

imgr event create $TOURNAMENT_ID --name "Saturday Swiss" \
  --type singles --format swiss_5_rounds --max-entries 64

Run the shared spine — event generate-draw pairs Round 1. After each round's results are in, iMatch pairs the next round by current standings (same record meets same record).

Variant: “Swiss System — Monrad (5 rounds)” (swiss_monrad) pairs strictly by standings rank and allows rematches — a common choice in club table tennis.

How it finishes

No bracket — standings are the result, ranked by wins and then the ladder (head-to-head → games ratio → points ratio). Five rounds is usually enough to separate a 16–32 field without everyone having to play everyone.

On the day

If you get stuck

iMatch is built so a blank screen or a disabled control usually means “not yet, in this order” — not “broken.” Seeding comes before the draw; check-in before seeding. If you ever see a raw error code, that's a defect to report, not a gap in your knowledge. Start with the manual's Troubleshooting chapter and keep it within reach on the day.

Keep going