YepMatch

How Schedules Are Made and Checked

How each format builds its schedule, what the checks count afterward, what a result means when a target isn't reached, and how links and printing work.

Round robin

Every team plays every other team once, so n teams play n(n − 1)/2 matches. The schedule uses the circle method: one position stays in place and the others rotate one step each round. With an even number of teams that takes n − 1 rounds. With an odd number, a placeholder is added and whoever meets it sits out, so there are n rounds and every team has exactly one bye.

When a round has more matches than you have courts, the round is split into time slots, filling each slot with matches in the order the method lists them. Every second round, the first match of a time slot moves one court over, so the team in the fixed position doesn't play on the same court every round. Rounds aren't reordered to change back-to-back matches or how often each team plays on each court; those are shown as counts.

The seed shuffles the teams into positions before the rotation. Nothing else is random.

Sources:

Single elimination bracket

The bracket has as many slots as the smallest power of two that fits everyone. The slots left over are byes, and they go in the slot numbers given by the bye placement tables of the Badminton World Federation (BWF), so no first-round pair has two byes. In round 1, neighboring slots play each other, and after that the winners of neighboring matches meet. With n players there are n − 1 matches. Players or teams can be entered the same way.

The seed is a random number for the draw, not a seeding by rank. It shuffles players into the slots that aren't byes, so the draw, not your list order or anyone's strength, decides where each player starts and who gets a bye. The bracket doesn't keep stronger players apart.

Sources:

Double elimination bracket

Two losses knock a player out. The winners bracket is built exactly like the single elimination bracket, with the same slots, byes, and draw, so the same number of players and seed put everyone in the same starting slots. Each winners bracket loser drops into a set place in the losers bracket. Round 1 losers play each other first; after that, each losers bracket round alternates between meeting the players who just dropped from the winners bracket and playing among themselves. Where a dropped player goes follows the Little League approved brackets for 4, 8, 16, and 32 teams, used for every number of players with the same number of slots. When a bye leaves a losers bracket match with one player, that player moves on without a match.

The winners and losers bracket winners meet in the final. If the losers bracket player wins it, both have lost once, and the same two play a second game. That game is always on the bracket and is played only if needed, so n players play 2n − 2 matches, or 2n − 1 with the second game. Matches are numbered in an order that can be played: winners round 1 and 2, losers round 1 and 2, then each winners round followed by two losers rounds, and the final last. The seed works as in single elimination: a random number for the draw, not a seeding by rank.

Sources:

Rotating doubles

Each match is two pairs, so with n players and c courts a round has g = min(c, ⌊n/4⌋) matches, and the other n − 4g players sit out that round. Courts beyond g aren't used. Who sits out starts as a rotation through the players in an order set by the seed.

The pairings come from a search. It starts from that first schedule and keeps swapping players within a round, and it stops as soon as every target is reached or after a fixed number of tries that grows with the size of the schedule. The number of tries doesn't depend on how fast your device is, so the same entries and seed give the same schedule anywhere. When the search stops early, the result shows the best schedule it saw.

The targets come from a whist tournament, a known design where each two players are partners exactly once and opponents exactly twice. Such a design exists only for some numbers of players and rounds, so YepMatch doesn't build one directly. It works out a lower bound from your entries and searches toward it.

Sources:

Rotating doubles targets and lower bounds

With R rounds and C(n, 2) = n(n − 1)/2 possible pairs of players, no schedule can go below these bounds:

When not every target can be reached together, opponents are relaxed first, then byes, then partners. The search protects them in the reverse order: repeated partners first, then byes, then repeated opponents.

With Balance byes on, no player sits out more than one round more than another at any point in the search, and the difference always ends up at its lower bound, so in practice only opponents and partners are ever relaxed. With it off, byes have no target, and the checks only count them.

For partners and opponents, the result shows one of these:

What the checks count

After a schedule is made, a separate count reads the finished schedule again. It doesn't use anything from the code that made the schedule. It works only from the schedule and your entries, and it works out each expected value from your entries alone. The one exception is where the byes in a bracket go: the count compares them with the same copy of the BWF bye placement tables that the bracket is built from, so a mistake in that copy is caught by tests, not by the count. A check shows Met only when its count matches the expected value. Counts with no target are shown as numbers only.

When a schedule can't meet a target

Round robin, single elimination, and double elimination always have a schedule that meets every check for any entries in range, so nothing is relaxed.

In every format, a check that should always hold, such as no one listed twice in a round or, with Balance byes on, byes within one of each other, isn't a target that can be relaxed. If one of those checks ever shows Not met, the schedule has an error. The result shows the counts without a success message and marks the schedule as one not to use.

Rotating doubles still makes a schedule when a target can't be reached. It shows the count, the lower bound, how much a target was relaxed, and, where the bound itself rules out fewer repeats, why. It doesn't call a target impossible unless the numbers prove it.

What you can enter

Names can be up to 30 characters, and each name must be different. Entries outside these ranges aren't accepted. More courts than a round can use are accepted, and the extra courts stay empty. The ranges may change.

The link records the format's version, your entries, and the seed, so the same link opens the same schedule in major browsers. A link without a seed gets a random one, which is then written into the link. Your entries stay in the link and aren't saved on a server.

The matchups and their order depend only on the version, the seed, and the settings the format uses: the number of players or teams, the number of courts for round robin and rotating doubles, and the number of rounds and bye balancing for rotating doubles. Names, the start time, and the minutes per match change only the labels and times, not who plays whom.

Format Current version
Round robin Version 1
Rotating doubles Version 1
Single elimination bracket Version 1
Double elimination bracket Version 1

When the rules for a format change, its version number goes up, and the same seed can then give a different schedule. A link made for another version isn't opened as a schedule. The page says which version it uses and offers to open the same settings in that version. The seed isn't carried over, because the old seed wouldn't give the old schedule, so you get a new seed and can check the new schedule before you share it.

Printing

Each tool prints the full schedule (or the bracket) with its checks, and the cards for each player or team, as two separate print jobs from your browser's print. The entry form, the page text, and the list of matches aren't printed. Pages have 0.5-inch margins, and the paper size is the one you pick in the print dialog.

When you print the schedule or the bracket, the first page has the heading, the summary line, and the schedule or bracket itself. The checks start on the next page. With the default names, the schedule or bracket fits on that first page, on both Letter and A4 paper in portrait, in these cases:

We measured these cases only with the default names, such as Team 1 or Player 1. Longer names wrap onto more lines, so fewer rows fit on a page. Outside these cases the schedule may still fit on one page, or it may run onto a second. We checked these cases in Chromium on October 22, 2026, with the paper in portrait. Other browsers may break pages in different places.

The cards have no page limit. With the default names, about 2 to 8 cards fit on a page, depending on the number of rounds.

Disclaimer

We count every schedule again with a separate check, but look at the counts yourself before you hand a schedule out. YepMatch makes schedules only. It doesn't keep standings or scores, and it doesn't move winners on to the next round. We aren't affiliated with FIDE, the BWF, or any sports organization, and the schedules don't replace the rules of your event.