What's new

Dart Trainer release notes

Point releases from 0.3.0 through today — what changed for players. Newest first.

0.9 · current

0.9.1012026-09-08 20:41 UTC
End-of-match stats work again — and they are this match’s, not the last game’s.
  • After a 501 match the recap said stats unavailable and left the numbers from whatever you played before it still on screen — an Around the World score sitting under a 501 scoreboard. Both halves are fixed: the match stats load, and an old game’s recap can no longer stay behind.
  • Per-player stats are back on a match: a tab each, with 3-dart average, first 9, checkout % and the leg-by-leg breakdown.
  • The average on your card is now the whole match, not just the last leg — so it matches the number in the match report below it.
0.9.1002026-08-28 20:13 UTC
Pairing: the board now says to press Confirm on dart-room.com → Account.
  • After you type the pair code, the status line names the button and the page. It used to say only “confirm at dart-room.com/account”.
0.9.992026-08-28 10:50 UTC
Pairing tells you where to go next.
  • After you type the pair code, the board now says to confirm at dart-room.com/account — it used to say only “confirm on dart-room.com”, which left you hunting for a button on whichever page you happened to be on.
0.9.982026-08-27 15:57 UTC
Online: the live view comes back by itself, and Calibrate works from dart-room.com.
  • If the live picture drops out mid-match it now reconnects on its own, and says “live view reconnecting” while it is away instead of just freezing. Scoring never stops during any of it — only the pictures pause.
  • Calibrate from dart-room.com: the camera views, the overlays and the orientation preview all come through now, so you no longer need to open the Pi’s own address to calibrate. Still only you — nobody else in the match can see your cameras.
0.9.972026-08-27 15:39 UTC
Online: a dart you throw before your opponent pulls is no longer lost.
  • Throw while the other player still has darts in the board and your dart is held, not dropped — the board says so, and it goes up the moment they pull. It used to vanish: the board would not score into their window, and nothing remembered the dart that was already stuck in yours.
  • It also stops the darts after it reading wrong. The board works out where a dart landed by comparing against what was there before, and a dart nobody had recorded was missing from that picture.
0.9.962026-08-27 14:28 UTC
Scanning your recovery words now works the one time in forty-four it used to fail.
  • Photographing your 12-word QR to move an identity to another board sometimes came back “no QR code found in the photo” even with a perfectly sharp picture — and trying again with the same words gave the same answer, because it was the code itself the reader could not handle, not your photo. It now reads them.
  • A scan that does work is also quicker to come back.
0.9.952026-08-27 10:59 UTC
Online: when the board and dart-room.com disagree, the board says so.
  • If the site refuses a dart, a correction or a takeback, you get a line telling you which dart and why — instead of the board and the site quietly showing different scores.
  • Lose your seat mid-visit and your darts are held, not thrown away: re-seat the board from dart-room.com and they go up in the order you threw them.
  • After a board restart mid-visit, correcting a dart no longer rewrites your opponent's. The darts already counted on the site are shown but greyed out — throw the rest, or pull.
  • A match whose record has broken now says exactly that, and can still be ended. It used to look like "cannot reach dart-room.com" and could not be closed at all.
0.9.942026-08-26 23:42 UTC
Online: a dart you add back keeps its place in the visit.
  • Recovering a missed dart with ➕ into slot 1 or 2 used to reach dart-room.com as if you had thrown it last — which can turn a checkout into a bust, or the other way round. It now keeps the order you actually threw.
  • The board photo no longer vanishes when the connection cannot say which board sent it; it shows, and says so in the log.
  • The hosted page asks your board for news far less often when nothing is happening — same speed at the oche, much less chatter.
0.9.932026-08-26 19:44 UTC
The post-game recap tells you how the game went, instead of repeating its rules.
  • Around the Clock now names the three numbers that ate the most darts, and how often you hit the number you were on. The variant is in the title, where it belongs.
  • Around the World names the three numbers that paid the most — and no longer lists a number you scored nothing on.
  • Everywhere a tile used to say “Goal: high score wins”, it now says something you did: Hit % on the modes that name a bed, Checkout % on the checkout ladders, a 3-dart average on Count-Up and a visit average on High Score 3.
0.9.922026-08-26 18:30 UTC
Online: when the match is not yours, the board page offers the way in instead of a dead end.
  • Open a match you have no seat in and the page now shows Claim seat 2 in the room and hides End match (which was never allowed to work for you anyway).
0.9.912026-08-26 14:09 UTC
Online: your opponent sees your board after the pull, pairing moves into Settings, and the page says what is wrong.
  • After you pull your darts, the photo of your board now appears on the other player’s tablet — the one person who cannot see it. Before, only your own tablet ever got it.
  • Pair the board with dart-room.com from ⚙ Settings → dart-room.com: type the code from the Account page, confirm on the site, paste the token. No terminal, no curl. The section is there as soon as the add-on is installed and tells you why a code was refused (“That code isn’t right”, “Code expired — generate a new one”, “This board is already linked to another account”). Without the add-on it says “offline only”.
  • On dart-room.com/board, an error now reads as a sentence from the site instead of a bare “504”. When your board stops answering, the page says Your board is not answering with Try again / Back to room, and the offline banner can finally fire; it clears itself when the board is back.
  • dart-room.com was still serving last release’s board page; rebuilt. The hosted page no longer shows a permanent “Board updated — tap to reload” just because the site and your rig are on different versions.
  • Bridge 0.2.12: an unsent throw from a match you left can no longer land in your next match, and a leftover from an old match can no longer block every later match’s darts.
0.9.902026-08-26 00:02 UTC
Online: the board photo and the calibrate live view actually arrive — and corrections hit the right dart.
  • 0.9.87–0.9.89 shipped with the LiveKit byte stream never being sent (an await was missing on every rig): calibrate live view timed out and the other seat never got the visit still. Fixed and tested against the real SDK shape.
  • A lost still no longer jams the calibrate view until you reload; each camera gets its own frame; only your own board’s stream is accepted.
  • Recovering a missed dart with ➕ into slot 2, or a dart the hub refused, no longer makes later taps and phantoms edit the wrong dart on dart-room.com. A refused dart now shows as a divergence notice.
  • The recap can no longer show the opponent’s next-visit board; warping the board photo no longer stalls the live lane on the Pi.
  • Tournament replay keeps checking earlier darts of a corrected visit; a correction on the checkout dart keeps its remaining on the match page.
0.9.892026-08-25 23:04 UTC
Online: the recap keeps the last visit’s board photo.
  • After the match you still see that top-down still on the recap. A checkout that never needed a pull still sends it.
0.9.882026-08-25 21:55 UTC
Online: after a visit the other seat sees a photo of the board, not the room.
  • When you pull, dart-room.com shows a top-down still of that visit. Calibrate live view was 0.9.87.
0.9.872026-08-25 21:27 UTC
Online: you can calibrate cameras from dart-room.com, without opening the Pi.
  • The live camera view with the wireframe overlay now reaches the tablet. Opponent board stills are next.
0.9.862026-08-25 21:05 UTC
Online: adding, phantoming, or bouncing a dart is saved to the match.
  • A missed dart you add, a phantom you delete, or a bounce you mark now goes to dart-room.com as it happens, not only at pull.
0.9.852026-08-25 19:30 UTC
Online: a tap-correction is saved to the match, not lost when you pull.
  • Each dart still goes to dart-room.com as soon as it hits; a tap sends a correction for that dart.
0.9.842026-08-24 18:49 UTC
Online play moves into a separate add-on (dart-room-bridge) that installs alongside; nothing changes at the oche.
  • If your board shows “offline only” after updating, install dart-room-bridge.
0.9.832026-08-24 14:59 UTC
D16 checkouts in the 50s no longer send you at a treble just to stay on 16.
  • 53 is S13·D20, not T7·D16. Same idea for 55–59, and for 113 / 115–119 after a T20.
  • 52 is still S20·D16 and 80 is still T16·D16 — a treble to stay on 16 only when no single two-dart exists.
0.9.822026-08-21 20:47 UTC
A slow camera is reopened mid-game instead of scoring darts in the wrong place.
  • If one of the three cameras drops to around 20 fps while the others stay at 30, the board reopens that camera between visits. That used to sit unnoticed for a whole game, with darts landing far from where they actually were.
  • Same cameras, same Pi as always — the watchdog was only looking for a solid 15 fps drop, so a 20 fps park slipped through.
0.9.812026-08-21 16:20 UTC
Resuming a game no longer leaves the board lit on the previous number.
  • After Resume game, the highlighted number and the shaded slots could disagree — the slots suggested the number you were on, the board still lit the one before it.
  • It affected Around the World, Shanghai, Bob’s 27, Bermuda and JDC: every mode that holds the highlight until you pull. Around the Clock was never affected.
0.9.802026-08-21 14:54 UTC
The shaded dart slots now follow your own finishing style.
  • Pick D20, D16 or Aggressive per player in setup, the same way you pick a colour. D16 cascades D16 → D8 → D4 → D2; Aggressive is the old behaviour and the only one that will set you up on a double. Tap ? next to the chips for the full table.
  • This changes what you see if you never pick. Everyone starts on D20, the common chart, instead of the previous solver — so 62, 74 and 80 look different. 62 is now T10·D16 rather than D11·D20. Choose Aggressive on the player to keep the old suggestions.
  • When the visit can no longer finish, the slots show what to leave for next time instead of going blank — and on a number you cannot check out from, they use all three darts, so the leave survives the visit you are actually throwing.
  • Finishing practice (Checkout 121, Finishing 50) stays blank once the attempt is gone, because there is no next visit to leave for.
  • Opening Help no longer hides the “not talking to the board” and stale-tab warnings.
0.9.792026-08-21 06:15 UTC
Your board's own screen can now be opened from dart-room.com and follows the game live.
  • It's read-only for now — you can watch every throw and score update as it happens, but nothing on the hosted page can throw, confirm, or correct for you; that still only works at the oche.
  • Confirming board orientation is refused while darts are still in the board, so a mid-visit tap can no longer mis-set the calibration.
0.9.782026-08-21 02:50 UTC
Game over names the mode you just played, and you can share it from the board.
  • The OVER screen says the exact game — 170 double-out, Cricket cut-throat, Count-Up 8 rounds — not a generic “game over”. Share sits next to Feedback; the live board stays on screen.
  • Dragging a correction near the edge of the tablet no longer fights the coloured glow around the screen.
0.9.772026-08-21 00:29 UTC
Online play: your board waits while your opponent checks their darts.
  • After your opponent’s third dart, your board no longer starts detecting until they have pulled — their correction window is theirs, just like at the oche. (The computer opponent learned the same manners on dart-room.com on 2026-08-21.)
  • If dart-room.com asks a board to wait for a pull, the dart is held and sent afterwards instead of being dropped from the match.
  • dart-room.com now shows “dart detected — waiting for your turn” when your board sees a dart out of turn.
  • The status-bar words (THROW 1 / PULL / OK? / BUST / LEG / OVER) and the review hints are now one shared vocabulary between the tablet and dart-room.com.
0.9.762026-08-20 20:23 UTC
Finishing 50: remaining is now readable from the oche.
  • After the first dart, what is left (32 after an 18 on 50) is the big number — not a tiny line under the round target. The round you started on still sits underneath as “out 50”.
0.9.752026-08-20 19:41 UTC
Fix: trainer would not start on some boards after 0.9.74 (jumped straight back to Autodarts).
  • Installing the online-play voice/data add-on could break the camera library on Debian 12 boards — the trainer then died on startup and the board fell back to Autodarts. This update detects the breakage and repairs it automatically during install. If your board is affected right now, just install this update; nothing else to do.
0.9.742026-08-20 18:30 UTC
New mode: Finishing 50.
  • A checkout ladder: start on 50, three darts to take it out on a double. Check it and the next number is +10; miss and it is −1. The game ends after 25 rounds, above 170, or when the next number is a bogey (159/162/163/165/166/168/169) — checking 149 ends you on 159, by design. Your score is the number you end on — its own leaderboard, separate from Checkout 121. (Björn’s request, ported from My Dart Training.)
0.9.732026-08-20 17:52 UTC
Online-match darts show on dart-room.com as they land.
  • Each dart is sent to the match page when it hits, so Correct last dart appears from dart 1 — you can fix it before you pull. The computer’s visit no longer flashes that strip.
  • The live Ø on the tablet is the same engine average dart-room.com shows, not a remaining/darts guess.
0.9.722026-08-20 15:50 UTC
0.9.71 never left CI — this is that build, fixed.
  • The new Treble 20 · until mode was missing its stats card registration, which failed the pipeline before anything was packaged. Everything listed under 0.9.71 ships here.
0.9.712026-08-20 15:22 UTC
Five things Björn asked for at the oche.
  • Checkout Routes now shades the slots with the route (D20 · D10 · D5), not the current double three times — and you can type your own routes in the setup (D16,D8,D4; D20,D10,D5). Custom routes keep their own leaderboard; the fixed-route board is untouched.
  • Treble 20 · until: a new mode — throw at T20 until you have hit it 1 / 3 / 5 / 10 times, fewest darts wins. Its own leaderboard, separate from the 30-dart test.
  • Cricket no-score (and cut-throat) keep the round and dart count on screen — fewest rounds is the whole point.
  • Checkout 121 shows the number you are finishing (“out 42”, then “40 left”) under the score, not only the suggested route.
0.9.702026-08-20 14:23 UTC
Online-match boards can join the live data channel.
  • When dart-room.com seats this board, it can join the match’s LiveKit room (no extra audio), answer review RPCs from a logged-in player on that seat, and publish the held visit. The review panel on the match page is not in this build — last-dart correction on the site still works. Needs the livekit package (installed on upgrade when the Pi has internet); without it the board stays on the poll floor and does not advertise the capability.
0.9.692026-08-20 13:00 UTC
The in-game buttons no longer peek out under the New-game list.
  • On Android tablets (Brave/Chrome), swiping up at the bottom of the game list pulled a strip of the in-game buttons (Leaderboard, Cameras, Feedback, New game) into view under the navigation bar. Every full-screen page — the game list, tournaments, leaderboards, settings, cameras — now covers the whole screen exactly, however the browser resizes itself.
0.9.682026-08-20 10:29 UTC
No new buttons — plumbing for online-match corrections.
  • The board can receive a live-data token from dart-room.com when a match is assigned, but it does not advertise that it can answer remote review until a real connection is up. The review panel on the match page is not in this build.
0.9.672026-08-20 00:09 UTC
The edge glow turns green when it is time to throw.
  • After you pulled the darts, the screen-edge glow stayed yellow until the first dart of the next visit, even though the LED ring was already green. It now switches with the ring: yellow to pull, green to throw.
  • New game turns the glow off with the LED ring, instead of leaving the last visit’s colour sitting on the mode picker.
0.9.662026-08-19 19:18 UTC
The edge glow no longer gets stuck.
  • On some tablets the screen-edge glow kept its old colour (stuck on green while the LED ring already showed yellow) until you happened to touch the screen. The glow now repaints reliably on every phase change, in step with the LED ring.
0.9.652026-08-19 17:06 UTC
We have a name: OpenCoreDarts.
  • The product is OpenCoreDarts — this app is OCD Trainer, tournaments are OCD Tournaments, and the short form on your home-screen icon is OC-Darts. Nothing changes in how anything works; the tab, icon and pages just say who they are.
  • The board-switch page got the same look as the app — and the new name.
0.9.642026-08-19 15:46 UTC
The screen edge now glows like the LED ring.
  • A soft glow around the screen edge mirrors the room’s LED colours: green — throw · yellow — darts down, pull or confirm · red — bust · violet — leg or game won. One glance from the oche answers “is it ready?” without reading the status line.
  • Don’t want it? Settings → Edge glow → Off.
0.9.632026-08-18 23:16 UTC
Shorter scores, a split status line, and each player’s average.
  • The left of the status box is a short verb (THROW 1, PULL, OK?). The right holds the sentence, so they no longer say the same thing twice.
  • A miss is M11, a bounce-out is BO, the bull is 50.
  • Two-player 501 cards show each player’s Ø under their remaining.
0.9.622026-08-18 21:59 UTC
Resume keeps both players — and the status line can hold a full sentence.
  • A two-player 501 no longer comes back as a solo game after a restart. Both scores and whose turn it is are restored.
  • The status box uses a slightly smaller font and up to three lines, so “game resumed — from last confirmed visit” is no longer cut off.
0.9.612026-08-18 21:36 UTC
The score box is just numbers now — and the lower buttons no longer sit on top of each other.
  • Remaining, this visit, and average share the score box: 435, −66, Ø60. No more “remaini…” or “this vi…” cut off mid-word. Dart slots are one size, the biggest that still fits.
  • An online match uses the same language on the two player cards — no Home / Away / legs captions.
  • The compact rows under Confirm / Clear keep a gap instead of overlapping, in both orientations.
0.9.602026-08-18 19:50 UTC
Dart numbers you can read from the oche — and Repeat no longer freezes the tablet.
  • The three dart slots now fill with a big number. The word “suggested” is gone — the yellow dashed box already says that.
  • The score box is a short 6 pt / Rd 5 instead of a caption that got cut off mid-word.
  • The lower two rows of buttons (Bounce / Detect / Leaderboard / New game) sit half as tall, so the dart slots and Confirm / Clear get the space. In landscape, the lower four rows do the same.
  • After Repeat (same game), thrown darts show on the tablet again. The board was already scoring — the lights flashed — but the screen stayed on an empty visit until you reloaded.
0.9.592026-08-18 13:55 UTC
No more phantom first dart after a player change — and picking a model now actually takes effect.
  • When the darts are pulled and the light changes to the next player's colour, the board no longer mistakes that colour change for a dart. A phantom first dart — usually scored as a MISS, and always for the same player — was appearing about two seconds after every pull.
  • The board now waits a moment before switching the player colour, and takes a fresh look at the empty board afterwards, so the rest of that turn is judged against the light it is actually played under.
  • Choosing a different model in Settings now applies before your next game starts, instead of quietly waiting until the game was over. If it cannot be fetched, the game still starts and tells you which model you are really playing on.
0.9.582026-08-18 00:10 UTC
A dart thrown at normal pace after a "nothing landed" blip is detected — no Detect now needed.
  • When the cameras notice movement but find no new dart (a wobble, the light changing), the board no longer waits a full second before it will look again. A real dart landing right after such a blip used to be missed until you pressed Detect now; it now scores on its own.
  • The wait after a real dart is unchanged — no double-counting.
0.9.572026-08-17 22:49 UTC
The whole screen works for you now — in both orientations.
  • The board takes the most room it can, and the menu fills everything left over — portrait and landscape. Buttons grow into the space instead of leaving it empty; the dart slots and status bar sit a third taller than the buttons.
  • Button labels appear when there is room and step down or drop to just the icon when there isn't — text can no longer spill out of a button anywhere.
  • Cricket: whose turn it is became unmissable — a green ring around the whole row, the waiting players fade to see-through, and the table sits square at the bottom.
0.9.562026-08-17 22:04 UTC
Landscape uses the whole screen properly.
  • The board is now as big as the screen allows, and the menu column takes all the width the board leaves — no more dead space either side of the board.
  • The menu buttons stack in one compact column instead of stretching into comically wide bars. Portrait keeps its two-column layout.
  • The three dart slots use the full row width in match games — the empty gap on the right (where the score box sits in practice modes) is gone.
0.9.552026-08-17 21:20 UTC
Undo is gone — and a full visit cannot grow a fourth dart.
  • The Undo button is removed. To take a dart off the card, pick its slot and press Phantom. Bounce and Clear visit are unchanged.
  • If all three slots are already filled, ➕ Dart now tells you to phantom the miss-detection first. Adding used to shove the other three into slots 2–3–4; that extra dart could steal the next player’s turn or skip a number in Around the World.
  • Every control row is two halves and always filled: Bounce / Phantom / ➕ sit beside Detect, Leaderboard / Cameras / Feedback beside New game. A lone Confirm or Revert pull stretches the full row instead of leaving a hole.
  • A dart the model is unsure about shows a yellow ⚠ — not a long “check me” line that squeezed the score.
  • Feedback screenshots now capture the whole landscape screen, including the right-hand menu (they used to cut off at 900px).
0.9.542026-08-17 19:45 UTC
The three dart fields are readable again.
  • The “dart 1 / 2 / 3” captions are gone — their position already says which dart is which — and the score in each field is now much bigger. It is one size that never changes between darts, so the row cannot jump mid-visit.
  • In target games the ✓ / ✗ moved to the corner of the field, in green or red, so it no longer squeezes the score.
  • “See results” and “Revert pull” share one row at the end of a game.
0.9.532026-08-17 18:43 UTC
The controls take less of the screen, so the board gets more.
  • Every control row shares one compact height — including “Pull the darts” and the dart slots. Online scores sit against the visit chrome.
  • Cameras and Feedback sit on the Leaderboard row (same compact size), so the menu is one row shorter.
  • “See results” only appears when the game is over, in the Confirm-visit slot — it is not a permanent extra row. Reopening a finished game shows it too.
0.9.522026-08-13 23:10 UTC
The board now shares dart-room.com's navy-and-teal look.
  • New boards open in the dart-room theme (Settings still has Dark and Light). Online matches paint from the same chip colours as the website scoreboard.
0.9.512026-08-13 19:50 UTC
The status line is properly centred again, and long messages cut off cleanly.
  • Follow-up to 0.9.50: the message cell had lost its centring and a sliver of a third line could peek through. The strip is now exactly two lines tall, whatever the message, and screenshots of it are part of the tests.
0.9.502026-08-13 19:26 UTC
Pulling your darts can no longer invent a bounce-out.
  • No more phantom "BOUNCE" as dart 1. For 2.5 seconds after a pull, the board knows any impact it sees is your hand leaving, not a dart falling — it will neither record nor suggest a bounce in that window. Real bounce-outs (which happen seconds later) are untouched. Tunable: DT_BOUNCE_TAKEOUT_LOCKOUT_S.
  • The status line keeps one steady height instead of growing with long messages, and dart values size themselves to fit — "BOUNCE" no longer bursts its box. Suggested targets now look like suggestions, not thrown darts.
0.9.492026-08-13 18:37 UTC
Timing is tunable per board now.
  • The waits and windows around pulls, celebrations and flashes (nine of them) can be adjusted in the board's config file — no update needed. Defaults are unchanged, and the celebration guard follows the rainbow length automatically.
0.9.482026-08-13 18:25 UTC
Half the celebration, twice the pace.
  • The leg-won rainbow is now 2.5 seconds (was 5), and the quiet window that follows it shrank to match — the next leg is throwable roughly 3 seconds sooner. All the phantom-bounce protection stays.
0.9.472026-08-13 17:39 UTC
The board never learns "empty" while the celebration rainbow is on — and updates wait until you finish playing.
  • No more bad first visits after a leg. The empty-board snapshot taken at leg end / new game now waits for the lights to settle, the same fix that already cured online-match seating.
  • The daily auto-update no longer restarts the board mid-game. It waits for the game (and any online match) to finish, up to 45 minutes, then updates anyway.
  • An ended online match releases the board by itself now, and groundwork: the camera-drift watcher can see real throws (still off by default).
0.9.462026-08-13 17:29 UTC
The side panel uses the tablet — it is no longer a skinny strip with empty space under it.
  • In landscape the controls column grows with the screen (up to a comfortable cap) and the action buttons sit at the bottom, where your thumb is.
  • In portrait the dart slots and the status bar share a row, so the chrome is denser and the board keeps more of the height.
0.9.452026-08-13 16:57 UTC
A wobble is no longer announced as a bounce — and an open tab notices a board update.
  • A dart that just rattled another dart (no new mark on the board) no longer flashes the bounce hint. The board still ignores it; it just stops crying wolf.
  • When an opponent joins — or the match ends — the board's online strip updates immediately, instead of staying on "waiting for opponent" or "Opponent's throw — wait".
  • The game-over card says who won once, not twice.
  • If the board software updates under an open tab mid-match, a banner asks you to tap to reload. It will not yank the page out from under a live visit.
0.9.442026-08-13 15:12 UTC
Joining an online match no longer confuses detection — and the board keeps better notes.
  • Online match seating waits for the lights. When your board is seated from dart-room.com, it now learns what an empty board looks like only after the LED colour change settles — previously that snapshot could be taken mid-change, and the first visits of the match detected badly. (Also active in 0.9.43, now with its own note.)
  • The board's internal diagnostics now record leg boundaries and a colour-based lighting check — invisible during play, but they let us answer "was that miss the lights' fault?" from the logs instead of guessing.
0.9.432026-08-13 14:14 UTC
The "Leg won" banner shows once — and the board tells you when cameras run slow.
  • In a multi-leg match, the purple leg-won toast could replay with every dart of the following leg. It now shows exactly once per leg win.
  • Slow cameras are no longer silent. If every camera drops well below full speed for a sustained stretch, the board now says so on screen instead of quietly detecting badly. A camera that falls behind its peers is also fixed automatically now (a safe re-open, between visits only — previously opt-in).
0.9.422026-08-13 12:12 UTC
Online matches now show the full scoreboard right at the board.
  • Remaining, legs and whose turn it is — on the tablet. When your board is seated in a dart-room.com match, the same scoreboard the website shows is now painted at the board too. No more glancing at a second screen mid-leg; the board still detects and reviews your darts exactly as before.
0.9.412026-08-13 11:50 UTC
Groundwork release — nothing changes at the board.
  • The internal restructuring of the detection engine is complete (same behaviour throughout — this makes future fixes faster and safer to ship).
0.9.402026-08-13 11:19 UTC
Groundwork release — nothing changes at the board.
  • More internal restructuring (bull-off and deciding-leg handling; same behaviour, easier to maintain).
0.9.392026-08-13 11:04 UTC
Groundwork release — nothing changes at the board.
  • Internal restructuring of the scoring engine (same behaviour, easier to maintain), and an early camera-drift watcher that is off by default — it will later be able to notice a camera that moved and suggest recalibrating.
0.9.382026-08-13 10:37 UTC
A failed calibration now tells you exactly why, camera by camera.
  • No more guessing after "calibration rejected". Each camera that failed says what actually went wrong — fit off, wires hidden, or the ring sitting off the metal — and what to do about it. If a camera's picture is fine but some wires are covered, it now explains that the other cameras can't fill those in.
0.9.372026-08-13 09:43 UTC
A fully offline installer, and a sturdier install on older systems.
  • New: dart-trainer-offline install package. Everything needed — detection model included — ships inside the package, so a board can be set up on a network with no internet at all.
  • The installer double-checks its own web stack. On older systems (Debian 12) it now verifies every piece it depends on, not just one — a partial upgrade can no longer leave the board unable to start.
0.9.362026-08-13 08:18 UTC
The status endpoint can now tell a truly stuck board from a quiet one, and correction photos match what the camera saw.
  • A frozen detector is visible now. The /status endpoint shows how long ago detection last checked the cameras — if that number climbs while you're throwing, the board is stuck (restart it), not just waiting for darts.
  • Refreshing a correction photo no longer catches the green/red verdict flash. The photo is taken from before the flash, so the dart is lit the way the cameras actually scored it.
0.9.352026-08-13 00:21 UTC
Fewer phantom bounce-outs, and red Clear can rescue a board that keeps reading “not empty”.
  • No more phantom “bounce” right after a takeout. The leftover motion as darts leave the board (a big negative change in what’s on the board) is no longer mistaken for a bounce-out.
  • No phantom bounce when a leg or game ends. The whole-strip celebration rainbow snapping back to your player colour used to read as an impact on an empty board; it is ignored for a few seconds after the celebration now.
  • Red Clear re-learns a drifted empty board. If the lighting has shifted so the board keeps reading “not empty” while it is actually still and empty, pressing Clear now re-photographs the empty view and recovers scoring — no recalibration needed.
  • A pull that races the takeout can no longer slip a stray motion cue through.
0.9.342026-08-12 13:25 UTC
Rematch scores cleanly, finished games stay saved, tournament strip stays out of the way.
  • After a finished leg, starting another no longer invents phantom darts. If darts are still in the board when you hit New game / 🔁, the empty-board picture is kept honest — pull first, then throw. Detect now also refuses a fourth dart when three are already on the card (and bull-off bounce re-throws still work).
  • New game after GAME OVER no longer “abandons” a finished match. Scores and stats stay saved; you only get the abandon confirm when a game is still in progress.
  • Tournament purple strip only before the first dart of each leg. It shows who throws first at match start and between legs, then leaves as soon as a dart is detected — and stays gone for the rest of that leg.
0.9.332026-08-11 07:52 UTC
Sign in to dart-room.com with a passkey (Face ID / fingerprint) or a Nostr signer app. Your player ID and 12 words work exactly as before — they stay the recovery key. Nothing changes at the board.
0.9.322026-08-08 01:02 UTC
Start an online match from dart-room.com — the board joins itself. Turn on Settings → dart-room.com → allow takeover once, and from then on you can set up a remote match on the website and this board walks into it: no codes, nothing to type at the oche. It stays off until you turn it on, and it always refuses while a local game or tournament is running.
0.9.312026-08-07 22:33 UTC
Online match: board is detection-only. When this board is joined to a dart-room.com 501 match, a banner points you to the match page for remaining, legs and throws. Free-play start is suppressed while bound — play the game UI on the site; this tablet still detects and can correct the visit.
0.9.302026-08-07 20:57 UTC
Losing a game no longer wins the leaderboard.
  • Around the Clock. The race ends when the first player gets all the way round to the bull. Whoever did not finish no longer goes on the leaderboard at all — their smaller dart count was ranking them above the player who actually won.
  • Cricket, no-score. Same fix, plus the final table now puts the player who closed all seven on top. It was showing 0/7 in first place, because the game ends mid-visit and the loser has thrown fewer darts.
  • Shanghai really is an instant win now. Hit the single, double and triple of the number in one round and you win on the spot, even from behind — until now your opponent played on and simply out-scored your short game. It gets its own leaderboard: fewest darts to a Shanghai (3 is perfect). The points board keeps the games played to the last round.
0.9.292026-08-07 18:50 UTC
Clear visit keeps training pairs honest. Follow-up to 0.9.27: clear starts a fresh on-disk round (so the empty reference uploaded with each dart is the one detection actually used), refuses outside batch review, and no longer treats “board looked still” as “board is empty” when baselining a new game.
0.9.282026-08-07 18:44 UTC
Delete an open tournament from the board. Stuck with a leftover tournament and no way out? Open it → ⋯ → Delete tournament…. It leaves the open list (shown as deleted). A live match is voided first so the board is free again. Needed before a player rename/migration when an old tournament was still hanging around.
0.9.272026-08-07 18:17 UTC
Slow throwers, phantom dart 1, and a stuck reset.
  • Clear visit stays on the current player. The red button is now Clear visit → dart 1: it throws away the held darts and restarts this thrower’s visit — it no longer advances the turn to the next (or first) player.
  • The board waits for a clean empty picture. On new game and on clear, if a hand or body is still in frame it waits about a second and looks again (a few tries) before baselining. That stops inventing a phantom first dart every round when people approach slowly or stand near the board.
  • Auto-detect could freeze mid-game while Detect still worked — a rare path in the motion thread deadlocked on itself. Fixed; scoring should keep running without a restart.
0.9.262026-08-06 23:03 UTC
Player stats by mode, over your last 5 / 10 / 100. Pick yourself on the board stats screen, pick a game mode, and see the numbers that matter for that mode — average, first 9, checkout rate, which doubles you actually hit, where your darts group around the treble for 501 — with an arrow against the previous equal window. Works with the network unplugged; unfinished games are left out and the pane says so.
0.9.252026-08-06 22:55 UTC
Resume after a restart, abandon confirm, cameras UX, motion fix.
  • Games survive a trainer restart. Unfinished free-play matches stay in the database; the start screen offers Resume (same scores, same run) or Discard. Continues from the last confirmed visit — darts still under review are not restored.
  • New game asks first. Mid-match New game / 🔁 shows a modal: abandon this game? Yes / Cancel — no more accidental wipe.
  • Verify landmarks is a proper card above a sticky action bar, feeds labelled cam0 / cam1 / cam2, and 💬 Feedback ships all three overlays plus drift/verify data.
  • After calibration you stay on the result page (confirm orientation + feedback); orientation confirm no longer auto-closes after half a second.
  • Auto-detect could die mid-game while Detect now still worked — a motion-thread race (`deque mutated during iteration`). Fixed and hardened so one bad tick cannot kill auto forever.
0.9.242026-08-06 20:53 UTC
Bermuda shows the right target while your darts are in.
  • The board no longer lights the wrong ring between your last dart and the pull. Going into a double or treble round it would highlight the double of the old number — D14 while the board still said 14 — until you pulled. In two-player that is what your opponent walked up to.
  • The two bull rounds now say what they want and what they pay. ANY BULL (25) takes either ring and pays 25 for both — the red centre does not pay 50 in that round — and BULLSEYE (50) takes the centre only. The board also stopped skipping to the second bull round a visit early.
0.9.232026-08-06 19:46 UTC
Checking out wins the board.
  • A player who finished can no longer be placed below one who did not. In a shared game the table only compared darts thrown, so someone still sitting on a big score could be ranked above a player who had actually checked out. Anyone who finished is now listed above anyone still on a score, and the finishers are ranked among themselves as before.

The opponent still throwing after your checkout is deliberate — in a shared game everyone gets the same number of visits before it ends.

0.9.222026-08-06 18:52 UTC
Fewer phantom bounce-outs, quicker pulls, a visible hit.
  • A settle wobble no longer records a bounce-out. A dart that stuck and then shivered could score itself as a bounce while it was still in the board. Only a clear hit-and-drop is recorded automatically now; a softer impact still just offers the hint.
  • Pulling darts registers faster and more reliably. The board waits for your arm to actually leave, then confirms on a fresh look — it no longer sat out the full three-second wait every time.
  • The board re-learns its empty view when the light drifts. If several pulls in a row leave it convinced something is still in the board, it quietly re-photographs an empty board instead of second-guessing every visit for the rest of the session.
  • The LED flashes white on a good hit instead of green on green, which looked like the strip had died. Misses, bounces and busts stay red.
  • Calibration results scroll into view. The card could land under the button bar, so a finished calibrate looked like nothing had happened.
0.9.212026-08-05 23:50 UTC
Verify calibration landmarks. Cameras pane → 📍 Verify landmarks re-detects bull and wire∩ring points on an empty board, scores them through the live map, and checks the three cameras agree — so you can tell a good fit from a pretty overlay. New calibrations also store those points for later.
0.9.202026-08-05 23:50 UTC
Calibrate on the new-game screen looks first. If the board is already calibrated, that button opens the camera view (same as in-game 📷 Cameras) instead of re-solving immediately — tap Recalibrate only after a bump or rotation. A fresh install with no calibration still runs the wizard.
0.9.192026-08-05 20:37 UTC
Bull-off and cricket fixes, and a board that would not switch.
  • Bull-off is one dart each, then a pull. It no longer asks for a third dart, so the throwing order stops looking scrambled — and it now says why when it wants another round.
  • Darts thrown after the bull is decided no longer count. They could land in the 501, which opened a match at 476.
  • A tie throws again until someone wins the bull. The old five-round limit silently decided the match on a coin flip.
  • Cricket marks are a proper table: / for one, ✕ for two, ⊗ for closed, blank for none, bigger symbols, ruled cells — and the numbers line up over their own column.
  • The cricket player marker waits for the pull instead of moving on after the third dart.
  • The cricket end screen shows each player their own score (it showed the winner's to everyone), adds a hit rate, and no longer claims "higher is better" beside the dart count.
  • Ranked Elo appears when it syncs. It could sit on "syncing…" for good, even after the rating had arrived.
  • After a bull-off the board asks for the darts rather than inviting dart 1 over a full board.
  • Fixes a 0.9.15 regression: on some boards the switcher flipped to the trainer and straight back to autodarts. The trainer failed to start against older versions of one of its libraries — from a change meant only to speed up restarts. It starts either way now.
0.9.182026-08-05 18:33 UTC
Board stats layout cleaned up. Models moved to the bottom; game modes show finished vs abandoned as separate columns (no more cryptic 64/80); player rows use a proper Games header; table columns line up. Overview also shows overall acceptance and how many darts were corrected.
0.9.172026-08-05 15:30 UTC
Board stats can scroll from the top again. The first rows (totals, model ranking) were cut off and unreachable when the list was tall. Same fix as the start screen: the page scrolls from the top, not the middle.
0.9.162026-08-05 15:30 UTC
The long motion-sampling test now keeps its data across reboots. Evidence for that A/B is written to the SD card (not only the ramdisk), and a backlog of decision-log events is no longer dropped when shipping to the mothership. Harvest any logs still on the ramdisk at startup.
0.9.152026-08-05 14:59 UTC
Restarts and upgrades no longer hang for 90 seconds. Stopping the service (and apt upgrade) used to wait until systemd gave up and force-killed the process. Cause: the LED bridge keeps a live event stream open, and the server waited forever for it to close. Shutdown now finishes in a couple of seconds.
0.9.142026-08-05 14:33 UTC
Board stats — the whole board first, then pick a player. The old “my stats” link only showed the currently selected user. It now opens board-wide stats from this rig: darts and games by mode, model acceptance rankings, and everyone who has played here. Use the selector (or tap a name) for personal heatmap and profile stats.
  • Around the World highlight holds on the current number until you pull — it no longer jumps when the third dart is detected.
  • Quick new game no longer leaves the tablet “disconnected” until you reload (throws still scored; the screen just stopped updating).
  • Groups: clearer labels — the optional name is the group’s name on this board, not your player name; the hash is de-emphasised.
0.9.132026-08-03 22:12 UTC
Who throws first is now decided properly. Until now the first name in the list always threw first — in every leg 1 and every decider, on the board and in tournaments. Choose in Settings: random, or a real bull-off (nearest dart, or official zones) with a re-throw when it is too close to call. A level decider gets a fresh bull-off, just like the pros.
0.9.122026-08-03 20:13 UTC
The match report now sits alongside your usual stats, not instead of them. 0.9.11 hid the player tabs, model card and dart board after a match — they are back, with the match summary above them. New: the board can show one leg at a time or the whole match.
0.9.112026-08-03 19:07 UTC
Full match stats. When a legs match ends, the summary shows the whole story side-by-side: averages, first 9, checkout rate, high finish, fastest leg, 180s and big visits — plus your Elo change once it has synced.
0.9.102026-08-03 16:08 UTC
No more scrambled rounds after a quick pull. A pull that doesn't clearly show an empty board now gets a second look before the board moves on. Status lights stopped flashing mid-throw and run at half brightness. "Make it ranked" says what it does — and needs both players signed in. Dart numbers on the board are more see-through, and the settings gear now opens on the setup screen too.
0.9.92026-08-03 13:07 UTC
Pick a colour per player. Tap the swatch next to a name in game setup — your colour shows on the multiplayer scoreboard, and with an LED ring one half holds your colour while the other half follows the board.
0.9.82026-08-02 21:46 UTC
Groundwork for even faster scoring. The board can now work out its answer while the dart is still settling; this build measures how often that early answer matches the final one before we switch it on.
0.9.72026-08-02 20:48 UTC
Bust shows red the moment the dart lands. The busting dart itself flashes red now — not a late red after you pull your darts.
0.9.62026-08-02 20:24 UTC
The score card reacts as fast as the lights. The tablet now gets a push the instant a dart is scored instead of asking every 0.4s. Target games also got honest lights: in Around the Clock & friends, a dart on the wrong segment flashes red, and the ring settles to the right color right after you pull.
0.9.52026-08-02 19:39 UTC
Scoring is about half a second faster. A dart at rest is now scored — and your lights react — in roughly half a second instead of a full one. The camera pipeline stopped stalling itself after every dart.
0.9.42026-08-02 17:41 UTC
Lights react in realtime. The ring now follows your throw as it happens: white the moment you release, yellow when the dart lands, green or red the instant it's scored, yellow while waiting for the pull, green when you're clear to throw. Scoring itself also got ~0.2s faster.
0.9.32026-08-02 16:04 UTC
New: your lights can react to your darts. With an LED ring (WLED shim or any WLED light) and the new trainer-wled add-on: green when you hit your target, red on a miss or bust, a rainbow when you win. The board also now broadcasts live game events at /events for add-ons to build on.
0.9.22026-08-02 12:56 UTC
New: Themes — Settings → Theme.
  • Three looks: Dark (what you have today — still the default, nothing changes until you pick), Dart-room (dart-room.com's navy + teal), and Light.
  • Your choice is remembered on this device and applies everywhere — the game, Tournaments, this page, and Game modes. The board diagram keeps its real colours in every theme.
0.9.12026-08-02 12:41 UTC
Two-player polish: the turn stays with the thrower until the darts are pulled.
  • The green highlight and "…to throw" no longer jump to your opponent while your darts are still in the board — they switch when you pull, like a real chalker would.
  • The thrower's card now shows the visit total in brackets before the score left — (26) 475 — so the number you announce is right where you look.
0.9.02026-08-01 17:20 UTC
New: Tournaments — run a knockout, round robin, or double elimination night on your board.
  • The app is now OCD with two views: Trainer (everything you know, unchanged) and Tournaments. The switch lives on the home screens and stays out of your way during play.
  • Add players (friends without an account welcome), draw, and play — matches are the same 501 double-out you already play, with a bracket that advances itself and standings with W/L.
  • The tournament survives restarts. Power cut mid-match? Resume and every confirmed dart is still there — you re-throw at most the unconfirmed visit. A match that went wrong can be voided and replayed without touching the rest of the bracket.
  • Matches count for ranking automatically when both players have a player ID and the match is Best of 3 or longer — and the app now tells you why a match is friendly instead of just saying so.
  • The winner gets the celebration they earned.

0.8

0.8.22026-08-01 01:10 UTC
The board can now quietly test itself for missed darts — off unless switched on.
  • A long-running background comparison of two ways of watching for a dart, so we can find out which one misses fewer over months of normal play rather than guessing from one evening.
  • You will never see which one is running, and it changes nothing about how darts are scored — only how often the cameras are checked.
  • The only thing being counted is how often you had to press + add dart or Detect now.
0.8.12026-08-01 00:02 UTC
Groundwork for catching faint darts — nothing changes on your board yet.
  • Each camera can now check for movement on every frame instead of every other one. Half of what the cameras see was being skipped.
  • It is off by default and switched on for testing on one board first, because looking more often changes how big each reading is — the sensitivity has to be re-measured on a real board before anyone else gets it.
  • If you are not testing it, this release behaves exactly like 0.8.0.
0.8.02026-07-31 23:32 UTC
Throw at full speed — the board no longer misses your 2nd and 3rd dart.
  • If you threw at normal game rhythm, darts went missing and you had to press Detect now or add them by hand. The faster you played, the worse it got.
  • Cause: the board watched all three cameras, but did the watching inside one camera's workload — so it only ever looked as often as that one camera could keep up, and under game load that fell to about 18 checks a second. Dart 1 was big enough to catch. A dart landing tight next to the last one was not.
  • Now the detector runs on its own clock, 20 times a second, independent of any camera.
  • Measured on a real board, throwing faster than the session that failed: every visit caught all three darts (was 9 of 11), and darts needing a manual rescue fell from 15% to 1.6%.
  • Nothing to change in your settings — install and throw.

0.7

0.7.672026-07-31 14:20 UTC
Match501 now shows your real checkout % — it read 0.0% for every match ever played.
  • The dart that won a leg was not being counted as a checkout, so the recap tile was always 0.0% no matter how many legs you took out.
  • The recap map also stops drawing your winning double as a missed double.
  • Solo x01 was never affected; this only ever hit match play. Reported from the board on 2026-07-30.
0.7.662026-07-31 00:43 UTC
Bounce-outs are recorded again when a dart hits and leaves — including mid-visit, not only on an empty board.
  • A bounce goes on the card at 0 points while you finish the 3-dart set; wrong? fix that slot before Confirm visit.
  • What broke: after a 2026-07-15 camera fix, mid-visit bounces were scored as normal darts.
  • What fixed it: if something hit hard and the board did not gain a dart, it is written as BOUNCE automatically (same idea as before, new measurement).
0.7.652026-07-30 21:26 UTC
The board now records which software version and which start it was running when it scored — so an A/B can tell a real improvement from a coincidence.
  • Nothing changes about how you play or score. This only labels the data the board already sends.
  • Why: a test on 2026-07-30 looked like one model beat another, but the board had been updated seven times mid-test — and there was no way to see that from the results.
0.7.642026-07-30 18:38 UTC
UX leftovers: no stale dispute bar after undo; multiplayer Confirm doesn’t skip a player; resume keeps a bounce after a pull.
  • Undo, remove-dart, and clear-visit drop a stuck “pulled your darts?” prompt that used to reappear every tick.
  • Confirm after Revert pull on an empty board no longer previews the player-after-next in multiplayer.
  • A bounce recorded after a pull is still on the card if you Revert pull.
  • Confirm visit no longer overwrites a live dispute prompt with “pull the darts”.
0.7.632026-07-30 18:28 UTC
Portrait: menu sticks to the bottom; long drags no longer flash offline; no Save-image popup on the board.
  • In portrait the control panel pins to the bottom of the screen so the board can use the leftover height (zoom room).
  • Dragging the crosshair for several seconds no longer flashes the red “not talking to the board” bar — contact is still counted while a gesture is in progress.
  • A still long-press on the board no longer opens the browser’s Save / Open image menu.
0.7.622026-07-30 18:06 UTC
Leg wins and game-over messages show up even when the board scored without you watching. Finishes and celebrations used to ride only on the poll that scored the dart. The board now keeps those announcements for the next catch-up, so a locked tablet still gets See results, leg toasts, and bounce hints when it wakes.
0.7.612026-07-30 17:59 UTC
Game over shows See results again. When the board finishes a game on its own (while the tablet was only listening), the stats button was never un-hidden — the finishing event never reached the screen. Ending a game now always offers the recap link.
0.7.602026-07-30 17:44 UTC
Crosshair stays put while you drag a correction. Quiet polls no longer pretend every tick is a new dart (that zoomed you back out and snapped the crosshair to the old bed while still saving your drag on timeout). Catch-up only when the board actually moved — and never while you are mid-edit.
0.7.582026-07-30 16:04 UTC
The board keeps scoring even if your tablet sleeps, locks or drops off WiFi. Until now the app on your tablet was what asked the board to look at each dart — so if the screen went off or the connection dropped mid-visit, those darts were simply never scored. The board now does its own scoring and your tablet just catches up when it comes back.
0.7.572026-07-30 15:54 UTC
The board now tells you when your tablet has lost it. If the connection drops, a red bar appears across the top instead of the game quietly freezing — and when you come back to the screen it refreshes straight away rather than showing you a stale board.
0.7.562026-07-30 14:48 UTC
See what each camera sees — with the calibration drawn on it.
  • The utility-row button is now 📷 Cameras (three live feeds with the stored board rings painted on). If the rings still sit on the metal, that camera is fine; if they have slid off, it moved.
  • 🧪 Check drift and 🎯 Recalibrate live on the same screen — calibration no longer starts cold from the utility row (the setup-pane button still goes straight to the wizard).
  • The "board is X° off" status warning and the wedged-dispute "camera nudged?" prompt both point you at Cameras so you can look before you recalibrate.
0.7.552026-07-30 14:18 UTC
Pick any player on the new-game screen — one tap. Everyone on this board now shows as a row of names under the player boxes; tap a name to put it in the box you last touched. Before, a solo game offered only the player already signed in, so switching to someone else meant deleting the name by hand.
0.7.542026-07-30 14:02 UTC
The game-over screen stays put again. During a blind model test the board switched test arms a moment after your last pull, which threw you back to the menu instead of waiting on your stats. Arms now switch only when you actually start the next game — you'll never see it happen.
0.7.532026-07-30 13:31 UTC
A stuck "pulled your darts?" prompt can no longer eat your throws — and the button it asks for now exists.
  • 🖐 While the board is unsure about a pull, the green button becomes Pulled — re-sync: pull all darts, tap it, and the board re-learns what "empty" looks like (this also heals a slightly nudged camera, which is what caused the stuck prompts).
  • If the board stays confused for a few minutes it now says so — "board looks changed — camera nudged?" — instead of quietly ignoring your darts.
0.7.522026-07-29 23:30 UTC
Your board can take part in blind model tests automatically. You play as normal; Settings shows a small note while a test is running.
0.7.512026-07-29 18:03 UTC
The board runs much cooler — camera handling was doing 5× more work than needed.
  • 🧊 The experimental "composite" motion check is now off unless you opt in — on warm boards it could slow the cameras mid-game and miss darts. Detection itself is unchanged.
  • Under the hood: a new opt-in capture mode (being field-tested on one board first) cuts the camera CPU load from ~46% to ~9% of a core, leaving more headroom on hot days.
0.7.502026-07-29 17:14 UTC
Review-screen fixes: inserting a missed dart, the next-target marker, and the "did you pull?" prompt.
  • ➕ Dart now really inserts at the slot you picked — in every correction style. The darts after it shift down instead of one being overwritten.
  • After confirming a visit, the target marker now points at the number you throw at next — it no longer jumps back to the one you just finished.
  • Going back to fix a confirmed visit no longer confuses the board about your next pull — and if the board is ever unsure whether you pulled, it asks visibly and stops waiting after a minute instead of silently ignoring your darts.
  • Feedback screenshots now include the board picture instead of a broken-image icon.
  • Under the hood: the vision runtime is now version-pinned, so every board runs the exact same (slightly faster) engine.
0.7.492026-07-29 11:49 UTC
Pulling your darts now waits a beat for your pending fix to save first.
  • Dragging the crosshair to fix a dart, then pulling before it auto-saved, used to silently throw the fix away — the dart recorded at the board's original guess instead of where you put it.
  • Now, if you're still mid-correction when you pull, the board gives your fix a moment to save before it processes the pull — so your correction lands, not the model's original guess.
  • A correction made right after your last dart ends the game now reaches the central record too, so what training sees matches what you fixed.
0.7.482026-07-29 10:51 UTC
One tap to run it back.
  • The New game button now shares its spot with a new 🔁 button: tap it and the board immediately starts another game with the same players and the same settings as your last one — no picker, no re-entering names.
  • Nothing else moved. New game is exactly where it was, just a third narrower to make room.
0.7.472026-07-29 08:54 UTC
Every future model has to prove itself on real darts before it reaches your board.
  • Behind the scenes, this release builds a full verification system for the board's brain: every new model is now replayed against thousands of real recorded throws — including the ones you corrected — before anyone can publish it, and promoting one to all boards will ask for evidence from real A/B play sessions.
  • Every training run now keeps its raw per-throw results forever, so when a measurement method improves, old results can be re-checked instead of thrown away. No more "trust us, it was better".
  • Nothing about scoring or the app changes today — this is the machinery that makes the next model updates trustworthy, and it is why they may arrive a little more slowly and a lot more solidly.
0.7.462026-07-26 12:02 UTC
A dart the board cannot locate is now a miss with no number — never a score at the bull.
  • When a dart flies well past the board the cameras may see almost nothing of it, and the board would then guess the middle: one dart 22cm outside came back as 25. It was inventing a dart that was never there.
  • Now, when the board genuinely does not know where a dart went, it says so — the throw is recorded as a miss with no number, exactly like a bounce-out, and you can tap the real spot if you want it placed.
  • The dart is still always recorded. Nothing is dropped, and nothing invented gets fed back into training.
0.7.452026-07-26 00:16 UTC
The board now records how sure it was about each dart.
  • Two numbers the model already produces — how confident it was, and how strongly it thought the dart had left the board — are now saved with every throw.
  • Nothing about scoring changes. This exists so the "that dart missed the board" decision can be tuned against real darts people actually threw, rather than against a small test set.
0.7.442026-07-25 21:08 UTC
A dart that misses the board is far less likely to be scored as a hit.
  • When a dart lands outside the scoring area, the board used to pull its position back onto the board — so a dart wide of 13 could come back as a double 20. It got this wrong on roughly two out of three real misses.
  • The model already knew the dart had left the board; that opinion just never reached the scoring step. It does now, and a miss keeps the direction it flew, so you get MISS·13 rather than a bare MISS.
  • This needs a model built after this release. On older models the board scores exactly as it did before.
0.7.432026-07-25 15:47 UTC
Camera health now reaches the central server.
  • Each board already reported its camera frame rates, but not what its own camera watchdog concluded — so a camera problem could only really be investigated on a board someone could log into.
  • The heartbeat now carries the verdict for each camera (fine / slow / stuck / no pictures) along with how often it has stalled and how often the board fixed it by itself.
0.7.422026-07-25 12:45 UTC
A camera that stops is now noticed.
  • A camera that stopped delivering pictures entirely kept reporting its last known speed — so a board could quietly be running on two cameras and still look perfectly healthy. Found by unplugging one and watching it report 30 fps for two minutes.
  • The board now judges each camera by when it last actually delivered a picture, reports it as no frames rather than "fine", and can re-acquire it by itself.
0.7.412026-07-25 12:21 UTC
Adding a missed dart now inserts it instead of replacing one.
  • Tapping ➕ Dart and then choosing which dart was missed silently cancelled the add, so the tap moved the dart already in that slot instead of pushing it down — you lost a correctly-detected dart. Choosing the slot is now part of adding, in either order.
  • When a dart has to be added by hand, the whole visit is marked uncertain, not just the added dart: once one dart is missing, which dart each mark belongs to is a guess. Those visits are kept out of the training data — a wrong correction costs us more than a missing one.
0.7.402026-07-25 11:21 UTC
Picking a model no longer looks like it failed.
  • Choosing a version in Settings → Model worked, but the screen then said "registry unreachable — keeping what is installed" and blanked the version list — so it looked like nothing happened, while the download was already running.
  • The board now sends the list back with its confirmation, and the screen keeps the list it already has.
0.7.392026-07-25 02:18 UTC
Follow-up to the highlight fix.
  • When a game ended, the board kept the last target lit instead of clearing it.
  • The training export no longer miscounts the throws it just set aside.
  • A board shuts down a couple of seconds quicker on update.
0.7.382026-07-25 01:20 UTC
The "wait for the pull" highlight fix, now in every round-based game.
  • 0.7.37 fixed Around the World. The same jump happened in Shanghai, Bermuda, Bob's 27 and JDC — the highlighted target moved on your third dart instead of when you pull.
  • All of them now hold the highlight on the number in play until you pull.
  • JDC's doubles leg, where each dart is a different double, correctly still moves every dart.
0.7.372026-07-25 00:35 UTC
Around the World: the highlighted number waits for you to pull.
  • When your three darts were done the highlight jumped straight to your next number — and in a two-player game that meant your opponent saw the wrong number until the darts came out.
  • It now stays on the number in play until you pull, then moves.
  • Under the hood: a board can clear a stuck-at-half-speed camera by itself. Off by default while we trial it.
0.7.362026-07-24 22:27 UTC
The board now notices when a camera drops to half speed.
  • A camera can get stuck delivering frames at about half its normal rate — a known glitch a restart clears, but invisible until now, because the camera still reports its full speed.
  • The board watches for it and flags it in its health info.
  • For now it only notices; it does not act on its own yet. That comes once we have watched it get the call right on real boards.
0.7.352026-07-24 22:00 UTC
A Feedback button on the game-over screen. If a stat on the final screen looks wrong, you can now report it right there — the screenshot that goes with your feedback captures the recap you are looking at, so we see exactly what you saw.
0.7.342026-07-24 21:45 UTC
Fixes the Around the World stats in a 2-player game. The new On-target / Pts-per-number / Best-number stats were computed from the wrong field in multiplayer — they read far too low (a 35-point leg showing "5% on target"). Now correct for both single- and multi-player.
0.7.332026-07-24 21:02 UTC
Adding a player now sticks, and a better Around the World recap.
  • Adding a player only set them as the current name — the board never saved them, so the player list looked unchanged until you played a game with them. New players are now saved immediately and appear right away.
  • Around the World is always 63 darts, so "Darts: 63" and "Goal: higher is better" told you nothing. They are replaced by On target (how often you hit the number), Pts/number (your average over each 3-dart set, out of 9) and your Best number.
0.7.322026-07-24 20:22 UTC
Crosshair, cogwheel, and a dart count on the recap.
  • The first crosshair correction of each game no longer lands in the wrong spot and vanishes when you drag it — it was being placed before the board finished zooming in, which only misfired on the first correction, when the board is busiest. It now waits for the zoom to settle.
  • The settings cogwheel is on the screen you actually start from, not one step deeper.
  • The game-over recap shows how many darts you threw — it was there for unfinished legs but disappeared whenever you checked out on a double.
0.7.312026-07-24 19:31 UTC
You can now see which scoring model your board is using — and choose it.
  • Settings has a new Model section, and Settings is now reachable straight from the New game screen, not just mid-game.
  • By default the board follows the recommended model and updates itself, exactly as before.
  • To try something newer, switch to Manual and pick a version from the list — each shows how accurate it was in testing and how often real players had to correct it.
  • Behind this: a model can be published for people to try without being pushed to every board, which is how a new one gets tested on a real dartboard before anyone else gets it.
  • If your board is offline the section says so and carries on with the model it has.
0.7.302026-07-24 16:29 UTC
Groundwork: the board is starting to notice when it isn't sure.
  • When the scoring model reads a dart it also produces a measure of how confident it was — and on the small number of darts it gets badly wrong, that measure is usually low.
  • The board now records that, along with the point below which this particular model's guesses stop being reliable — a number measured for each model rather than guessed once.
  • Nothing changes while you play yet. It is being collected first, so we can see how often it would interrupt a real game before it ever does.
0.7.292026-07-24 16:06 UTC
Your board's settings now live where settings belong.
  • The file holding a board's setup — its cameras, its name, its key for talking to the central server — sat inside the program folder, which is not where anyone looks and not where a package manager should be reaching. It has moved to /etc/dart-trainer/config.env.
  • Nothing on an existing board is moved or changed: the old file is still read, and anything in the new one takes precedence, so you can move your settings across whenever you like, one line at a time.
  • Nothing to do after updating.
0.7.282026-07-24 15:51 UTC
A board can be told to keep the scoring model it already has.
  • Normally a board picks up the newest scoring model by itself, which is what you want. While trialling a new model on a real board it is not: the trial model was replaced within fifteen minutes, and every dart thrown meanwhile was filed under the wrong model — exactly the comparison the trial existed to make.
  • A board can now be held on the model it has, and it keeps sending your throws as usual.
  • Also: a "What's new" link on the game list, so this page is findable without knowing the address.
0.7.272026-07-23 00:46 UTC
Calibration no longer rejects a good camera over a bit of printed text.
  • The check that makes sure the rings sit on the metal reads the colour on each side of the ring. Where the ring crosses printed numbers or a washed-out patch there is no colour to read — and the old check counted that as the ring being wrong, rejecting a calibration that was actually perfect.
  • It now confirms the ring from the crossings it CAN read (a clear majority is enough — the board is a fixed shape, so the rest is drawn in) and only rejects a ring that genuinely sits inside a coloured bed.
  • A camera reading 1.6 mm with the wireframe on the metal now passes.
0.7.262026-07-23 00:21 UTC
Calibration works on more boards.
  • Under uneven lighting a coloured ring can break into separate arcs, and the old detector could mistake one arc for the whole ring — a camera would fail with "ring detection failed" even though nothing was wrong with it.
  • It now identifies rings by their distance from the centre instead of their size, so a split ring is put back together.
  • Two of three cameras on a test board that could never calibrate now do.
0.7.252026-07-23 00:00 UTC
A bad camera can't sneak into a calibration, and you get a live view to fix it.
  • Calibration now checks that each camera's virtual rings actually sit on the metal, not just that the maths looks tidy — a camera that is off is rejected instead of going live.
  • Every camera shows the finished, solved board, so you can see at a glance which one is wrong.
  • Tap any camera for a LIVE view: move or focus it until the wireframe locks onto the metal and the badge turns green, then Calibrate again.
0.7.242026-07-22 23:09 UTC
Confirm orientation is one camera per page — no more three boards stacked and cut off. Use Next, then Confirm all when the last camera looks right.
0.7.232026-07-22 22:52 UTC
Calibration rings sit on the metal again — the virtual double/triple track the board spider instead of cutting through the outer singles. Press Calibrate once after updating so the new fit replaces the old one.
0.7.222026-07-22 18:22 UTC
Fixed a rare blank board when using the Raster setting.
0.7.212026-07-22 18:15 UTC
A failed calibration can no longer make things worse — it used to restore an older broken calibration over your fresh one. Calibration results are also written to the log now, so a problem can be diagnosed after the fact.
0.7.202026-07-22 17:53 UTC
The trainer starts even without a working calibration. Before, a half-finished calibration made it quit on launch and the board jumped straight back to autodarts — with no way in to fix it. Now it opens in manual-tap mode and tells you to press Calibrate; the model switches on the moment one succeeds.
0.7.192026-07-22 17:37 UTC
Calibration fixed and much easier to judge.
  • A slow camera was quietly wrecking its own calibration — the empty-board average counted the same frame several times instead of waiting for new ones, so the fit came out noisy with nothing physically wrong.
  • Orientation pictures are full width, one per row, so you can actually read the numbers.
  • Calibration pictures gained a legend (found vs guessed wires), and a rejected calibration now warns you plainly if you moved the board or a camera.
  • Also: this page is reachable again (the link worked, the page behind it was never wired up), and the game list no longer stalls for seconds when the raster board is on.
0.7.182026-07-22 17:07 UTC
Calibration shows what each camera saw — tap a picture to enlarge it. If a calibration is rejected you can finally see why: a soft lens, a bracket across the board, a dark view.
0.7.172026-07-22 16:42 UTC
Bounce-out can be recorded from the ARM path — not only when you hunt for a button.
0.7.162026-07-22 16:31 UTC
Near-misses are logged so a dropped dart leaves a useful trace.
0.7.152026-07-22 16:23 UTC
➕ Dart inserts into a filled slot (the right one), not the empty one.
0.7.142026-07-22 16:03 UTC
Raster board option — one image instead of hundreds of shapes; smoother pan on slower tablets.
0.7.132026-07-22 15:21 UTC
Dart-count buttons share the left half in one row, as designed.
0.7.122026-07-22 15:07 UTC
➕ Dart for a missed throw — slot-accurate, with the how-to up front.
0.7.112026-07-22 13:02 UTC
Finer touch timing (full gesture, finger-down to finger-up).
0.7.102026-07-22 12:44 UTC
Touch-to-paint timing and clearer names for long browser tasks.
0.7.92026-07-22 10:46 UTC
Client drag timings join the optional performance report.
0.7.82026-07-22 10:18 UTC
More solid app state under the hood (typed UI state + poll contract).
0.7.72026-07-22 09:22 UTC
Finer model tip readout — fewer silent mis-scores near the tip.
0.7.62026-07-22 01:12 UTC
Orientation confirm works again after the UI rebuild.
0.7.52026-07-21 23:55 UTC
One bad upload no longer blocks the whole queue or loses data in memory.
0.7.42026-07-21 23:22 UTC
Bust feedback lives in the status line — no extra row clutter.
0.7.32026-07-21 23:03 UTC
Feedback screenshots work again (broken string literals).
0.7.22026-07-21 22:21 UTC
Home-screen / PWA install metadata actually loads.
0.7.12026-07-21 21:43 UTC
Crosshair & pan cleaned up; UI no longer ships source files on the rig.
0.7.02026-07-21 20:21 UTC
Modern modular trainer UI (faster to maintain; same play flow).

0.6 · stable candidate

0.6.12026-07-19 03:11 UTC
Stylesheet refresh; leaderboard close control easier to hit.
0.6.02026-07-19 02:56 UTC
Stable release candidate — X01, full game catalog, recaps, groups, detection hardening, named players.

0.5 · match play & catalog

0.5.202026-07-19 02:41 UTC
Corrections sync more reliably; bust banner; confidence gate for quieter detection.
0.5.192026-07-19 01:47 UTC
Games require a named player (3+ characters); nudge for the 12-word key.
0.5.182026-07-19 01:34 UTC
Groups section in Settings (join a group for shared boards).
0.5.172026-07-19 01:29 UTC
Leaderboard game list stays a column on tablet portrait.
0.5.162026-07-19 01:20 UTC
Leaderboard layout refresh + Group gear + contextual “New game”.
0.5.152026-07-19 00:53 UTC
Smarter leaderboard filters.
0.5.142026-07-19 00:30 UTC
Post-game recap respects game variants; cleaner career card.
0.5.132026-07-19 00:24 UTC
Around the Clock leaderboards split any-ring vs doubles.
0.5.122026-07-18 23:32 UTC
Switching slots with a moved crosshair commits the correction (doesn’t throw it away).
0.5.112026-07-18 22:55 UTC
Player roster loads more reliably after network hiccups.
0.5.102026-07-18 22:22 UTC
Recap colours: red means a missed double only — honest legend.
0.5.92026-07-18 21:48 UTC
Post-game recap finds its game id reliably.
0.5.82026-07-18 20:06 UTC
Post-game recap with heatmap and model strip.
0.5.72026-07-18 16:55 UTC
Faster, lighter frame uploads from the rig (still lossless).
0.5.62026-07-18 16:11 UTC
Detection no longer freezes frames mid-burst under load.
0.5.52026-07-18 15:42 UTC
Optional performance timing; camera FPS investigation closed (solid 30).
0.5.42026-07-18 15:02 UTC
Internal server cleanup (no play changes).
0.5.32026-07-17 23:28 UTC
Revert-pull takes the confirm slot (clearer after a mistaken pull).
0.5.22026-07-17 23:05 UTC
Detection hardening + full game-mode set (Cricket, Bermuda, Clock, World, …).
0.5.12026-07-17 22:15 UTC
Harder against phantom throws; visits resume cleanly after a pull.
0.5.02026-07-17 15:55 UTC
X01 core — configurable start / out rules, multi-leg boards, Elo gates.

0.4 · corrections

0.4.182026-07-17 11:21 UTC
Tiny cross-wire taps count as real corrections (training + display agree).
0.4.172026-07-17 10:25 UTC
Add-a-dart works in glide — empty slot opens a centre zoom window.
0.4.162026-07-17 10:20 UTC
Deselect clears Bounce / Phantom arming — an armed button never outlives its dart.
0.4.152026-07-17 02:12 UTC
Hotfix: correction modes load on first open (0.4.14 was dead on startup).
0.4.142026-07-17 01:55 UTC
Tap / Crosshair / Crosshair Glide — pick how you correct a dart.
0.4.132026-07-17 00:52 UTC
Reverted pointer prediction (felt worse in real play).
0.4.122026-07-17 00:48 UTC
Tried predictive pan (later reverted in 0.4.13).
0.4.112026-07-17 00:33 UTC
Suggestion slots show the real progression (1, 2, 3 — not S1, S1, S1).
0.4.102026-07-17 00:27 UTC
Drag jank meter shows what slowed a pan (debug).
0.4.92026-07-17 00:15 UTC
During a drag, only the reticle label updates — less stutter.
0.4.82026-07-17 00:09 UTC
Smoother drags; polls pause while you pan.
0.4.72026-07-17 00:00 UTC
Drag lag fixed — styles no longer loaded from the internet mid-game.
0.4.62026-07-16 23:52 UTC
Build version badge in Settings; drag jank meter for field tuning.
0.4.52026-07-16 23:47 UTC
Pan uses the compositor + fixed reticle — much smoother fingers.
0.4.42026-07-16 23:34 UTC
Pan updates once per frame (no more multi-write jank).
0.4.32026-07-16 21:35 UTC
Honest bounce-outs — no fake pin; clearer bed labels (e.g. MISS·N).
0.4.22026-07-16 17:08 UTC
Crosshair drag no longer rebuilds the slots on every finger move.
0.4.12026-07-16 16:38 UTC
Bust keeps its zoom; cleaner tap window on review.
0.4.02026-07-22 17:13 UTC
Partial pull is a takeout — not a phantom throw.

0.3 · foundation

0.3.992026-07-16 16:24 UTC
Turn passes on a short or busted visit — not only after the 3rd dart.
0.3.982026-07-16 15:03 UTC
Brighter checkout route; “Leg N won by X” toast; stale tab auto-reloads after upgrade.
0.3.972026-07-16 14:18 UTC
HUD reorg: status lights, compact utilities, calibrate+orient together; 501 match folded into 501 setup.
0.3.962026-07-16 14:02 UTC
Removed the low-confidence warning spam.
0.3.952026-07-16 13:34 UTC
HUD layout: semaphore status + compact utilities (preview of 0.3.97).
0.3.942026-07-16 12:29 UTC
Detection starts collecting visit-side data to get faster later (no play change yet).
0.3.932026-07-15 23:56 UTC
Checkout 121 shows the real finish route; score = checkouts completed.
0.3.922026-07-15 22:52 UTC
Composite board view for motion (shadow) — groundwork for better multi-cam detection.
0.3.912026-07-15 22:05 UTC
Motion trigger uses all three cameras, not only cam0.
0.3.902026-07-15 21:45 UTC
User manager, post-game summary, leaderboard highlight of you.
0.3.892026-07-15 16:11 UTC
Multiplayer — any game, 2–3 players on one board.
0.3.882026-07-15 14:32 UTC
Player-ID QR share / scan to log in on a friend’s board; forget this rig.
0.3.872026-07-15 02:25 UTC
Your player ID is 12 recovery words on paper.
0.3.862026-07-15 01:37 UTC
Bigger fullscreen button.
0.3.852026-07-15 01:36 UTC
Fullscreen promoted on first launch.
0.3.842026-07-15 01:29 UTC
Fullscreen toggle + home-screen / PWA support.
0.3.832026-07-14 23:40 UTC
Every dart is recorded for stats — nothing a throw does is lost.
0.3.822026-07-14 22:00 UTC
Camera FPS fixed — solid ~30 fps again (was a one-line buffer bug).
0.3.812026-07-14 21:29 UTC
Median burst no longer erases the dart it was meant to clean up.
0.3.802026-07-14 21:02 UTC
Empty-board reference uploads again after a spill; upgrades no longer leave the service stopped.
0.3.792026-07-14 20:55 UTC
“Did a dart land?” uses all cameras — fewer lost darts around double 2.
0.3.782026-07-14 20:50 UTC
Near-miss correction keeps zoom, selection, and fewer extra taps.
0.3.772026-07-14 20:39 UTC
Fixed “round NaN” display; buttons no longer look like status fields.
0.3.762026-07-14 20:05 UTC
Winning by correcting the checkout dart no longer swallows the win.
0.3.752026-07-14 19:31 UTC
An upgrade actually restarts into the new version.
0.3.742026-07-14 19:27 UTC
Phantom darts killed (reconcile off by default); fewer silent failures.
0.3.732026-07-14 17:34 UTC
Rig self-enrolls with central; per-rig upload caps.
0.3.722026-07-14 16:09 UTC
Calibration works regardless of the Pi account name.
0.3.652026-07-13 19:55 UTC
Safer per-rig secrets on disk (permissions).
0.3.552026-07-13 13:21 UTC
Drift check waits for camera warm-up and retries.
0.3.542026-07-13 13:16 UTC
Orientation guard — calibrate won’t leave the board a sector off silently.
0.3.532026-07-13 13:08 UTC
Calibration drift warning in status (“do I need to recalibrate?”).
0.3.522026-07-13 12:26 UTC
Every throw remembers which calibration it was captured under.
0.3.512026-07-12 19:21 UTC
Batch review on by default for new installs.
0.3.502026-07-12 19:15 UTC
Batch-mode game-over / bust announcements; leg-done ready state.
0.3.492026-07-12 19:09 UTC
Batch review: add a missed dart, confidence flag, clearer event log.
0.3.482026-07-12 11:36 UTC
Batch review — throw 3, then review & confirm the visit.
0.3.472026-06-26 18:14 UTC
Checkout Routes — fixed doubles finishing routes + leaderboard.
0.3.462026-06-26 17:48 UTC
Each rig gets a unique id automatically (no config).
0.3.452026-06-26 15:41 UTC
Orientation autodetect direction fixed.
0.3.442026-06-26 11:24 UTC
Orientation autodetect can pre-fill the confirm UI.
0.3.432026-06-26 11:16 UTC
Confirm orientation UI + per-camera rotate preview (after you spin the board).
0.3.422026-06-25 19:24 UTC
Auto-calibrate tries both wire bands and keeps the better fit.
0.3.412026-06-25 18:39 UTC
Calibrate modal shows accepted vs rejected (previous kept) + per-cam quality.
0.3.402026-06-25 18:29 UTC
Calibrate backs up and validates — no more bricked board from a bad fit.
0.3.392026-06-25 18:11 UTC
Calibration package dependency fixed on the Pi.
0.3.382026-06-25 10:29 UTC
501 bust feedback; scoring after pull; pins clear on new game.
0.3.372026-06-25 01:58 UTC
Calibrate board button in the app (after setup, a bump, or rotating).
0.3.362026-06-24 20:00 UTC
Drag-to-pan zoom, clearer dart pins, bigger score on the pin.
0.3.352026-06-24 19:08 UTC
Installs on both Pi OS Bookworm and Trixie.
0.3.342026-06-24 16:13 UTC
Around the World (doubles).
0.3.332026-06-24 15:38 UTC
501 Head-to-Head + Elo ranking.
0.3.322026-06-24 15:23 UTC
Checkout 121 — progressive finishing practice.
0.3.312026-06-24 15:19 UTC
JDC Challenge — three-part skill test with colour tiers.
0.3.302026-06-24 15:15 UTC
Group Builder, High Score 3, Treble 20.
0.3.292026-06-24 15:01 UTC
501 (X01) + skill-tier ranking.
0.3.282026-06-24 14:55 UTC
XP, levels, daily streak, badges.
0.3.272026-06-24 14:50 UTC
Singles Training (later replaced by Around the World).
0.3.262026-06-24 14:46 UTC
Player stats: heatmap, grouping (mm), zone %.
0.3.242026-06-24 14:23 UTC
Scoring model updates over the air without a full reinstall.
0.3.222026-06-24 14:02 UTC
Help modal solid background; leaderboard game tabs.
0.3.212026-06-24 13:49 UTC
Per-game rules / help; clean resume after a false game-over.
0.3.202026-06-24 13:26 UTC
Target field tint (double / segment); better rim-throw detection.
0.3.192026-06-24 04:57 UTC
Uploads no longer stall on empty-board photos; less zoom lag; clearer highscores.
0.3.182026-06-24 04:42 UTC
Confirm last throw before results; board context in the zoom.
0.3.172026-06-24 04:29 UTC
Much faster throw response (upload work moved off the critical path).
0.3.162026-06-24 04:19 UTC
Offline-friendly capture: ramdisk first, spill to SD if needed.
0.3.152026-06-24 03:54 UTC
Uploads no longer freeze takeout / throw for ~10s.
0.3.142026-06-24 03:38 UTC
Fully hands-free pull with a clear auto-takeout confirmation.
0.3.132026-06-24 03:02 UTC
Stale empty-board reference self-heals; Pull button clearer.
0.3.122026-06-24 02:54 UTC
Status no longer crashes when central is enabled.
0.3.112026-06-24 02:51 UTC
Auto-takeout no longer loses visit folders; zoom tweaks.
0.3.102026-06-24 02:15 UTC
Zoom into the detected dart; reset zoom after a correction.
0.3.92026-06-24 02:10 UTC
Local leaderboard — highscores work without the cloud.
0.3.82026-06-24 01:46 UTC
Stopped the takeout reset-loop.
0.3.72026-06-24 01:34 UTC
First-time UX pass (clearer cold start).
0.3.62026-06-24 00:46 UTC
Auto-takeout — board back to empty means the visit is cleared.
0.3.52026-06-24 00:35 UTC
Pulling darts no longer records a fake throw.
0.3.42026-06-24 00:17 UTC
Hands-free auto-commit + tap to correct.
0.3.02026-06-23 23:48 UTC
Hands-free movement detection — the first fully auto throw flow.

Gaps in version numbers are internal package bumps with no player-facing change.