Better Minesweeper Docs
Features

Stats

Per-game metrics, all-time tracking, personal bests, and custom formula stats.

Stats Window

Toggle with S. Updates live during play. Rows are draggable to reorder; presets control category visibility. The PB column compares the current game against your records. The window can follow the game window position (stats_window_follows_game). All-time stats open with Alt+S.

Per-Game Metrics

Board

MetricVariableDescription
3BVtotal_3bvBoard Bechtel Value — minimum clicks needed to clear the board optimally. Each opening (zero-flood region) counts as 1; each exposed numbered tile not cleared by an opening also counts as 1.
Solved 3BVsolved_3bv3BV cleared so far in the current game
OpeningsopeningsCount of distinct zero-tile flood-fill regions on the board
IslandsislandsNumbered regions fully surrounded by zero tiles
Tiles revealedtiles_revealedTotal tiles uncovered, including flood-fill reveals
Flood revealsflood_revealsTiles uncovered automatically by zero flood-fill

Speed

MetricFormulaNotes
TimeElapsed seconds from first click to win/loss
3BV/s3BV ÷ timeStandard competitive speed metric; only finalizes on a win
Projected 3BV/ssolved_3BV ÷ timeCurrent solve rate; live during play
Projected win time3BV ÷ (solved_3BV / time)Estimated finish time at current pace
QG (Quality Grade)time1.7 ÷ 3BVLower is better. Penalizes slow times non-linearly; comparable across board sizes.
STNBcompletion × K ÷ QGHigher is better. K is a board-size constant (Beginner 47.3, Int 153.7, Expert 435.0). Arbiter-compatible formula.
Ce/seffective_clicks ÷ timeEffective click rate; clicking speed on useful inputs only
Throughputsolved_3BV ÷ effective_clicks3BV cleared per effective click

Efficiency

MetricFormulaNotes
IOEsolved_3BV ÷ total_clicksIndex of Efficiency. Max theoretical value is 1.0. Measures how many clicks were "wasted".
IOSlog(3BV) ÷ log(time)Index of Speed. log-ratio of board difficulty to time; higher is better.
RQPtime × (time + 1) ÷ 3BVRank & Quality Points. Lower is better. Penalizes extra time quadratically.
Correctnesseffective_clicks ÷ total_clicksFraction of all clicks that revealed a tile
CL (Click Level)total_clicks ÷ timeRaw click rate (clicks per second)
MOVcursor_path (px) ÷ timeMouse speed in pixels per second
SAOMOV × Ce/sSolving ability: combines mouse speed with effective click rate
OBVOptimized Board Value — difficulty-adjusted 3BV accounting for board structure

Inputs

MetricVariableDescription
Total clickstotal_clicksAll mouse button events recorded
Left clicksleft_clicksLeft mouse button presses
Right clicksright_clicksRight mouse button presses
Middle clicksmiddle_clicksMiddle mouse button presses
Effective clickseffective_clicksClicks that directly revealed at least one tile
ChordschordsTotal chord attempts (simultaneous left+right or middle click)
Effective chordseffective_chordsChords that revealed tiles
Safety chordssafety_chordsChords where all adjacent covered tiles were flagged; revealed nothing
Failed chordsfailed_chordsChords that detonated a mine
Tiles by chordtiles_cleared_by_chordingTotal tiles uncovered through chords
Flags placedflags_placedRight-click flag placements
Removed flagsfalse_flagsFlags that were removed (placed then taken off)
Cursor pathpathTotal mouse travel distance in pixels

All-Time Stats

Accumulates across all non-assisted, non-seeded, non-daily games. Open with Alt+S. Pausing is available via pause_alltime_recording in settings.

Global Totals

StatDescription
Games played / won / lostLifetime game counts
Total playtimeSum of all game times in milliseconds
Tiles revealedAll tiles uncovered, all games
Flood revealsTiles uncovered by zero flood-fill, all games
Flags placedTotal flags placed, all games
MisflagsTotal flags removed, all games
ChordsTotal chord attempts
Failed chordsChords that detonated a mine
Left / right / middle clicksClick totals by button
3BV solvedCumulative 3BV cleared across all games
Smiley clicksTimes the restart button was clicked
Runs abandonedGames ended without a win or loss (closed mid-game)
Perfect gamesWins with no misflags
No-flag winsWins completed without placing any flags

Records

StatDescription
Best time (per difficulty)Fastest win time in milliseconds
Best 3BV (per difficulty)Highest 3BV board cleared
Best 3BV/s (per difficulty)Highest 3BV/s achieved on a win
Best 3BV/s time (per difficulty)Time of the best-3BV/s game
Best 3BV/s board (per difficulty)3BV of the best-3BV/s game
Best win streak (global + per difficulty)Longest consecutive win run

Per-Difficulty Totals

Available for Beginner, Intermediate, and Expert independently:

StatDescription
Games played / won / lostGame counts for this difficulty
Playtime (all games)Total time across all games at this difficulty
Playtime (wins only)Total time on winning games only
3BV totalSum of board 3BV across all games
3BV total (wins only)3BV solved on completions only
3BV solvedActual 3BV cleared at this difficulty
Left / right / middle clicksClick totals for this difficulty
Clicks (wins only)Per-button click totals on winning games
Current win streakActive win streak at this difficulty
Best win streakBest win streak at this difficulty
Abandoned timeCumulative time spent on abandoned runs

Streaks

StatDescription
Current win streakConsecutive wins across all difficulties
Best win streakRecord consecutive wins across all difficulties
Current loss streakConsecutive losses across all difficulties
Current play streakConsecutive days with at least one game played
Best play streakRecord consecutive play days
Last play dateOrdinal date of the last recorded game (days since 0001-01-01)

Personal Bests

Three PB popup types, each independently toggleable in settings:

TypeSetting Key
Best timepb_popup_rtime
Best 3BV/spb_popup_3bvs
Win streakpb_popup_streak
Excluded from PBs: assisted runs (automation features on), seeded runs (loaded seed / Ctrl+R / replay library), and daily challenge runs.

Custom Stats

Custom stats appear under a “Custom” category in the stats window and evaluate live during play. Defined in Settings > Custom Stats.

Stat Fields

FieldDescription
LabelName shown in the stats window
FormulaMath expression using built-in variables
Formatvalue, time_seconds, time_hms, percent, or custom
Format stringPython format string for custom mode, e.g. {:.3f}

Format Modes

ModeExample OutputNotes
value3.14Raw number, 2 decimal places
time_seconds42.51Seconds with decimals
time_hms1:23:45Hours:minutes:seconds
percent78.5%Multiplies by 100 — formula should return 0–1
custom(your format)Python format string, e.g. {:.3f}

Formula Syntax

Arithmetic
+ - * / // % **
Comparisons
== != < > <= >=
Boolean
and or not if/else
Math functions
abs() round() min() max() sqrt() log()
Constants
pi e inf
Clamp
clamp(v, min, max)

Examples

GoalFormulaFormat
Win rate (all time)alltime_total_games_won / max(1, alltime_total_games_played)percent
Click accuracyeffective_clicks / max(1, total_clicks)percent
Average expert win timealltime_expert_playtime_ms_won / max(1, alltime_expert_games_won) / 1000time_seconds
Total playtime (hours)alltime_total_playtime_ms / 3600000custom{:.1f}h
Flag accuracy1 - false_flags / max(1, flags_placed)percent
Flood-fill ratioflood_reveals / max(1, tiles_revealed)percent

Variable Reference

All variables available in custom stat formulas. All-time variables are prefixed with alltime_.

Per-Game Variables

VariableTypeDescription
elapsed_timefloat (s)Game duration in seconds
total_clicksintTotal input clicks
left_clicksintLeft mouse clicks
right_clicksintRight mouse clicks
middle_clicksintMiddle mouse clicks
effective_clicksintClicks that revealed at least one tile
chordsintTotal chord attempts
effective_chordsintChords that revealed tiles
safety_chordsintChords where all neighbors were already flagged; nothing revealed
failed_chordsintChords that hit a mine
tiles_cleared_by_chordingintTiles uncovered via chords
flags_placedintFlags placed
false_flagsintFlags removed after placement
tiles_revealedintTotal tiles uncovered
flood_revealsintTiles revealed by zero flood-fill
total_3bvintBoard 3BV
solved_3bvint3BV cleared so far
threebv_sfloat3BV ÷ time
projected_threebv_sfloatsolved_3BV ÷ time (live projection)
projected_win_timefloat (s)3BV ÷ current_rate
ioefloatsolved_3BV ÷ total_clicks
iosfloatlog(3BV) ÷ log(time)
rqpfloattime × (time + 1) ÷ 3BV
correctnessfloateffective_clicks ÷ total_clicks
throughputfloatsolved_3BV ÷ effective_clicks
cesfloateffective_clicks ÷ time
clfloattotal_clicks ÷ time
openingsintZero-tile flood-fill regions on the board
islandsintNumbered regions surrounded by zeros
pathint (px)Total cursor travel in pixels
movfloatpath ÷ time (pixels/second)
qgfloattime1.7 ÷ 3BV
stnbfloatcompletion × K ÷ QG (Arbiter formula)
obvfloatOptimized Board Value
saofloatMOV × Ce/s
resultstr"Won", "Lost", or "" (in progress)
difficultystr"Beginner", "Intermediate", "Expert", or "Custom"

Runtime Aliases

AliasEquivalent
timeelapsed_time
3bvtotal_3bv
3bvsthreebv_s
clickstotal_clicks
won1 if result == "Won", else 0
lost1 if result == "Lost", else 0
beg1 if difficulty == "Beginner"
int1 if difficulty == "Intermediate"
exp1 if difficulty == "Expert"

All-Time Variables

Global totals (prefix alltime_):

VariableTypeDescription
alltime_total_games_playedintLifetime games played
alltime_total_games_wonintLifetime wins
alltime_total_games_lostintLifetime losses
alltime_total_playtime_msintTotal playtime in milliseconds
alltime_total_tiles_revealedintAll tiles uncovered, all games
alltime_total_flood_revealsintFlood-fill tiles, all games
alltime_total_flags_placedintFlags placed, all games
alltime_total_chordsintTotal chord attempts
alltime_total_failed_chordsintChords that detonated a mine
alltime_total_left_clicksintTotal left clicks
alltime_total_right_clicksintTotal right clicks
alltime_total_middle_clicksintTotal middle clicks
alltime_total_misflagsintTotal flags removed
alltime_total_3bv_solvedintCumulative 3BV cleared
alltime_total_smiley_clicksintRestart button clicks
alltime_total_runs_abandonedintMid-game quits
alltime_total_perfect_gamesintWins with zero misflags
alltime_total_no_flag_winsintWins with zero flags placed
alltime_current_win_streakintActive win streak (all difficulties)
alltime_best_win_streakintRecord win streak (all difficulties)
alltime_current_loss_streakintActive loss streak
alltime_current_play_streakintActive play-days streak
alltime_best_play_streakintRecord play-days streak

Records (replace [d] with beginner, intermediate, or expert):

VariableTypeDescription
alltime_best_[d]_timeint (ms)Best win time
alltime_best_[d]_3bvintHighest 3BV board cleared
alltime_best_[d]_3bvsfloatBest 3BV/s achieved
alltime_best_[d]_3bvs_timeint (ms)Time of the best-3BV/s game
alltime_best_[d]_3bvs_3bvint3BV of the best-3BV/s game

Per-difficulty totals (replace [d] with beginner, intermediate, or expert):

VariableTypeDescription
alltime_[d]_games_playedintGames at this difficulty
alltime_[d]_games_wonintWins at this difficulty
alltime_[d]_games_lostintLosses at this difficulty
alltime_[d]_playtime_msint (ms)Total playtime at this difficulty
alltime_[d]_playtime_ms_wonint (ms)Playtime on wins only
alltime_[d]_total_3bvintSum of board 3BV across all games
alltime_[d]_total_3bv_wonint3BV on winning games only
alltime_[d]_total_3bv_solvedint3BV actually cleared at this difficulty
alltime_[d]_total_left_clicksintLeft clicks at this difficulty
alltime_[d]_total_right_clicksintRight clicks at this difficulty
alltime_[d]_total_middle_clicksintMiddle clicks at this difficulty
alltime_[d]_total_left_clicks_wonintLeft clicks on wins only
alltime_[d]_total_right_clicks_wonintRight clicks on wins only
alltime_[d]_total_middle_clicks_wonintMiddle clicks on wins only
alltime_[d]_current_win_streakintActive win streak at this difficulty
alltime_[d]_best_win_streakintRecord win streak at this difficulty
alltime_[d]_abandoned_time_msint (ms)Time spent on abandoned runs

Disabled Variables

Present in the codebase but currently return 0: zini, hzini, zne, hzne, znt, hznt, iome, ce.

Data Storage

SQLite database, WAL mode. Writes are queued on a background thread to avoid UI stalls. On first run the database migrates automatically from the game directory to a platform-specific path.

PlatformPath
Windows%LOCALAPPDATA%\BetterMinesweeper\stats.db
Linux~/.config/BetterMinesweeper/stats.db

Set pause_alltime_recording in settings to suspend recording without clearing history.