Build the schedule from fixed teams
Every team needs a distinct label. Enter two to sixty-four teams, one per line. Blank lines are ignored and surrounding spaces trimmed. If two teams share a name, add a code before generating; identical labels would make the fixtures ambiguous.
Keep input order for a reproducible schedule, or shuffle the starting order before generating. The circle method fixes one slot and rotates the others between rounds. Shuffling changes the arrangement, not the requirement that every pair meets once. Generating again with input order gives the same schedule.
A five-team rehearsal
This page's invented event uses Amber / R01, Birch / R02, Cove / R03, Dune / R04 and Elm / R05. Choose Try five teams, keep input order and generate. No real teams or match results are represented.
The first round has Birch against Elm and Cove against Dune; Amber has the bye. Round two has Amber against Elm and Birch against Cove; Dune rests. The five-round schedule contains ten matches. Each team plays four times and rests once.
Follow Cove through all five rounds: Dune, Birch, Elm, Amber and a bye. Those are four different opponents. Its round-five bye occupies no match slot. Check this sequence in the cards and again in the exported file; a ten-match total alone cannot prove that Cove met everyone.
A six-team cross-check
Add Fern / R06 to that same invented roster and keep input order. The first round becomes Amber against Fern, Birch against Elm and Cove against Dune. There are five rounds, three matches in each and fifteen matches altogether. Nobody has a bye.
Amber's opponents are Fern, Elm, Dune, Cove and Birch, in that order. Compare that list with the other five roster labels: every one appears once. Adding Fern changes Amber's resting round into a match and removes every bye, rather than creating a sixth round.
For a deliberately damaged copy of the six-team fixture, replace the second-round Amber versus Elm match with another Amber versus Fern match. The total stays fifteen, but Amber and Fern now meet twice and Amber never meets Elm. This is an audit exercise, not an output produced by the generator. Compare unordered opponent pairs, not just row counts.
Does every team appear only once per round?
For n teams, a single round robin has n × (n − 1) ÷ 2 matches. Even counts need n − 1 rounds; odd counts need n rounds, with one bye in each. A bye means that team has no opponent in that round. It is not a win, a third team in another match or a placeholder competitor.
Each team appears at most once per round. A round groups independent fixtures; it does not assign start times or promise simultaneous play. Arrange courts, rest periods and dates separately. The left and right labels are display positions, not home and away assignments.
Which schedule did you save?
Check print preview. Print opens your browser's dialog with the current fixtures and byes, with the input form and instructions hidden. Check paper settings. CSV has Round, Match, Team A and Team B columns. A bye row uses BYE in Match, puts the resting team in Team A and leaves Team B empty. TXT keeps each round's matches and bye together.
In the five-team rehearsal, CSV contains ten match rows plus five bye rows. In the six-team version, it contains fifteen match rows and no bye rows. Exclude the header and distinguish BYE rows before counting matches. Read Amber's rows back against the visible cards; this catches a file from the wrong version of the fixture.
Changing the roster or starting-order setting clears the current schedule and download links. Files already saved remain unchanged. CSV quotes commas and double quotes and adds an apostrophe before labels starting with =, +, @ or - for spreadsheet formula protection. TXT and the screen retain the labels.
Where does the schedule stay?
Teams and fixtures stay in this browser tab. Reloading clears them. They are not sent to analytics or placed in sharing URLs. The tool creates opponents for fixed teams; it does not assign people to teams, rotate doubles partners, record scores or produce standings. Use the separate group generator to choose team members first.