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-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.

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