THE ROUND-ROBIN GUIDE
A complete pairing list.
A timetable comes later.
Roundmatch turns a short participant list into logical all-play-all rounds. Its job is pair coverage: every required opponent is present, no team appears twice in a round and an idle team is visible.
Define the format before counting
In a single round-robin, each team meets every other team once. “Team” can also mean a player or another participant label in this calculator. A double round-robin repeats that opponent set in a second leg. The return leg reverses Side A and Side B for each original fixture, while keeping the same logical round order within the leg.
The generic side names deliberately do not assign a real home ground, first move, chess colour, service order or other sport-specific role. Those choices can require rules that this tool does not implement. It also does not rank teams, enter results or choose who should progress to another stage.
The NRICH tournament scheduling article explains a rotation method and the different round counts for odd and even participant lists. It describes simultaneous play with enough playing spaces. Roundmatch uses the mathematical grouping but makes no assumption that you have those spaces. NRICH’s round-robin scheduling problem also connects opponents to the edges of a graph. This independent tool is not affiliated with NRICH or the University of Cambridge.
Why the match count divides by two
With n participants, each one has n − 1 different opponents. Multiplying gives n × (n − 1) participant-opponent relationships. That count lists the same meeting from both participants’ perspectives: A meeting B and B meeting A refer to one match in a single format. Dividing by two gives the number of distinct matches.
Single matches = n × (n − 1) ÷ 2
Double matches = n × (n − 1)
Matches per team = legs × (n − 1)
For four teams, 4 × 3 ÷ 2 = 6 matches. Each team has three matches. In a double format there are 12 matches and six matches per team. These totals count played pairings only; they exclude bye records and do not imply a duration.
The original four-team example
Harbour, Forest, Valley and Orchard
The default single format creates 3 logical rounds, each with two matches. Round 1 pairs Harbour with Orchard, and Forest with Valley. Round 2 pairs Harbour with Valley, and Orchard with Forest. Round 3 pairs Harbour with Forest, and Valley with Orchard.
List the unordered pairs to check coverage: Harbour–Forest, Harbour–Valley, Harbour–Orchard, Forest–Valley, Forest–Orchard and Valley–Orchard. There are six, each appears once and no team appears twice within a round.
This is a deterministic order from your input list, rather than a draw or random seed. The first listed team retains a fixed position while the other numbered identities rotate. Reordering the list can change the displayed fixtures and side assignments. It does not change which unordered pairs are required.
Do not read the order of match rows inside a round as court numbers or start times. Round 1’s two pairings belong to one logical group; if your event has only one available playing space, you must decide separately how and when to play them. The tool cannot assess whether that decision gives suitable rest or meets event rules.
Five teams need an idle participant
With five teams, a round can contain only two matches because each match uses two different teams. One team remains idle. The single format therefore has 10 matches over 5 logical rounds, with one bye in each round. Every team receives exactly one bye and plays four matches.
For labels A, B, C, D and E in that order, the first round shows B against E and C against D, with A on a bye. Later rounds move that idle position through all five identities. A bye is a recorded absence of a pairing in that round. It is not an opponent, a played match, a win or a guaranteed rest period measured in minutes.
Choosing double creates 20 matches over 10 logical rounds. Each team plays eight matches and has two byes, one in each leg. The second leg repeats the first leg’s bye order and reverses each match’s listed sides. It does not search for a different return-round order or optimise consecutive byes across a season break.
Even and odd round counts
With an even participant count n, each round pairs everyone, so there are n ÷ 2 matches per round. Each participant needs n − 1 opponents, giving n − 1 logical rounds in the single format. With odd n, the single format instead has n rounds and one idle team per round.
Single rounds = n − 1 when n is even; n when n is odd
Double rounds = 2 × single rounds
Matches per round = floor(n ÷ 2)
At the small boundary, two teams in a double format have two matches across two rounds: team 1 against team 2, then team 2 against team 1. There are no byes. At the supported upper boundary, 32 teams in a single format have 496 matches over 31 rounds, with 16 matches per round and 31 matches per team. A complete mathematical fixture draft at that size is still not a practical venue or staffing plan.
Labels, identities and duplicate checks
Enter between 2 and 32 labels, one per line, with no blank line inside the participant list. Empty lines before and after the list are ignored. Outer whitespace is trimmed, internal whitespace runs are reduced to one ordinary space, and Unicode text is normalised to NFC. Displayed labels retain their letter case. Duplicate detection compares those normalised labels using JavaScript’s lowercase conversion.
Under this rule, “North”, “ north ” and “NORTH” describe the same display identity and cannot be entered together. Composed and decomposed versions of the same accented label also collide after normalisation. This is a practical naming rule rather than a full linguistic identity test. If two real teams have the same name, add a visible distinguishing part such as “North 1” and “North 2” before generating fixtures.
Each accepted label is limited to 60 Unicode code points, and the whole input to 8,192 characters. Control characters and hidden bidirectional formatting controls are rejected. These are software bounds. Ordinary Unicode names, numbers and punctuation can be used. Stable integer identities, shown as small numbers beside the labels, keep the rotation separate from display text.
A real participant may be named “BYE”. That name does not become the internal idle marker: the dummy uses a separate null identity. The output will therefore say clearly which numbered participant has a bye. Labels containing angle brackets or quotation marks are displayed as text rather than executable HTML.
Keep a local report
Copy and text exports retain your normalised team labels and list every round, leg, pairing and bye. CSV uses explicit columns for format, overall round, leg, round within the leg, record type, side identities and labels, and any bye identity and label. A bye gets its own row with empty match-side columns; it is never exported as a fictitious match.
Spreadsheet programs can interpret labels beginning with an equals sign, plus sign, minus sign or at sign as formulas. In CSV label cells, Roundmatch prefixes those labels with an apostrophe and quotes every cell. That is an intentional protective text representation; the copied plain-text report keeps the original label. Check how your spreadsheet app imports text, since export formatting is separate from the fixture arithmetic.
The print button invokes your browser’s normal print dialog for the same generated schedule. Navigation, input controls and export buttons are hidden in the print layout. There is no calendar connection, email invitation, cloud save or public team directory. You choose whether to save a file, print it or share a copy yourself.
What the grouping does not decide
Logical rounds ensure that a participant is not assigned twice within that round. They do not establish real dates, simultaneous-court capacity, start times, match lengths or venue availability. Roundmatch does not optimise rest gaps, travel, home/away balance, colour balance, same-club separation or fairness under a particular sport’s rules. It does not promise the exact order of a published Berger table or compliance with FIDE or another governing body.
Withdrawals, uneven group sizes in a larger competition, seeding, rankings, tie-breaks, results, knockout stages, Swiss pairings and rescheduling are outside this one-list model. If you change the participant list, the tool builds a new deterministic draft; it does not preserve completed matches. Review event-specific requirements separately before using any draft in an actual activity.
If an input is invalid, usable fixtures, team counts and exports are cleared. Restore returns to the four-team single example. Reloading also restores defaults, because this release does not save participant lists in cookies or local storage. Return to the fixture calculator.