Automatic scheduling
Generating fixtures decides who plays whom. Scheduling decides when and where. FairGame does the second part with a constraint solver: you describe the tournament, it places every match.
If you add a team to a round-robin group after fixtures exist, the next Auto-schedule run for that group’s day creates its missing matches before placing them. That fill-in run keeps existing scheduled and played matches in their slots and places the new matches around them, including in a category or a day that is already full of matches. The result reports how many fixtures it created and how many existing matches were kept where they were; its placed count covers only the new matches. Generate fixtures only adds missing pairs; it never changes existing matches. From the Matches dialog, choose Fill in missing fixtures when the category already has fixtures. Swiss pools and knockout-only runs do not generate round-robin matches.
The information button beside Auto-scheduler explains the selected engine and its rules. Minimum rest and any save error remain visible in the confirmation.
What it guarantees
Whatever else it does, a produced schedule never contains:
- two matches on the same pitch at the same time;
- a team playing two matches at once;
- a match outside its pitch's availability;
- a violation of a scheduling rule you marked as required.
These are hard constraints. If they cannot all be satisfied, the solver tells you so instead of shipping a schedule that quietly breaks one. The standard scheduler skips rules marked Requires the advanced scheduler — see the two engines below.
What it optimises for
Within the schedules that are valid, it prefers ones that are better to play and better to run:
- Even rest. Teams get comparable gaps between their matches, rather than one team playing three in a row while another waits four hours. With a minimum rest set, the standard scheduler also avoids needless waiting: when there are more groups than the pitches can keep in play at once, it plays a few groups through at a time — so each team waits about one match between its games — as long as that fits in the same day. With Compact pitch use it does so even when the day then ends later.
- Short days. Pitches stay busy and, with Spread pitch use (the default), the day finishes as early as the constraints allow. Idle pitch time is what turns a seven-hour tournament into a ten-hour one.
- Rounds in order. The standard scheduler lays each group down round by round. A round is a set of the group's matches in which every team plays at most once, and round 2 is placed only after round 1, so a team's matches are always separated by a full round. A group where everyone plays everyone takes one round fewer than it has teams when the count is even (three rounds for four teams), and as many rounds as teams when it is odd — one team rests each round. A Swiss pool keeps the rounds it was drawn in with either engine, and none of its rounds kicks off before the previous round's last kick-off. The round a match was placed in shows on the Matches list and in the Schedule board's Unscheduled panel as Group A · Round 3, and unscheduled fixtures there are listed by date, then round.
- Predictable shape. Where a rule asks for it, a group's final round kicks off simultaneously so nothing is decided by knowing the other result.
Running it
Auto-schedule on the Schedule board schedules the day you are looking at. Its confirmation shows what the run will do before anything moves:
- Auto-scheduler — the engine. The Standard scheduler is fast and fills open slots one match at a time; it keeps the minimum rest from Settings → Schedule & format, counted in rounds for a Swiss pool, and skips any rule marked Requires the advanced scheduler. The Advanced scheduler (beta) solves the whole day at once, honours every rule you have switched on, and tells you why when no valid schedule exists. Switching here changes the engine for every run in the tournament, the same as in Settings.
- Schedule the whole tournament — on a tournament with several match days, solves every day in one run, the knockout stage included. When the group matches span several days, this avoids a single day that cannot be solved on its own.
- Schedule selected categories only — on a tournament with more than one category, schedules just the categories you tick under Categories to schedule. Every other category is left as it is: its placed matches keep their pitch and time, nothing is placed on top of them, and its unplaced matches stay in the Unscheduled panel. Switching it on ticks the categories that still have matches to place, and each category in the list shows how many of its matches are scheduled and how many are still to place — or Already scheduled when nothing is left. Use it to build the schedule one category at a time, or to redo one category without touching the rest.
- Pitch use — with the Standard scheduler, what the run puts first. Spread, the default, uses as many pitches as it takes to finish as early as possible, and teams may wait longer than the minimum rest between matches. Compact gives every team the minimum rest and no longer, wherever possible, and the day can run longer: Swiss pools play their categories through one at a time, each round side by side, and round-robin groups play a few at a time. A Swiss pool that would get only part of the pitches a round needs starts later rather than split the round over two kickoffs. It also fits the pools around each other so pitches play back to back, leaving any idle pitch at the start or end of the day rather than between its matches, without ending the day later. A team with a bye in a Swiss pool still sits that round out. In a Swiss pool the rest is counted in rounds with either choice: a team's matches are at least the set number of its pool's rounds apart (see scheduling rules). The confirmation keeps your last choice while you stay on the board. The advanced scheduler places matches its own way and has no such choice.
- Keep published matches where they are — once the schedule is published; see re-solving during the tournament.
On a groups + knockout tournament whose brackets are not drawn yet, the run for a group day also draws them and lays their placeholder fixtures out on the knockout day (or the last match day, when none is set). The confirmation says so and names that day — on the phone board too — and the result reports where the placeholders went. Once the brackets exist, a run touches only the day it was started for. A run for selected categories draws and lays out only their brackets.
Run auto-schedule starts it. Large tournaments take seconds to a couple of minutes; the run reports progress and can be cancelled. When it finishes, the matches are on the board — in your draft. Nothing reaches the public site until you publish. If some matches could not be placed, they stay in the Unscheduled panel and Auto-schedule results says why and what you can try. It compares the pitch-minutes your matches need with what your availability windows provide only when the run actually fell short.
Running it again on the same day re-optimises every placed match you have not locked; locked and played matches stay where they are. With Schedule selected categories only switched on, that applies to the categories you ticked: the others are held as if every match in them were locked, for that run only, and the run still keeps each team's rest against them. Every run that places matches is saved in History, so the arrangement you had before is one restore away. Clearing a day's schedule to start again is a single action, and locked matches survive it — see editing the schedule by hand.
A tournament that draws its groups afresh each day — a ladder where day two's groups are formed from day one's tables — is solved one day at a time even when you select every day at once: each day's groups are placed around what the earlier days already fixed.
An adaptive Swiss pool is the exception. Its kickoffs are laid out when you apply the format, not by auto-schedule: each round goes down whole and in order, in waves sized to cover your pitches, and those kickoffs never move afterwards. Auto-schedule treats them as taken and places the other matches around them. A run that finds nothing it may move reports Nothing to reschedule; on a day with adaptive kickoffs it adds that they are held until their teams are drawn. If the pitch time runs out before every round has a kickoff, the category is named with how many of its rounds fit — see adaptive rounds for what to change.
Once an Advanced scheduler (beta) run has started, leaving the board, changing day, refreshing or pressing Back does not cancel it. Return in the same browser within 30 minutes of starting to recover progress, including in another tab. Only Cancel requests cancellation; progress stays visible until cancellation is confirmed. If cancellation fails, the run stays visible and you can try Cancel again. Standard runs still stop when you change day.
When it cannot find a schedule
An unsolvable day is nearly always over-constrained rather than broken. In order of likelihood:
There are not enough pitch hours. Pitches × available hours ÷ (playing time + break between matches) is your ceiling. If the matches do not fit, no arrangement of them will — Auto-schedule results compares the pitch-minutes your matches need with what your availability windows provide whenever some matches could not be placed. Add a pitch, extend the day, shorten matches, or reduce the field. When one day is already full while the others have room, it names that day, because a stage can overflow its day even though the total looks fine. Extend that day's hours, add a day for the stage, or shorten matches.
A rest requirement is too generous. A 120-minute rest for teams playing four matches needs a long day. Rest is the most common cause of an impossible schedule; lower it and see whether the day solves.
Availability is narrower than you meant. Check each pitch's windows — an availability set for Saturday and never adjusted for Sunday is easy to miss.
Rules conflict with each other. Two teams that must both finish by 14:00 and must both play four matches with 90 minutes rest may be jointly impossible. FairGame reports which constraints it could not satisfy together.
Partial and pinned schedules
You do not have to hand the whole day to the solver. Lock the matches you have already placed by hand and the rest are solved around them — useful for a final with a fixed kick-off, an opening ceremony slot, or a fixture a club has already travelled for. Lock match on a card locks one; Lock all matches on this day freezes the day as it stands. See editing the schedule by hand.
Re-solving during the tournament
A pitch closing at midday is a normal event. Shorten its availability for the day and run auto-schedule again: played and live matches stay where they are, nothing new is placed earlier than the latest match already played, and the rest are re-placed around what has already happened.
Once the schedule is published, the confirmation's Keep published matches where they are is on by default: every match still at its published pitch and time stays there, and the run only places what is not yet placed. That is what you want when slotting in a late fixture. When published matches have to move — off the pitch you just lost, say — turn it off, and lock the ones that must stay.
Review the result, then publish the change and announce it — the schedule people are looking at is on their phones, and it does not refresh itself in their heads.