Chess Tournament
Run a Swiss-system chess tournament from this page. Paste or import the players, start a section, and the page pairs each round, takes the results, and keeps standings, tiebreaks, and a rating for every player. A player who starts from a company rating such as A ends with an offset from it (A+37); a player with a known FIDE rating ends with a number. Several sections can run side by side in one tournament.
Limits: up to 2,000 players and 20 sections per tournament, 30 rounds per section. Names up to 40 characters. Roster files up to 2 MB. A signed-in reader can keep ten tournaments in their account.
Where your data goes. Everything runs in your browser and is kept in this browser as you work. Signing in with GitHub or Google lets you save a tournament to your account so it follows you to another device; only you can read it. Nothing is shared with the players, and no email address or real name from the sign-in is stored.
Your tournaments
Checking your sign-in.
Tournament
Bye a player asks for, by round
A player who cannot make a round asks for a bye and scores what that round allows. By default the first half of the event allows a half-point bye and the rest allow none (rounds 1 to 4 of 9, 1 to 5 of 11); change any round above. Players can name their bye rounds in advance (a Byes column such as 3, 7, or the players list), and you can tick anyone else off before pairing a round. When the number of players left is odd, one more sits out with the bye chosen above; the page picks the lowest-placed player who has not had one unless you choose someone.
Settings apply to every section and can change until a section starts. The number of rounds and the requested-bye points can change at any time.
Add players
One player per line. Columns in this order, separated by commas or tabs: Name, Company rating, FIDE rating, Tag, Section, Byes. Only the name is required. A first line that names the columns is understood, so a spreadsheet with its own column order works too. A company rating is a number or a short label such as A; a FIDE rating is a number or empty; byes are the rounds the player will miss, such as 3 7.
Company ratings in this section
A label stands for an unknown rating. Leave its value empty and every player with that label starts level; the tournament then measures each one as an offset from the label. Give it a number only if you know roughly what the label means on the FIDE scale.
Players in this section
No players yet.
Byes for the next round
Players who asked for a bye in this round are already ticked. Tick anyone else who will miss it. Players who have left for good are withdrawn from the Players view.
Pairings
Standings
Ties break on Buchholz cut 1, Buchholz, Sonneborn-Berger, then the direct game. The rating column is the running Elo-style change; a finished section also shows the fitted rating, which uses every game at once and is the better number.
Ratings
Add a late player
A late player joins from the next round with no points for the rounds already played.
Players
Crosstable
Rows and columns follow the standings. A cell shows what the row player scored against the column player.
Summary
How the scores spread out
Each column is the number of players who finished on that score. The curve is the spread pure chance would give, centered on the same mean. Read it as the shape of the standings, not as a measure of strength: a Swiss pairs players who are scoring alike, which pulls the scores together, so even a field of very unequal players finishes close to this curve.
Rating estimates and how firm they are
The dot is the rating fitted from every game at once. The line through it is the replay range: play the same event again from these ratings and the rating lands inside that line 95 times in 100. A few rounds cannot narrow it very far, which is why two players whose lines overlap heavily have not been told apart by this event.
Does White do better?
Every rated game, split by how it finished. The test asks how likely a gap this large would be if the color made no difference at all.
Do the ratings predict the results?
Games are grouped by the rating gap between the two players. The line is what the gap predicted the stronger player would score; the dots are what they actually scored. The ratings are fitted from these same games, so this checks whether the rating curve has the right shape for this group, not whether it predicts games it has never seen.
Ratings round by round
Every player's running rating after each round. Choose a name to follow one line while the rest recede.
Reading these numbers
- A rating from one short event is an estimate, not a measurement. The replay range on each one is measured by replaying the whole event a few hundred times from the fitted ratings and refitting each time, which is the resampling idea from the statistics notes rather than a formula.
- The replay range is not the whole of the uncertainty. Fitting one rating per player from only a handful of games each spreads the ratings wider than the players truly differ. Simulating events where every player was in fact equally strong produced fitted ratings around 200 points apart, so read a gap between two players as an upper bound on the real difference, and treat the order of players close together as unsettled.
- The colour test is the one figure here that is a clean hypothesis test. It compares the points White actually scored against the half it would score if colour did not matter, using the spread that the event's own draw rate implies.
- The tests here use the normal approximation, which is sound for the number of games a tournament produces and is the same approximation the confidence interval uses.
- These pages follow the same ideas as the statistics notes: a point estimate, an interval around it, and a test of whether an observed gap is more than chance.
How it works
- Pairing is a Swiss system: players meet others on the same score, top half against bottom half, never the same opponent twice, with colors balanced and nobody getting the same color three times in a row. The odd player of a score group plays someone from the group below. The bye goes to the lowest-placed player who has not had one. In the last rounds of a very small field a repeat can become unavoidable; the page then says so above the pairings.
- The first round is drawn at random among players with equal ratings. Known ratings, whether FIDE or a numeric company rating, seed the field in rating order.
- Two kinds of bye. A player can ask for one in any round, in advance or on the day, and scores what the settings allow for that round: by default half a point through the first half of the event and nothing after (rounds 1 to 4 of 9), adjustable per round. When the players left over are an odd number, one more sits out with the bye set for that case (a full point by default, the FIDE rule), going to the lowest-placed player who has not had one unless the organizer picks someone. Byes count as a game against a virtual opponent for tiebreaks, which is also the FIDE rule. Forfeits count for standings but are never rated.
- The running rating changes after every round like a normal Elo list. When a section is finished, the page also fits every rating at once from the full crosstable, which is more accurate for a single event. Both are shown with the label the player started from, so
A+37means 37 points above the average of everyone who started asA. A label gets a number on the FIDE scale once the section holds players with known FIDE ratings, or when you pin it from one player you know. - The Analysis view fits every rating from the whole crosstable, puts a confidence interval around each one, splits the spread of the scores into the part skill explains and the part chance explains, and tests whether White really does better. Every figure has the same numbers in a table underneath it.
- A tournament is kept in this browser while you work. Saving to your account stores the same data under your sign-in, readable only by you, up to ten tournaments; you can delete any of them here. Saving as a file gives you a copy that can be opened on any device with this page. Nothing is sent anywhere else.