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.
imgr command line drives the same engine — handy for scripting; every step below shows both.venue command.)--sport tt); swap in your sport.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… | Use | Field size | Everyone keeps playing? | Feel |
|---|---|---|---|---|
| Max play, no elimination — practice, ladder night, a small social box | A · Round Robinround_robin_single |
4–12 (best ≈ 8–10) | Yes — every player plays every other | Relaxed, lots of games |
| A real podium — guaranteed group play, then a knockout to crown a champion | B · Group → Knockoutgroup_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 Drawcompass_16 |
9–16 | Yes — lose and you're routed to a consolation direction | Inclusive, 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 · Swissswiss_5_rounds |
8–64 (sweet spot 16–32) | Yes — fixed 5 rounds, no one is knocked out | Efficient, 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.
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.
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
Use this when… it's an internal practice, training box, or club ladder night and you want maximum playing time with no one eliminated.
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).
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.
Use this when… you have a real field and want guaranteed group play and a knockout to crown a champion — the standard tournament shape.
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.
group_classification_adaptive): same groups, but the second stage ranks every qualifier 1..N instead of stopping at a 3rd-place match.
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.
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.
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.
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.
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).
swiss_monrad) pairs strictly by standings rank and allows rematches — a common choice in club table tennis.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.
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.