The format exists to carry a whole tournament in one text file: the parameters of the event, every player, and every game played. It is used in two scenarios.
Hence two flavours of the file. For pairing, a minimum will do - player numbers, scores and round history. For a report you need a completed header and full details of every player: without a FIDE ID, a sex and a date of birth the report will not be accepted.
The current version is TRF-2026, while compatibility with the older TRF(bx) is retained.
The file opens with lines describing the tournament. Each begins with a three-digit code followed by a value.
012 Vibe Chess Cup Perm — tournament name
022 Perm — city
032 RUS — federation
042 2026/03/14 — start date
052 2026/03/14 — end date
062 24 — number of players
072 18 — of whom rated
082 0 — number of teams
092 Individual: Swiss-System — type of event
102 Ivanov Petr — chief arbiter
122 10'+5" — time control
XXR 5 — number of rounds
XXC white1 — colour of board one in round one
The XXR and XXC lines are service lines for the pairing engine. Without XXC the engine does not know which colour player number one takes in round one, and refuses to pair.
The time control is written in the accepted form: 10'+5" means ten minutes per game with a five-second increment per move.
The body of the file is one 001 line per player. The important thing to grasp: fields are defined by character positions, not by spaces. One extra space shifts a column and the file parses wrongly.
| Positions | Content |
|---|---|
| 1-3 | the line code, 001 |
| 5-8 | the player's starting number |
| 10 | sex: m or w |
| 11-13 | title (GM, IM, FM and so on) |
| 15-47 | surname and first name in Latin script |
| 49-52 | rating |
| 54-56 | federation, three letters |
| 58-68 | FIDE ID |
| 70-79 | date of birth as YYYY/MM/DD |
| 81-84 | points scored |
| 86-89 | final placing |
| from 92 | round history, in blocks of ten characters |
Names go in Latin script: the format counts characters, and non-Latin alphabets in UTF-8 take two bytes per letter, which shifts the columns for anything reading the file byte by byte. A player's identity in the report is carried by the FIDE ID and the federation code rather than by the spelling of the name, so transliteration is not a problem.
After the main fields comes the game history - one block per round, holding the opponent's number, the colour and the result.
0012 w 1 — played number 12 with White and won
0007 b = — played number 7 with Black, drawn
0003 w 0 — played number 3 with White and lost
0000 - U — a bye with a full point awarded
0000 - + — a win because the opponent did not appear
0000 - - — a loss for not appearing
The result codes:
1 win, 0 loss, = draw;U a pairing-allocated bye with a full point;+ and - wins and losses by forfeit: these count in the standings but are excluded from rating calculation.An important detail: the result is recorded from the player's own point of view, not White's. If you are writing software this is the first place a bug appears - a game is reflected in two lines, and the codes on the two sides must mirror each other.
The second common mistake is a reference to a withdrawn player. If somebody has been removed from the event while the history still points at them, the engine trips. The correct treatment is to record that game as one played without an opponent: 0000 and a dash instead of a colour - withdrawals.
Some events do not score classically - three points for a win and one for a draw, for instance. The format has extensions for that: codes such as BBW, BBD and BBL set your own values for a win, a draw and a loss, with further codes for byes and forfeits - three-point scoring.
An ordinary tournament does not need them, but it is worth knowing they exist: meeting such a line in somebody else's file explains why the points do not add up the way you expect.
People assemble this file by hand only in exceptional cases: one wrong column and the report falls apart. Normally a tournament program exports it.
In the Vibe Chess app a finished tournament exports to TRF in one press: the header comes from the event parameters, the player data from their profiles, the round history from the games played. For the report to be complete, players fill in the federation-standards section of their profile: FIDE ID, national ID, title, sex, date of birth and federation.
The same format is used inside the app for pairing: before each round the state of the tournament goes to the bbpPairings engine, which returns the pairs. So the report is not «assembled at the end» - it lives alongside the tournament throughout.
XXR matches the number actually played;What else belongs in the paperwork - the playing conditions.
The FIDE tournament data exchange format, also called the Krause format. A text file whose header holds the tournament parameters and whose body has one line per player with their details and the history of every game. It is used both for rating reports and for exchange with pairing engines.
The format is strictly positional: a field's meaning is set by character position. Non-Latin alphabets in UTF-8 take two bytes per letter and shift the columns for programs that count bytes. A player's identity is carried by the FIDE ID and the federation code, so transliteration is acceptable.
As a block of 0000 with a dash instead of a colour and the code U - a pairing-allocated bye with a full point. Forfeits use + (a win because the opponent did not appear) and - (a loss for not appearing); those games are excluded from rating calculation.
For pairing the minimum suffices: player numbers, scores and round history - the engine needs nothing else. A federation report additionally requires the tournament header and full player details: sex, title, rating, federation, FIDE ID, date of birth and final placing.
Technically yes, but in practice it is a source of errors: every field is tied to a character position and one extra space breaks the parse. The file is exported by tournament software - in the Vibe Chess app that is one press once the event is finished.
TRF-2026, retaining compatibility with the earlier TRF(bx). bbpPairings 6.0.0 works with both.
Everything people usually keep in a spreadsheet is already in the app: pairings, points, tie-breaks, round order. Free, with no subscriptions and no cap on the number of players.
The bot is constantly improved based on real tournaments. If you need a feature that isn't there yet, message the developers right inside the bot with the /support command. Many features appeared exactly because organizers asked for them, and useful ideas get added quickly.
The engine that reads it - bbpPairings and JaVaFo. Software - Swiss-Manager, chess-results.com. Ratings - how the Elo rating works.