Version history

Versions are listed from the most recent to the oldest, one bullet per change, and every version ends with references to the pages that describe in detail what it brought. A bullet that a later version has undone carries a note naming the one that replaced it: it tells the software’s history, it does not describe the installed version.

After an update

The database schema migration is automatic on opening, and irreversible: a migrated database is no longer readable by an earlier version of blunderDB, hence the backup beforehand (Annex: Database Schema). The rest does not happen by itself, because none of this data is retroactive:

  • Re-analyze stale positions (0.38.0, 0.40.0). A gammonNet analysis written before version 0.40.0 was produced by an earlier engine (gammonNet v1.7.0 since): blunderdb analyze --stale, or the Stale gammonNet analyses row of the Maintenance tab, rewrites it. An imported analysis is never touched.

  • Re-import the source files to get luck (0.33.0). Matches imported before that carry a dash in the Luck column, and a dash is not a zero. Formats that do not carry luck (BGF, Jellyfish .mat) never will.

  • Re-import the XG files to get the flags (0.30.0). The flags placed in eXtreme Gammon join the database on re-import, without touching existing comments or analyses.

  • Run the gammonNet analysis catch-up (0.34.0), from the interface, through blunderdb analyze or in server mode: it fills in positions that have no analysis at all, never overwriting an imported analysis.

  • Rerun the gammonNet analysis catch-up (0.39.0). The migration erases the gammonNet verdicts of a take or a pass, computed as the recipient’s decision; the catch-up rewrites them as the doubler’s decision before the double.

  • Repair matches whose players were swapped (0.40.0). Before 0.40.0, swapping replaced the match’s positions with other ones, without analysis: blunderdb match repair --list finds the matches that differ from their source file, and match repair --id or the ⟲ button of the sheet rewrites them from that file.

0.44.0 (2026-10-19)

  • The Opening exercise chooses between two modes: XG categories (Money, DMP, Gammon save and Gammon go, which can be combined) or 5-point match, which draws a score at equal odds among the twenty-five scores of a 5-point match, DMP and Crawford games included, with no score to choose. The grid of 7-point match scores is gone.

  • The embedded opening book covers all twenty-five scores of a 5-point match: 2-4, 4-2, 2-5, 5-2, 3-5, 5-3 and the Crawford games 1-3, 3-1, 1-5 and 5-1 are added; blunderdb openingbook and the server’s openingbook.* routes serve them like the other scores.

  • Server side: search.find sorts by pip count and by date, analyses.queueStatus describes the analysis queue, statistics can be filtered by opponent, positions.setIndividuallyImported lifts the “brought in by hand” mark of a position, and matches.lastVisited returns the last match visited, no longer the last one imported; blunderdb stats takes --opponent.

  • See Training Panel, openingbook — Which move at this score? and API contract.

0.43.0 (2026-10-18)

  • The Opening exercise draws by category: Money, DMP, Gammon save (the opener at 1 away Crawford, the responder at 2 away) and Gammon go (the reverse), a category at equal odds with the others and then one of its scores; the prompt names the category next to the score. The grid of 7-point match scores stays an option, unchecked by default, because from 4 to 7 away the best moves barely change from one score to the next.

  • The embedded opening book covers money play and the DMP: blunderdb openingbook and the server’s openingbook.* routes serve them like the other scores.

  • See Training Panel, openingbook — Which move at this score? and Opening book: gap, 95 % CI and tie.

0.42.0 (2026-10-17)

  • Which move at this score? The Opening exercise: the Training tab sets the opening move (1st roll) or the reply (2nd roll) of a game at a score, played on the board and judged against an embedded opening book, computed by blunderDB’s own rollouts over twenty scores; every move tied with the best is right, and with 2nd roll the opening move already played is drawn from those. The verdict is a right-or-wrong mark and the book’s table of candidates. train opening, blunderdb openingbook and the server’s openingbook.* routes are its other forms.

  • ENTER chains the training questions: during a Decision or an Opening, ENTER validates the move played on the board, wherever the focus is outside a field, a button or a dialog, then moves to the next question, or ends the session, once the verdict is shown; two presses in quick succession do not score the answer twice.

  • Server side: the matches.byPosition route lists the matches in which a move was played on a position, and importing an XG file into a PostgreSQL database makes half as many queries per position and runs twice as fast.

  • Notable fixes: a match file in which a position holds sixteen checkers for one side is rejected by the server as invalid, no longer with an internal error.

  • See Training Panel, Keyboard shortcuts, openingbook — Which move at this score?, Opening book: gap, 95 % CI and tie and API contract.

0.41.0 (2026-10-16)

  • Read a position from a screenshot: pasting, dragging or opening a screenshot of the eXtreme Gammon board onto the edit board reads the checkers, the dice, the cube and the score, with no trained model; doubtful readings are circled on the board and nothing is saved before the usual gesture. blunderdb capture and the server route positions.fromImage are the other forms.

  • The main player and the Manage players window: a player’s star designates them as the main player, placed in seat 1 on import, and offers to flip in one go the matches where they play on the other side; the window lists the players with their aliases (× undoes a merge) and their match counts, which open those matches. blunderdb players main and players matches and the players.main.* routes are the other forms. In the Tournaments panel, the PR and MWC of a row are those of the main player as soon as they played in it.

  • Importing a database also brings the matches: with their games, moves, analyses and origin, the tournaments (with their Direction and their Encounter), the transcription drafts and the player aliases, without duplicates and without changing anything when the same file is imported again; a live collection or a saved filter that designates rows by their number is renumbered for the receiving database. blunderdb import --type database and the server do the same.

  • A preview before exporting: the export window counts, family by family, what the file will contain, before writing it; blunderdb export --plan and the exports.plan route give the same count. A chosen tournament always takes its matches along, and a tournament’s Direction and Encounter go with it.

  • Undo the last Anki review: the Undo button of the review, or the u key, takes back the last grade of the session and shows the card again; blunderdb anki card --action undo and the server route anki.undoReview do the same.

  • The gammonNet search spreads over free cores: gammonNet v1.8.0 splits a search at 2 plies and more over several cores, with the same figures as on a single one; all computations of a process (analysis, batch, panels, server) draw from a single core budget, and the server charges one unit for the time of each core it occupies.

  • Tick players in the legend of a match’s graphs: unticking a player hides their marks in the three graphs, and hover, click and arrows then target only the other one; the setting is remembered per match.

  • Statistics counts open their positions: the Bias, Before/after and Time panels add to each decision count a Positions column that opens the distinct positions concerned.

  • A more readable transcription: the digit key states its effect through a mode indicator (Entry or Edit) and the effect of Enter; the board arrows follow the move written in the decision under the cursor, in grey, and an illegal step is drawn in dashed red; choosing the first line of the analysis replaces the decision.

  • Video no longer freezes the application: the video pane resumes playback after a seek that does not complete, never reloads a paused video, and names the missing GStreamer plugins; a badly muxed .webm or .mkv file is reported on opening with the ffmpeg command that repairs it without re-encoding.

  • Notable fixes: a played move is matched to its candidates by the board it reaches and not by its notation, so two moves of the same shape but with different hits are no longer confused; a screenshot at a fractional scale is read correctly; a paused video is no longer reloaded.

  • See Manual, Keyboard shortcuts, Command Line Interface (CLI), Headless mode (server) and API contract.

0.40.0 (2026-10-12)

  • gammonNet 3-ply and 4-ply search runs several times faster: a single reply per interior node, and a staged root that pushes only the best candidates of a 2-ply ranking to full depth; the engine moves to gammonNet v1.7.0. Any gammonNet analysis written before is stale and is rewritten by the Stale gammonNet analyses row of the Maintenance tab; a rollout whose policy plays at 3 plies no longer gives the same figures.

  • A gammonNet analysis can be cancelled mid-search: the status bar shows its depth and progress, and its cancel button also interrupts a deep search already under way, in the interface, the command line and the server.

  • The Maintenance tab of the settings shows the health of the database, one row per operation (positions without analysis, stale gammonNet analyses, matches without statistics, reclaimable space…) with its count, its last run and its action; nothing is launched there by itself, and blunderdb maintenance and the server’s maintenance.* routes are the other forms. Opening a database no longer writes anything there: a match’s statistics are computed on first read or from this tab.

  • Only one long operation writes to the database at a time: during a maintenance operation, a gammonNet analysis or a rollout, another action is refused with the name of the one occupying the database, and an automatic analysis (after an import, a transcription or a Duel) waits its turn.

  • The Anki .apkg export: a study deck or a collection is written as an Anki .apkg package, which the Anki application imports on computer or phone (AnkiDroid, AnkiMobile); each position becomes a card, with the board, the score, the cube and the dice on the front, the best move or the right cube decision, its equity and the error of the move played on the back. The export button of the Anki panel, blunderdb anki export and the server’s anki.exportApkg route are its three forms, and a re-export updates the cards in Anki instead of duplicating them.

  • The Duel starts wherever you want: the header strip of the Duel panel sets the Start — the initial position, or the board edited as in the Eval panel, its score and the score fields being one —, plays the board’s dice or has them rerolled, and places the cube decision before or after the roll; Single game stops the Duel at the end of its first game, to practise a score. blunderdb duel create takes --away, --reroll, --after-cube and --single-game.

  • Time controls in minutes per point: Standard (2 min per point + 12 s), Speed (0.4 min per point + 10 s) or a time control saved under a name; each player’s reserve relates to the match length, or to what is left to play from a starting score.

  • The pipcount hidden during a Duel: unchecked at launch, it stays hidden even with the toolbar button or P, and comes back when the Duel ends.

  • Rotating the video: the ⟳ button of the video bar, also present in the theatre mode bar, or the o key turns the video by a quarter turn, local file or YouTube link alike; the angle is remembered for the draft, on this computer.

  • A tournament’s date deduced from its matches: a tournament without a date takes that of its oldest match, shown greyed out and offered by the edit form, without being written to the database; each row of the Tournaments panel begins with # and Date as in the Matches panel, and Progression sorts the tournaments in chronological order.

  • The match sheet in the Tournaments panel: a click on a match of a tournament shows under the table the sheet of the Matches panel, with its tabs, and a filter field narrows the list of tournaments as you type.

  • The whole library is exported the same way everywhere: the new export window — one row per family with its count, the file chosen last —, blunderdb export --type database and the server carry the same families: matches with their transcription drafts and the aliases of their players and events, collections, tournaments, Anki decks with or without their review history (--anki-history, suspended cards included), each of which can be removed or restricted to identifiers (--match-ids, --tournament-ids…). A live collection or a saved filter that designates positions, matches or tournaments by their number is renumbered for the file, and a live collection is evaluated there under the cap of 5,000 positions; the source file and the local video of a match leave reduced to their name, a video URL without the credentials it carries. A filtered list exports only the matches where its positions were played, each with all its positions.

  • Repair a match from its source file: the ⟲ button of the Source file line of the sheet, or blunderdb match repair, rereads the file and rewrites the match’s positions, analyses and errors like a fresh import, keeping what has been entered since (tournament, names, player swap, comments, transcription, video and markers) and the deeper analyses; match repair --list finds the matches that differ from their file, and the matches.repair route does the same on the server.

  • The Stats panel: a single filter, shared by all tabs, with a player field that searches as you type; the date filter counts its last day in full, and the Engine filter is a menu of the engines present in the database’s analyses (blunderdb stats engines). Each table sorts and filters by column (>500, 3-7…), and its sort is remembered. Each count opens exactly what it counts — matches, tournaments, positions, blunders —, a player’s row places them in the filter, and a match header, the analysis bar and a tournament open Stats on them; blunderdb stats matches and stats tournaments give the matches and tournaments a figure counts. The ranking leaves the Corpus tab for the Players tab, sorted by PR (stats ranking still gives it on the command line); the hovered row of a table is tinted.

  • The Player merge window stays open between two merges; Close or ESC closes it.

  • A dance takes one key in the Transcription: when the side on roll is on the bar, f enters a roll that does not bring them in — the first one, non-doubles first — and the turn passes with no move to type; off the bar, or if every roll enters, nothing is entered and the status bar says so.

  • Resignation is entered with a key in the Transcription: r opens the choice of level (single, gammon, backgammon); in theater mode, a small window offers it, and the keys 1, 2 and 3 confirm it.

  • The move is played on the theater mode mini-board: same gestures as on the board, right click to take back the move; the arrows of the previous move disappear from the first step.

  • The Post-Crawford box of the Transcription appears at the starting score when a player is at L-1; each inconsistency mark of the transcription displays its reason.

  • The interface scale is set from the keyboard: Ctrl++, Ctrl+- and Ctrl+0 enlarge, reduce and reset it, as in a browser; the zoomed interface fills the whole window.

  • Rollout moves to SHIFT-R; r remains the random position.

  • Notable fixes: swapping the players of a match, in 0.39.0 and before, replaced its positions with other ones, without analysis, and removed its decisions from the PR, the MWC and L₇; swapping now touches only names and seats and keeps the analyses and figures bit for bit, and an already damaged match is repaired from its source file by match repair or the ⟲ button of its sheet. gammonNet no longer overflows on a double with a very large number of moves, which made an untruncated rollout fail; the “PR per match” curve is displayed on Linux; a position count of the Stats panel leaves match mode before opening its list; opening a tournament from Stats selects it in the Tournaments panel; the card of an .apkg export names the Crawford and post-Crawford game; the theater mode mini-board follows the orientation of the main board; a click on the transcription history is no longer moved by the playing video, and video jumps are bounded and serialized; a correction no longer leaves surplus checkers, and the chain of following positions is recomputed after a modification.

  • See Manual, Command Line Interface (CLI) and Headless mode (server).

0.39.0 (2026-10-10)

  • A match’s video: a local file or a YouTube link attaches to a match, and the Matches panel opens the video one second before the roll of the decision under study (row icon or the v key).

  • The video beside the board: the board area is shared between the video and the board, on either side of a handle whose place is remembered; ⇄ or the handle chooses the video’s side, [ and ] adjust its speed, which a large indicator shows at the centre of the video.

  • The Transcription follows a video: the video pane sets the markers of each action (roll time, action time), SPACE, SHIFT with the arrows, v and SHIFT-V drive playback and the markers, a click on a cell takes the video to its marker, and the Cursor follows the video during playback.

  • The duration of each move is read in a column of the transcription, deduced from the markers; a move without an action time has an estimated duration, shown like the others.

  • The Transcription bar reads in three groups: the drafts, the input with the Video menu (local file, YouTube link, remove the video), then Done, Resign and a ⋯ menu that holds the text and the .mat export.

  • Theatre mode: F11 puts the window in full screen with the video, a small board floating over it, the input keyboard remaining active.

  • A match sheet in tabs: the header and the summary of the per-player review stay at the top, and below them the tabs Transcript, Charts, Review, Details, Info and Stats each scroll on their own; the chosen tab is remembered, and the charts share the height of the Charts tab.

  • The match review: the decisions to revisit, the luck-adjusted result converted to MWC, the pace of errors (hasty or deliberate, relative to the player’s median duration) and the PR and the L₇ loss with their intervals; blunderdb match --format summary and the stats.matchReview route give it too.

  • The MWC loss expressed per 7-point match (L₇) is read next to the PR in the match list, the match statistics, the tournaments, the dashboard and the progression, as well as in blunderdb stats, stats progression and match.

  • The difficulty of each decision and the avoidable error: the transcription and the loss chart show them, and the match header gives, per player, the difficulty, the excess, the ratio and the number of avoidable errors.

  • A 95% interval accompanies the PR and each cell of the breakdowns, resampled by matches.

  • The tournament review: the Review button of the Tournaments panel compares a player’s tournament with their usual level, broken down by round, by decision rank, by pressure scores and by pace, then by error families; blunderdb stats tournament and the server give it too.

  • The Study plan card of the dashboard ranks the error families by recoverable MWC, and each one feeds the study queue, a quiz or an Anki deck; blunderdb stats plan is its command-line form.

  • Before/after study and signed biases: the dashboard measures whether what has been studied costs less in matches, and in which direction the player errs; blunderdb stats effect and stats biases give them too.

  • Reference positions: the Suggest… button of the Collections panel suggests the positions to study over a scope (database, current match, tournament, Statistics filter), to make a collection, an Anki deck or a quiz; blunderdb collection suggest is the other form.

  • A match goes through the trash: once deleted, it is restored identically, with its number, its import date, its games, its analyses and its positions; blunderdb trash delete --kind match does the same.

  • A Metrics page gives the definition, the formula and the limits of each measure: error, PR, MWC loss, difficulty, intervals, reviews, study plan, reference positions, before/after and biases.

  • A move is entered on the board the same way everywhere: in the Duel, Training, the Anki board answer and the Transcription, a click on a checker plays it with the left die still free, a click on the dice swaps their order then confirms the completed move, like ENTER, and the right click takes back the move in progress; entering source then destination is gone.

  • Anki and Training validate on the board: ENTER or a click on the dice judges the move played, in place of the Check button.

  • The Transcription asks for the dice before the move: with no dice entered, the board plays nothing; once both dice are entered, the move is played on the board as in the other modes.

  • Evaluate in a new tab: the right click on the board opens a Variant of #n view in the Eval panel, on the displayed position, and the original view keeps its position, its list and its analysis; each view finds its own Eval board again.

  • The challenge: the Challenge button of the toolbar (key m) covers the analysis of the Analysis panel until a click, at each position change; in match review, it also hides the marks, the losses and the difficulty of the move list.

  • Every position count opens with a click: the Positions and Blunders columns of the breakdowns, the families of the study plan (now a list of actions Study, Quiz, Anki), the counters of an Anki deck (due, new, learning, review), the count of a tournament and the marks of a game load exactly the positions counted.

  • The panels share one header band: title, counter and filters on the left, primary action at the right end (Search, Start, Play…); Search puts Criteria, History and Saved in its band.

  • A live collection is created with its query: blunderdb collection create --query and the collections.create route; collection evaluate reads it whole up to 5,000 positions and gives the real total, and an Anki deck drawn from a live collection replays its query at each session.

  • The Metadata form of the Transcription fills the body of the draft, in two columns when the width allows, the transcription staying visible; the same button or ESC gives the input back.

  • The help search counts and highlights the occurrences as you type.

  • Schema 2.41.0: the match’s video source and the markers of each play; each play carries the error of its own decision, and the PR of the matches already in the database is recomputed according to eXtreme Gammon’s rules. The migration from 2.36.0 is automatic on opening and cannot be undone (Annex: Database Schema).

  • Notable fixes: gammonNet analyses a take or a pass as the doubler’s decision before the double, rollouts included, and the migration erases the stale gammonNet verdicts of these positions; the PR counts forced moves, cube decisions and unmarked errors like eXtreme Gammon; a truncated .xg file is rejected with the invalid code; the muted sound and the volume of the video survive a speed change; a drag started from a dialog and released on the background no longer closes it; each tab of the settings keeps its scroll position.

  • See Manual, Metrics and study tools, Command Line Interface (CLI) and Headless mode (server).

0.38.0 (2026-10-06)

  • The Duel: a whole match is played against the Bot, which plays gammonNet’s policy, under blunderDB’s arbitration — dice drawn from a seed whose SHA-256 fingerprint is published at creation, rules, score and clocks kept by the application. A Duel tab, the « Jouer » button of the toolbar and the DUEL mode; a match of 1 to 25 points or a money session, starting from the initial position, the position on the board or a chosen score, a Duel suspended then resumed. blunderdb duel and the server’s duels.* routes are the two other forms.

  • The Duel is played on the board: before the roll, a click on the board or on the dice rolls them and a click on the cube offers a double; a click on a checker plays it, a click on the dice swaps their order or confirms the move, like ENTER or SPACE, and the right click takes back the move in progress or opens the Duel menu (Pile, resignation, suspension, stop).

  • The Cadence and the decision time: a reserve per player and a free delay at each turn, the elapsed time being noted or losing the match. Every decision of a Duel carries its duration, which the review shows (Durée column, per-player summary, chart), which search filters with tm>x, combinable with E>x, and which the Statistics tab crosses with the error.

  • The origin of a Match played here can be read at the head of its transcript: start, cadence, loss on time or stop, the Bot’s level and the gammonNet version whose policy it played, the revealed seed and its SHA-256 — enough to recompute every roll without trusting blunderDB.

  • The Pile: the b key, the bookmark of the toolbar or a double-click outside the board sets the displayed position aside, in every mode, and the same gesture takes it off; a bookmark in the corner of the board shows it. blunderdb collection pile makes the same gesture.

  • Rollouts start from a right click, from the moves table of the Analysis panel as from the Eval panel, on a selection of moves (Ctrl+click, Shift+click) or on the cube decision, with a setting — Fast, Standard or Free — kept from one session to the next. The same menu copies the position with its analysis, or with the selected moves.

  • Without an open database, the Eval panel sets up, pastes, evaluates, rolls out and copies a position, the Training tab offers Scores, Checkers, Bearoff and Evaluation, and import XGID=… sets the position on the scratch board.

  • The right click outside the board offers Effacer la position and Position de départ in edit mode and in Eval; on a move played on the board (quiz, Transcription), its menu starts with Recommencer.

  • The Duel prompts sit in the middle of the right half of the board, at the application’s type scale; player 1 stays at the bottom whichever player is on roll, and the seed fingerprint is read in a tooltip on the prompt line.

  • Abandon, pause, cancel: the Duel menu abandons the match, pauses it or cancels it; in money play, abandoning loses a single game at the value of the cube. A points match is recorded only when complete, and the seed of a pending Duel leaves through no export.

  • The Bot level selector states the depth of each level, read from the gammonNet table.

  • A Duel can be played against an external Side: an external Side declares the Bot playing behind it (--side external:<configuration>@<engine>, sides[i].declared), and the Match origin reads it back as declared by the client and not attested; with the combined seed (--combined-seed, duel contribute, duels.contribute), each external Side’s contribution is added to the sealed seed and the rolls come from it, the formula being published.

  • Several Duels open at once: opening a Duel suspends no other, and an open Duel runs its clocks until it is suspended, the process stopping or crashing included; the desktop keeps a single Duel on the board and suspends the one it leaves, without touching those a server or the command line holds open on the same database.

  • Match transcripts gain the Cube, Play and Clock columns; the cadence and the time bank appear in the match information, and a time cell without a duration carries a dash.

  • The status bar: the blunders link launches the search, and its two figures are separate links, the blunders of the list on screen and those of the whole library.

  • The engine moves to gammonNet v1.6.0 (network strehl-prob5-512-512-256-256); legal moves come out in the upstream order, smaller die first.

  • Materialize a transcription in a single call, in strict mode: blunderdb transcribe --materialize and the transcriptions.materialize route write the Match, or refuse the first faulty Action giving its rank and reason, writing nothing.

  • Schema 2.36.0: the Duel’s tables, the duration of every decision, the declared Bot, the external Sides’ contributions and each Duel’s open state. The migration from 2.31.0 is automatic on opening and cannot be undone (Annex: Database Schema).

  • Notable fixes: an unreadable import file is refused with the invalid code, internal staying reserved for failures; under Windows, a compaction does shrink the file, or says why it could not; CTRL-C is no longer contested by the embedded browser’s copy, and CTRL-X CTRL-X copies the gammonNet evaluation in EVAL mode.

  • See Manual, Command Line Interface (CLI) and Headless mode (server).

0.37.0 (2026-10-05)

  • Transcription of a paper match: a tab and a TRANSCRIBE mode where the match is entered move by move — dice, the triangle of the 21 rolls, the move played on the board or typed in notation, cube, in-place correction, a durable draft recovered after a crash. blunderdb transcribe and the transcriptions.* server routes are the two other forms.

  • Tournament Direction: a club tournament is run from the Tournament panel — player directory, pairing proposals confirmed with one gesture, table grid and result sheets, brackets and lives table, standings, prizes and prize pool, the room’s wall page, printable sheets, multi-event Encounters in a shared room. blunderdb tournament and serve --direction are the two other forms.

  • Training: a Training tab (Scores, Checkers, Bearoff, Evaluation, Decision) and its log, a quiz mode whose PR is on the scale of real play, missed questions retaken as a deck or a collection, a study queue of unhandled blunders, the explanation of the error on the back of the Anki card, score cards and cube decisions in two cards.

  • Lessons: a course written at the desk, read from the application, the command line (blunderdb lesson) or the server, exported with the database; progress is only written on an explicit gesture of the student.

  • Search queries a corpus: tokens for player, opponent, tournament, round, length, date and PR, like which ranks similar positions, the gt: game plan, a tag vocabulary, a plain-language sentence translated into tokens, pinned favorite filters, a fuzzy command palette (CTRL-SHIFT-P), a contact sheet of mini-boards and live collections.

  • The Stats panel gains the Corpus tab (head-to-head, PR per window, ranking, player and event aliases, probable duplicates), two players side by side, recurring errors by game plan, the breakdown by phase, tag and score, a progress goal, a standalone HTML report and CSV export; an imported match without analysis gets a PR.

  • The evaluator moves to gammonNet v1.4.0 — triplet move filter, beaver and raccoon in money game only — and gains truncated, cubeful and reproducible rollouts, stored as a second analysis, engines side by side, the cube matrix at every score of a match, and a match equity table imported from a gnubg .xml, specific to each database.

  • Import becomes parallel, with a bulk mode for large batches, a log and the resumption of an interrupted batch, a watched folder, HedgeHog .ogxm matches, OpenGammon’s OGID and XG header metadata (Elo, transcriber, comments); an exact duplicate brings its deeper analyses.

  • Comments are signed: the “Your name” setting (--author on the command line) names their author, which travels with the export.

  • In the interface: a welcome screen, four named themes, the board image as SVG, a help where you can search, an undoable deletion, error thresholds adjustable per library, and a library, a search and a match list browsed by windows, without loading everything.

  • An assistant through MCP: the application and the server offer their tools to an assistant (Model Context Protocol). On the server side: an analysis queue shared between tenants, quotas (including a quota of stored bytes), the /v1/events event stream, a web viewing page, sharing of Anki decks and collections between tenants, and a generated Python client.

  • Schema 2.31.0: dates as integers, position and analysis as binary, coded action labels — a lighter database. Migration from 2.18.0 is automatic on opening and cannot be reversed (Annex: Database Schema).

  • Notable fixes: a truncated .mat or a BGBlitz .txt without a position is refused instead of being half imported, the XG marks of a duplicate are kept, a gammonNet verdict keeps the moves played, under PostgreSQL a refused write no longer reveals what another tenant holds, and the Direction’s wall display button opens the page in the system browser, reporting any failure.

  • See Manual, Command Line Interface (CLI) and Headless mode (server).

0.36.0 (2026-09-05)

  • The binary is 7.3 MB smaller: the bearoff tables are no longer embedded nor downloaded, but computed on first launch, in the background and in silence — byte for byte identical to gnubg’s own, with the SHA-256 fingerprint checked. The extended TS-06-11 table is computed in the Bearoff tab instead of a 1.2 GB download.

  • Tournaments fill themselves at import: a match is filed under the tournament its file names, created if need be; a match already filed is never moved.

  • One search grammar, now readable from the command line (blunderdb search --query) as much as from the application.

  • The command line gains --format json on nine commands, completion for bash, zsh and fish, the repair command and the anki card and anki log sub-commands.

  • The built-in help’s Shortcuts and Commands tabs are generated from the manual pages that describe them: they can no longer fall behind those pages, and become tables, without inset boxes. The help’s Manual tab remains a summary, distinct from the full online manual. Three more guided tours (Eval, Anki, Stats).

  • A Linux arm64 binary, shipped as a tarball, .deb, .rpm and AUR package.

  • The Eval panel finds again the board it was left on, tells money equity from match equity, and is browsed from the keyboard.

  • On the server side: an API contract generated from the code (openapi.yaml and its annex, 135 routes), a correlation identifier per request, gauges on the work in flight, compression of the NDJSON streams (13.5% of the size), and the two calls that reach beyond the tenant — vacuum and purge — move under /ops/.

  • Schema 2.18.0: Jacoby and beaver leave the position’s identity, so the same money position no longer enters twice through different doors. The migration is automatic on opening and irreversible (Annex: Database Schema).

  • Notable fixes: the Matches panel’s detail pane no longer takes half the screen when nothing is selected, the first game of a transcript folds like the others, SHIFT-J and SHIFT-K switch views from any panel, and eight “show/hide” shortcuts finally hide.

  • See Command Line Interface (CLI), Headless mode (server) and Manual.

0.35.0 (2026-09-02)

  • The command line gains two families: blunderdb collection (list, show, create, rename, delete, export a collection) and blunderdb anki (decks, statistics, review forecast, resynchronising a deck).

  • Server mode is published as a Docker image (ghcr.io/kevung/blunderdb-serve, amd64 and arm64), gains the maintenance.vacuum route and watermarks its exports with the server’s issuer identity (--identity-dir).

  • The gammonNet evaluator prices its leaves with the cube: at a match score, the search’s verdicts move closer to eXtreme Gammon’s.

  • Every release now ships winget and Homebrew manifests and a Flatpak bundle, alongside the Debian, RPM and AUR packages.

  • In the interface, the library is now paginated (a 50,000-position database no longer loads everything into memory on every refresh), modal windows share a common base (focus, Escape, accessibility), the board only redraws what changes, and the embedded Japanese font is reduced to its useful subset (5.5 MB less).

  • Notable fixes: a database imported via “Import a database” kept positions invisible to filters and duplicated on a second import (repaired on opening), the Merge button in the player-merge window stayed greyed out, the server export was empty, and on Windows removing the downloaded bearoff database and create --force used to fail.

  • See Command Line Interface (CLI), Headless mode (server) and Manual.

0.34.0 (2026-09-02)

  • An embedded evaluator: gammonNet, ported to Go and compiled into blunderDB, evaluates any position offline, without XG or gnuBG — neural network, 0 to 2-ply search with pruning, cube decision per Janowski and blunderDB’s match-equity table, and a search that honours the match score.

  • The Bearoff panel becomes the Eval panel: it presents the position’s facts (win, gammon and backgammon chances for both sides, equity) then the single decision the board is asking, on a stable grid with no scrolling; match equities are normalised and the “too good to double” verdict is visible again.

  • Evaluation is progressive: 0-ply immediately on the gesture, then 2-ply at rest, cancellable by any new gesture, the depth label always naming the one that produced the figure.

  • The whole board, dice and score are editable there, by click or keyboard, and a library position enters and leaves the panel.

  • On a race beyond the two-sided database, a third evaluated regime supplies the at-score cube verdict the panel used not to give.

  • A gammonNet tab in settings separates the display depth from the analysis depth.

  • After an import, a bounded, visible, cancellable, resumable analysis batch fills positions with no analysis at all, never overwriting an imported analysis; catching up an existing library starts from the interface, the new blunderdb analyze command, or server mode.

  • Notable fixes: a cube response imported from eXtreme Gammon used to inherit the doubler’s analysis without being flipped, White’s move and bar-entry notation now follows gnuBG and XG, a gnuBG analysis’s depth is read correctly, and the side panel’s size is remembered.

  • See Eval Panel, Manual and Command Line Interface (CLI).

0.33.0 (2026-08-26)

  • The Stats panel gains a Players tab: the three previous tabs describe one player, this one compares them all, one row per player in the database — matches, wins/losses, counted decisions, overall / checker / cube PR, Snowie Error Rate, blunders and luck. The table sorts by any column, narrows down to the dates of a competition through the usual filters, and clicking a row switches to that player’s detail. A dash marks a value that was never measured, never a zero. The table is also available from the command line (blunderdb list --type players, as text, JSON or CSV) and in server mode.

  • The luck of every roll is now stored in the database and displayed: average luck per roll, in thousandths of a point, signed. It is read on import from eXtreme Gammon files as well as from gnuBG. It is not retroactive — matches imported earlier show a dash, and the source files must be re-imported to recover it; formats that do not carry it (BGF, Jellyfish .mat) never will.

  • The Errors tab now shows in which direction cube decisions go wrong, not just how much they cost: an Offer row (missed doubles, premature doubles) and an Answer row (wrong passes, wrong takes), deliberately kept apart since one and the same player can double late and take loosely. Each cell carries its count, the tooltip the equity lost, and clicking it loads the matching positions.

  • New Compact database command, reclaiming the space left behind by deletions: a button in the settings and a blunderdb vacuum subcommand. It never runs on its own.

  • Ergonomics: destructive actions ask for confirmation, a search in progress is signalled, an unknown command gets a message instead of silence, and tabs, docked panels and small dialogs are fully keyboard-operable. Search is also noticeably faster.

  • Notable fixes: non-doubles labelled “Double No” by gnuBG were counted as doubles, skewing the cube PR (an existing database can be repaired without re-importing, in server mode); the player filter wrongly narrowed the denominator of the Snowie Error Rate; exports wrote an outdated schema; and blunderdb vacuum opened the graphical interface instead of compacting the database.

  • See Stats Panel and Command Line Interface (CLI).

0.32.0 (2026-08-09)

  • The EPC panel becomes the Bearoff panel and gains full race analysis. (Renamed to the Eval panel in 0.34.0.)

  • On a pure bearoff position, it shows — besides the EPC, pip count, wastage and each player’s mean rolls, now presented in a table with a signed Δ row — both players’ win probabilities and money equities (cubeless, no-double, double/take, double/pass, with each decision’s gap to the best) as well as the best cube decision.

  • Two clearly distinguished regimes: exact (read from a two-sided database; GNUbg’s TS-06-06 database built in, covering up to 6 checkers per player) and estimated (calibrated convolution, error margin shown — the cube verdict is never estimated).

  • The extended TS-06-11 database (exact verdict up to 11 checkers per player, 1.2 GB) is downloaded from the new Bearoff tab of the settings, with integrity checking and resumable downloads; any two-sided .bd file from gnubg can also be designated. (Replaced in 0.36.0: the table is now computed on the machine, no more download.)

  • Challenge mode for training: results are hidden on every change and revealed zone by zone, with one click.

  • Fully on-board editing: both sides’ checkers, player on roll (click the bearoff/score rectangle) and cube position (click the cube).

  • Clicking the board is now accurate at any interface scale (a click on point 1 could land on point 2).

  • New blunderdb epc command line and --bearoff-ts option for server mode.

  • A new manual section, “Methodology and assumptions of the Bearoff panel”, exhaustively states the assumptions behind every displayed value. (Section renamed along with the panel in 0.34.0.)

  • See Eval Panel and Methodology and assumptions of the Eval panel.

0.31.0 (2026-08-04)

  • Sharing a database with third parties: two independent mechanisms, both optional and chosen at export time.

  • The origin watermark records in the file what it is and where it comes from, signed by an issuer identity created on its own on first use; the mark is unforgeable, shown at the top of the Metadata panel (or via blunderdb info, without ever writing to the file) and records nothing on the recipient’s side — no log, no tracking.

  • Password protection produces an encrypted .dbx file (AES-256-GCM, key derived with Argon2id), checked on every opening, whose header stays readable in the clear; the identity exports and imports as a single file from preferences.

  • Export window redesigned: a single screen instead of four, a reminder of what actually leaves (the displayed positions), each collection’s covered share flagged in red when partial, tournaments exportable only with their matches — and an export three times faster.

  • Settings window reorganised into three tabs (Interface, Board colours, Issuer identity), with stable size and position.

  • Metadata panel redesigned as a single grid.

  • The Log panel, which only received an echo of commands, is removed.

  • Notable fixes: a wrong password no longer opens a protected database, modal-window fields no longer lose focus on click, PR/MWC indicator computation no longer crashes on a money game, and temporary files (-wal, -shm, lock) are cleaned up on close.

  • See Handing out a database: origin and password and Manual.

0.30.0 (2026-07-26)

  • Search by comment: the “Search text” filter becomes the “Comment” filter and offers three exclusive modes — contains the text (previous behaviour, token t""word1;word2""), has a comment (token co) and no comment (token xco) — to find in one gesture the annotated positions, or conversely those still to be commented.

  • Positions flagged in eXtreme Gammon: the marks (flags) placed while analysing an XG match are now read at import and retrievable through the “Flagged” filter (token fl), combinable with every other criterion; a flagged cube decision gives two flagged positions, the double and the take/pass.

  • Since flagging is not retroactive, simply re-import the relevant .xg file for its marks to join the database, without touching existing comments or analyses.

  • Notable fixes: the PR shown on a tournament’s badge now relates to the reference player rather than the sum of both players, Anki decks built from a search once again respect that search’s filters instead of pulling in the whole database, and a search lockup combining certain filters (text, date, played-move error) is fixed.

  • See List of commands and Manual.

0.29.0 (2026-07-18)

  • Exporting a match in Jellyfish/gnubg format (.mat) from the interface (Matches panel) as well as the command line, with the corresponding server route — handy for replaying a match in another backgammon program.

  • Search: a new “excluded dice” discriminator (token xD65, several allowed) that rules out positions whose roll matches a given one.

  • Secure concurrent opening: a database already open for writing in another blunderDB window now opens read-only (browsing, search and analysis still possible, changes disabled, a “[read-only]” mention in the title bar) instead of risking corruption.

  • Position provenance: outside match mode, the information bar above the board shows the match — and its tournament — the studied position comes from, with a “+N” badge when it appears in several matches.

  • Increased robustness against the environment: automatic fallback when a font, the clipboard or the last-opened database is unavailable.

  • An explicit library reload (CTRL-R, toolbar button or e command) reopens the analysis panel on the displayed position.

  • Notable fixes: removed a lockup on exporting large databases, the export’s “None” button that did not actually export nothing, multi-word comment filtering, deduplicating event and tournament in the information bar, and various display adjustments.

  • See List of commands, Matches Panel and Manual.

0.28.0 (2026-07-15)

  • Search panel: a unified “Matches & Tournaments” filter replacing the identifier text fields with a selection window (text-filterable checklists, All/None buttons, checking a tournament checks its member matches) — faster on large databases, the Matches tab and Tournaments view now only recompute PR/MWC indicators for the displayed matches; cli list --type tournaments closes the corresponding parity gap.

  • New “Individually imported” filter (checkbox in the Other group, or token i on the command line, s i; also available in the CLI via --individual) to find a position saved or imported on its own rather than lost inside a match import.

  • Fixed a data loss: deleting a match no longer removes individually imported positions, positions placed in a collection, or positions included in an Anki deck that the match also contained.

  • Server (headless) mode: six new methods for the spaced-repetition Anki scheduler — review log (anki.reviewLog), forecast of cards coming due (anki.forecast), suspending/burying/removing a card (anki.suspendCard, anki.buryCard, anki.removeCard) and automatic adjustment of a deck’s target retention towards its observed success rate (anki.optimizeParams, replaced in 0.36.0 by anki.retention, which measures the observed rate without ever writing the target); a new tenant.purge method to permanently delete a tenant’s data on a multi-user PostgreSQL deployment; new matches.list (filtering/sorting/pagination) and stats.matchBadges (PR/MWC indicators bounded to a list of matches) methods.

  • Native Linux distribution: .deb/.rpm packages, which keep the execute bit lost when downloading the raw binary.

  • Import: after importing a match, the Matches tab now displays and imported positions are immediately visible; after importing a standalone position (XGP file, BGBlitz position, text position file, pasted position or a batch of positions), the Analysis tab now opens directly on the imported position, instead of the Matches tab; fixed pasting an eXtreme Gammon analysis in French or German from macOS, which used to stay empty (accents decomposed by the system clipboard).

  • See Headless mode (server), List of commands and Download and Installation.

0.27.0 (2026-06-13)

  • Anki panel: a new “free drill” mode (cram), available from the Cram button next to Study, which serves random positions from the deck without altering the spaced-repetition schedule — ideal for warming up before a tournament or intensively reviewing a deck without disturbing its ordering.

  • Search: a new blunders command (alias bl) that loads your worst mistakes (equity/MWC) straight into the analysis view, with an optional number to choose how many (bl 50); a new player filter pl'name' that finds every position from a match involving a given player, on either side; and tooltips that, on hovering each search-panel filter, show the corresponding command token.

  • Server (headless) mode: new matches.movesByMatch (all the moves of a match in a single call) and positions.epc (Effective Pip Count for both players) methods.

  • See Anki Panel and List of commands.

0.26.0 (2026-06-09)

  • Interface display settings in the settings window: a scale slider to enlarge or shrink the whole interface, and a choice of panel position (bottom, side or automatic) to make better use of wide screens.

  • Added an information bar above the board recalling the players and the match context (event, venue, round, date, length).

  • When opening a database, the Matches panel is now shown immediately and review starts on the first position.

  • Keyboard shortcuts are now independent of keyboard layout (AZERTY, QWERTY, QWERTZ…).

  • Fixed XGID decoding (Jacoby/Beaver flags and cube value).

  • Added multiple-view tabs: several independent workspaces (position list, current position, search) with the shortcuts CTRL-T (new view), CTRL-W (close), CTRL-PageUp/CTRL-PageDown (switch view) and rename by double-clicking the tab.

  • See Configuration and View Tabs.

0.25.0 (2026-06-07)

  • Server (headless) mode: two new methods to rebuild a position without storing it — positions.fromXGID decodes an XGID string into a position, and positions.fromXGP reads a single-position .xgp file.

  • See Headless mode (server).

0.24.0 (2026-06-06)

  • Added a container image (Docker) for headless mode: a dedicated serve entry point and a Dockerfile.serve producing a static binary with no graphical interface, to deploy the blunderDB engine as a service behind a reverse proxy.

  • See Headless mode (server).

0.23.0 (2026-06-05)

  • Added guided tours of the interface (general tour, search, matches, tournaments), replayable from the toolbar or the tour command, and a sample database loadable with the demo command to discover the tool without importing your own games.

  • Customising board colours (background, border, arrows, checkers, dice, cube) from the settings window.

  • Command-line autocompletion (TAB key).

  • Search panel: explicit control of the decision type (Checkers / Cube), with a Double / No double or Take / Pass sub-type for cube decisions, synchronised with the board; the cube offered is displayed at the centre of the board for take/pass decisions.

  • Searching for a position by its identifier (id filter).

  • Fixed the attribution of the cube error to player 1.

  • See Guided tours and sample database.

0.22.0 (2026-06-02)

  • Added a headless (server) mode, advanced and optional, complementing the desktop application: a serve daemon exposing the engine over HTTP + JSON, a multi-user PostgreSQL backend with per-tenant isolation (and optional Row-Level Security), a migrate command to transfer a SQLite database to PostgreSQL, and a generic call dispatcher giving command-line access to every storage operation.

  • Importing single positions from new formats (eXtreme Gammon .xgp, BGBlitz text, native .db library) with enrichment of duplicates across formats.

  • Fixes: panels no longer raise an error when no database is open, and the Comments panel no longer loops on opening.

  • See Headless mode (server).

0.21.0 (2026-06-01)

  • Interface internationalisation: the whole of blunderDB (toolbar, panels, messages, help) can now be displayed in English, French, German, Italian, Spanish, Finnish, Japanese, Greek or Russian, as you choose.

  • Added a settings window, accessible via a gear-shaped button in the toolbar, allowing the language to be selected.

  • The language choice is kept from one session to another.

  • See Configuration.

0.20.0 (2026-05-31)

  • Added the Except exclusion structure to the search panel: excludes positions containing one of the drawn checkers, with a “must be empty” marker (double-click) and an unlimited number of checkers per point (x command).

  • Added the “first die only” option to the dice-roll filter (D1 variant, --dice CLI option).

  • Comments panel: automatic focus of the input field on opening, and edit/delete buttons always visible.

  • Fixed the “Search Text” filter, which did not find all comment tags.

0.19.0 (2026-05-07)

  • Added Stats panel: PR (Performance Rating), Snowie Error Rate and MWC cost (Match Winning Chance cost) indicators, filter bar (player, tournament, dates, decision type, match length), Dashboard tab with level cards / rolling PR / top blunders, Progression tab with per-tournament curve and per-match scatter plot, Errors tab with cube-action breakdown and error magnitude histogram.

  • Interactive drill-down to positions / matches / tournaments from all indicators.

  • Instant PR / MWC toggle.

  • CLI command list –type stats.

  • Alignment of PR / Snowie ER / MWC indicators with eXtremeGammon and gnuBG (0.16 equity threshold for close cubes).

  • Fixed cube_error calculation for Double/Pass decisions.

  • Documentation of the statistics model (Annex: Statistics model — XG / gnuBG / blunderDB alignment).

  • See Stats Panel.

0.18.0 (2026-04-20)

  • Major code refactoring: splitting db.go (10k lines) into 19 specialised files, extracting 7 service modules out of App.svelte (4888→469 lines), consolidating modal/panel stores.

  • Full migration to Svelte 5 runes.

  • Replaced 9 table modals with a generic DataTableModal component.

  • Added ESLint + Prettier + vitest (125 frontend tests) with CI.

  • WCAG 2.1 AA compliance (visible focus, ARIA roles, keyboard navigation).

  • Switched the Database mutex to an RWMutex for better read parallelism.

  • Complete CLI documentation (CLI_USAGE.md + Sphinx FR/EN).

  • Rewrote the README.

  • Fixed all ESLint (46→0) and Vite (6→0) warnings.

0.17.0 (2026-04-20)

  • Storage optimisation: zlib compression of analysis data (~80% reduction), compact position encoding (~90% size reduction).

  • Added 5 missing indexes to improve search performance.

  • Fixed search by cube error.

  • Fixed EDIT mode after a search with no results.

  • Restoring the search panel’s state when switching tabs.

  • Removed 62 debug statements from critical paths.

0.16.0 (2026-04-18)

  • Database schema v2.0.0: position deduplication via Zobrist hash, denormalised filter columns, bitboard pattern pre-filter, WAL journaling (Annex: Database Schema).

  • Batch import >=3x faster, filtered search <=100 ms on 10k+ positions.

  • NOTE: DB files created with v0.16.0 cannot be opened by older versions; old DBs are auto-migrated in place (back up first).

0.15.0 (2026-03-31)

  • Export position as PNG image to clipboard (board only via Ctrl+X, or board with analysis via Ctrl+X Ctrl+X).

0.14.0 (2026-03-30)

  • Dedicated Anki panel for spaced repetition study (FSRS algorithm).

  • Import comments from XG files.

0.13.0 (2026-03-28)

  • Interface simplification: match and collection navigation is now done directly through panels.

  • Command line integrated into the status bar.

  • Console panel renamed to Log panel. (Panel removed in 0.31.0.)

  • Dedicated Bearoff panel in the bottom panel.

  • Copy/paste position in the search panel.

  • Drag and drop to reorder collections, positions within collections, and matches within tournaments.

  • Tournament column in the match panel with inline editing.

  • Automatic display of the analysis panel after a search.

0.12.0 (2026-03-19)

  • Import eXtreme Gammon position files (XGP) with analysis.

0.11.0 (2026-03-06)

  • Filter to search within currently filtered positions.

  • Add match and tournament filters.

  • Automatic board clearing when opening the search panel.

0.10.0 (2026-02-25)

  • Match import from eXtreme Gammon (XG/XGP), GNUbg (SGF), Jellyfish (MAT/TXT) and BGBlitz (BGF/TXT).

  • Match navigation: browse through moves of an imported match, with played move highlighting.

  • Match panel: list, sort, inline editing, player swap, tournament assignment.

  • Recursive folder import and drag & drop import.

  • EPC (Effective Pip Count) calculator with built-in GNUbg bearoff database. (Replaced in 0.36.0: the table is now computed on the machine, none is embedded any more.)

  • Collections: custom position grouping.

  • Tournaments: group matches by event.

  • Save and restore session state (last search, current position).

  • Automatic database schema migration.

  • Multi-engine display in analysis.

  • Player 1 error/blunder filter in searches.

  • Database export with granular selection (matches, collections, tournaments, played moves).

  • Match navigation button.

  • Pipcount display in match navigation.

  • Complete command-line interface (CLI).

  • Automatic reopening of the last database.

  • Improved toolbar and icons.

0.9.0 (2025-11-02)

  • Fix filter library bug.

  • Database import/export.

  • Display arrows for selected moves.

  • Keyboard shortcuts for import/export.

0.8.0 (2025-05-03)

  • New button to hide pipcount.

  • Button to load random position.

0.7.0 (2025-02-16)

  • Support Japanese and German XG exports.

0.6.0 (2025-02-13)

  • Add filter library.

  • Displaying the database version in the metadata.

0.5.0 (2025-02-04)

  • Addition of new filters (mirror, non-contact, jan blot, outfield blot).

0.4.0 (2025-02-03)

  • Various bug fixes.

  • Adding an icon for blunderDB.

  • Filter corrections.

  • Adding macOS support.

0.3.0 (2025-01-27)

  • Various bug fixes.

  • Automatically saves the window size.

  • Imports any comments from XG.

0.2.0 (2025-01-06)

  • Various bug fixes.

  • Addition of match/TP/GV tables.

  • Added search filters (moves, cube decisions, date).

  • Added metadata for positions.

  • Import/export functionality between blunderDB instances.

  • Added metadata functionality for databases.

  • Introduction of version numbers (database and application).

0.1.0 (2024-12-31)

  • Beta version