Infinite Minefield
Starting...
x: 0, y: 0
Score: 0
FPS: 0
Frame Time: 0ms
Loaded Chunks: 0
Revealed Chunks: 0
Visible Cells: 0
Zoom: 100%
Camera: 0, 0
Memory (chunks): 0
Canvas Pool: 0
Storage: - / -
SOLVER ACTIVE
Tiles/s: 0
SettingsS
StatisticsT
Find FrontierF
Center CameraC
About / How It Works
⚙ Settings
Preset:
Gameplay
Display
HUD
Sound
Controls
Solver
Data
Rules
Adjacency Rule
You can only reveal or flag cells touching already-explored tiles. Turn off to click anywhere freely.
Chording
Click a revealed number when enough neighbors are flagged to auto-reveal the rest. Middle-click or use the chord keybind.
Auto-Flag Chord
When chording, if all remaining unrevealed neighbors must be mines, flag them instead of revealing. Requires Chording to be enabled.
Question Marks
Adds a ? state to the right-click cycle: unrevealed → flag → ? → unrevealed. Useful for marking uncertain cells.
Flags
Auto-Flag Obvious Mines
Automatically flags mines that are provably surrounded by revealed tiles.
Flag Locking
Proven flags can't be accidentally removed without holding Shift. Disable to unflag freely.
Interface
Right-Click Context Menu
Show a context menu when right-clicking on revealed tiles, locked flags, or 0-tiles. Disable for a cleaner feel.
Middle Click
When middle-clicking a revealed number, chord instead of pan. Requires Chording to be enabled.
Rules
Chording
Click a revealed number when enough neighbors are flagged to auto-reveal the rest.
Auto-Flag Obvious Mines
Automatically flags cells that are provably mines. Off by default to preserve the classic feel.
Flag Locking
Proven flags require Shift+click to remove. Off by default.
Auto-Flag Chord
When chording a number where all remaining neighbors must be mines, flags them instead. Off by default.
Question Marks
Adds a ? state to the right-click cycle: unrevealed → flag → ? → unrevealed. Off by default.
No Guess
No Guess Mode
Repairs the board so it's always solvable without guessing. Applied on first click. May slightly adjust mine positions.
Search Budget
ms
How long to search for a no-guess layout. Higher = more attempts, longer first-click delay. Default 1s.
Theme
Theme
Changes the sprite palette. Classic is the authentic Win95 look.
Rendering
Antialiasing
Smooth-scales tiles when zooming. Off by default for crisp pixel-art rendering.
Raw Rendering
Draws each cell directly without intermediate canvas scaling. Fixes blurriness on some devices (e.g. iPhone) when zoomed out. Slower at high zoom levels.
Colorblind Mode
COMING SOON Replaces number colors with shapes and patterns.
Visibility
Hide UI
Hides the toolbar and all HUD elements. Press Tab to toggle anytime.
Always Show Toolbar
When off, the toolbar hides until you hover the bottom edge of the screen.
Screensaver
Enable Screensaver
AFK Timeout
After this idle time, a demo world plays. Any input exits it.
Mode
Infinite: explores a never-ending world. Board: solves a finite board sized to fill the screen.
Camera Follow
Camera slowly drifts toward the bot cursor while the screensaver plays.
Interactive Mode
Click or press a key to take control. After 3 seconds of no input, the bot resumes.
Preview Screensaver
Overlays
Show Coordinates
Current world position shown in the corner.
Show Chunk Coordinates
Shows the 32×32 chunk grid position. Useful for debugging.
Show Score
Running score based on tiles revealed. Higher numbers score more. Click the score display to see the full scoring table.
Show Tiles Revealed
Total number of safe tiles you've uncovered.
Show Time Played
Cumulative play time. Pauses automatically when the tab is hidden.
Show Performance Stats
FPS counter and render diagnostics. For troubleshooting slowdowns.
Board
Vertical Board
Flips non-square difficulty presets so the longer dimension becomes the height. Useful on portrait/mobile screens. Takes effect on the next new game.
Overlays
Show Timer
Shows elapsed time in the top-left corner. Independent of the infinite mode time display setting.
Show Mines Left
Shows remaining mines in the bottom-left corner.
Master
Sound Effects
Requires sfx/ files next to index.html to function.
Volume
050100
%
Master volume. Release the slider to hear a preview.
Sound Pack
Pack
Choose a sound style. Takes effect immediately. More packs coming soon.
Individual Sounds
Click a sound name to preview it. Toggle to enable/disable.
Enable Solver
Auto-plays the game using constraint logic. Press P to start/stop mid-game. Cannot be enabled before your first reveal.
Visible Chunks Only
Limits solver to cells visible on screen. Faster, but won't make moves off-screen.
Allow Probability Guessing
When the solver is logically stuck, it picks the statistically safest guess to keep going.
Aggressive Chaining
On: immediately chains flag placements into tier-1 reveals (faster throughput). Off: batches flags then does a full scan before escalating to CSP (more complete logical solving).
Speed
Controls how much time and work the solver does each frame. Higher budget = faster solving but less headroom for rendering. Step limit lets you watch the solver at a human-visible pace.
Frame Budget
ms
1 ms 14 ms
ms of solver work per frame. At 14 ms the solver gets nearly the full frame budget (~60fps = 16.7 ms/frame).
Max Steps / Frame
(0=∞)
1 200+
Cap on simple-rule iterations per frame. Set to 1–5 to watch the solver step by step. 0 = unlimited.
Full Backup
Export Backup
Downloads a single .imfbak file containing your Classic and No Guess saves plus all settings. Use this to move to a new browser or device. Hardcore is not included.
Restore Backup
Load a backup file. A preview lets you choose which saves and settings to restore.
Settings
Export Settings
Downloads your current settings as a small JSON file. No world data included.
Import Settings
Load a settings file. Storage budget and world data are never affected.
Storage Budget
Soft limit for save data. Warnings appear at 50%, 75%, 90%, 95%, and 99%. At 100%, new saves are skipped but existing data is safe. This is separate from the browser's hard quota — if that's hit, saves will fail with an error.
Block saves over budget
When off, saves continue past the soft limit (warnings still show).
MB
1.0 GB
Used: — —%
Settings
Reset All Settings
Resets all display, gameplay, sound, solver, and key settings to their defaults. Does not affect your save data.
Debug
Export Debug Snapshot
Downloads a full JSON snapshot of everything stored locally: IndexedDB metadata, chunk inventory, localStorage, storage quota, SW cache list, and runtime state. Useful for diagnosing storage bugs.
⚠ Danger Zone
Clear All Data
Permanently deletes all saved data from this browser. Cannot be undone.
Click a binding to reassign it. Press any key to set, Escape to cancel.
Navigation
Pan (hold)
Find Frontier
Center on Origin
Center on Cursor
Zoom In
Zoom Out
Actions
Settings
Solver Toggle
Performance Stats
Flag / Chord
Auto-Flag Chord
Toggle UI
Fixed — not rebindable.
0-Tile Mode Switch
Tap a blank (0) revealed tile to toggle flag/reveal mode.
Long-Press
Duration
ms
50ms (fast)1000ms (slow)
Feedback
Haptic Feedback
Vibrate briefly on flag placement (if device supports it).
Long-Press Indicator
Show a visual ring while holding down to flag.
About — Infinite Minefield
About
Changelog
Credits

Infinite Minefield is procedurally generated in a 32×32 tile chunk basis, allowing for an infinite world to play on.

All of your hard work and progress is saved automatically in your browser. You can close the tab, come back next week, or whenever you want, as long as you don't clear your browsing data. You have the option to download your saves to import wherever, whenever. If you are worried about storage, the save is pretty optimized where each 32×32 chunk of tiles is typically under 1 KB (using binary RLE compression), which gives you plenty of space to play on before you even hit 5 MB of chunk storage.

There are also many features in the settings you can toggle. Feel free to play around with the various settings!

Features
  • Infinite procedurally generated board
  • Auto-saves directly to your browser
  • Fully remappable keybinds
  • Many customizable gameplay options
  • SFX BETA
Contact & Support

Found a bug? Have feedback or a feature idea? Just want to say hi? You can reach me through any of the following:

Email — jrmkruis@gmail.com
Discord — coming soon
Support Development

This game is free and will always stay free. If you enjoy it and want to support further development, a small donation goes a long way.

Donate — coming soon
build 371436246
Show Pre-release
Pre-release entries are incremental changes between official versions.
v0.16.0 2026-04-02 — World generation, save format & QoL
Added
  • Keybind to center camera on origin (H) and separately on mouse cursor (C)
  • Keybinds to zoom in/out one step (= and -), both rebindable
  • Versioned chunk save format — magic header + version byte ensure future updates can detect and handle incompatible saves gracefully
  • Incompatible save modal — shown on load when a save cannot be read, with a description of what changed and a guarantee it won't happen again
  • Exported saves (.json) now include a saveVersion field; imports validate it and show the incompatible save modal if mismatched
  • Safe zone around spawn expanded from ±1 to ±2 cells (5×5 guaranteed clear area)
Changed
  • Mine density rebalanced to a flat 10–30% range (was a skewed 3-tier system that pushed ~40% of chunks to 35–40% density)
  • Mine density now sampled from a two-layer value noise field instead of a per-chunk roll — eliminates hard density jumps at chunk boundaries and produces smooth, organic region transitions
  • Random number generation upgraded from Math.sin-based to a multiply-xorshift hash — passes chi-squared uniformity, no sequential clustering
  • Cell seed formula improved to a two-round xorshift mix, reducing correlation between neighboring cells
  • Chunk coordinate limit raised from ±32,767 to ±2,147,483,647 — chunk keys and binary format both updated to Int32
  • Cell-level coordinate limit removed — solver frontier and flood-fill keys switched from arithmetic packing (±1,048,576) to string keys with no limit
  • globalSeed now always stored and restored as unsigned 32-bit to prevent negative seeds from bitwise ops
  • Empty generated chunks (created by neighbor lookups) are now evicted by the distant chunk unloader instead of accumulating in memory indefinitely
  • Canvas pool cap reduced from 500 to 64 — large enough to absorb fast panning, removes the 500MB theoretical memory ceiling
  • Solver runs tier 1 (simple rules) every 50ms and tier 2/3 (CSP) every 250ms on separate schedules, reducing main-thread blocking
  • Constraint graph is cached between solver ticks and only rebuilt when a cell state changes, eliminating redundant work on static boards
  • Flag-lock deduction search radius reduced from ±2 to ±1 per pass, eliminating stutter when flagging in enclosed areas
  • Auto-flag chord deduction deferred to after frame paint, consistent with manual flag deduction
Fixed
  • Solver did not activate on load until the first player interaction — empty frontier array was incorrectly treated as a valid restored frontier instead of triggering a rebuild
  • Revealed cells did not appear in the simplified (zoomed-out) renderer until a refresh — cascade reveals skipped simplified cache invalidation
  • Chunk coordinates in the binary save format were capped at ±32,767 due to Int16 encoding — silently corrupting saves for players who explored far enough
  • chunkKey collided at ±32,768 — two different chunks could share the same map key
  • Solver frontier restored from old numeric-key saves caused a load error (key.indexOf is not a function) — old format now detected and rebuilt instead
v0.15.0 2026-04-02 — Performance & code quality
Changed
  • Flag placement, reveals, and chords now paint to screen immediately — deduction and auto-flag logic runs after the frame, eliminating all input lag when flag locking is on
  • 0-tile cascade reveals now batch all chunk canvas updates into one pass per chunk instead of one draw call per revealed cell, significantly reducing jank on large cascades
  • Stats modal opens immediately; storage estimate fills in after paint instead of blocking the open
  • Auto-flag deduction is now skipped entirely when a flag has no revealed numbered neighbor — common in open areas
  • Classic preset no longer enables question marks
Fixed
  • Spacebar flag placement did not visually update until the camera moved or a chord was performed
Internal
  • Extracted commitChord, deferFlagDeduction, startPanning, and wireToggle helpers — chord and flag behavior now has a single source of truth
  • Renamed markChunkDirty to scheduleChunkSave to distinguish it from render-dirty state
  • Deduction pass reuses pre-allocated flat arrays and Sets across passes, eliminating per-pass GC pressure; BFS queue uses a read-pointer instead of Array.shift()
v0.14.3 2026-03-05 — Quick Settings, presets & UI hide
Added
  • Quick Settings now exist as a dedicated tab in the Settings modal
  • Presets for settings: Standard, Classic, Beginner (Beginner does nothing as of now)
  • The UI can now be toggleable in settings or by keybind. Default keybind is TAB
Changed
  • Right-click context menu now off by default
v0.14.1 2026-03-04 — Bug fixes
Fixed
  • Hitting a mine could corrupt nearby cells, making 0-tiles become mines
  • Audio stops working after the browser suspends the AudioContext
v0.14.0 2026-03-02 — Memory overhaul & gameplay polish
Added
  • Flag locking toggle in settings and welcome modal
  • Manual "Lock Flags" button in Gameplay settings
Changed
  • Cell storage rewritten to Uint16Array — ~12× less memory per cell
  • Coordinate encoding upgraded to 53-bit integers — no more key collisions at large distances
  • Settings toggles no longer trigger expensive storage operations
  • Canvas pool size tracked in O(1) instead of scanning all chunks each frame
Fixed
  • False flag sprite persisting after subsequent actions
  • IndexedDB failing silently on init — added fallback timeout and version change handling
v0.13.1 2026-02-28 — Bug fixes
Fixed
  • Keybind conflict check incorrectly triggering when reassigning a key to itself
  • Tab border and z-index misalignment in Win98 settings modal
  • Solver save guards accidentally left disabled after a debug session
v0.13.0 2026-02-27 — Controls & HUD
Added
  • Chording toggle — chord reveal can be fully disabled
  • Middle-click behavior selector: pan or chord
  • Custom seed input in New Game modal
  • Antialiasing toggle, off by default
Changed
  • Score, Tiles, and Time HUD elements now stack dynamically without overlapping
v0.12.0 2026-02-26 — About modal, audio & build tooling
Added
  • About modal with About, Features, Changelog, and Credits tabs
  • Adjacency rule toggle with welcome modal explanation
  • Local dev server batch file for Windows
Fixed
  • Mine density clustering in explosion zones caused by correlated RNG output
  • Volume slider storing wrong gain value at 30% position
  • Sound settings UI not greying out correctly when audio is disabled
  • Settings tab and About tab click handlers interfering with each other
v0.11.0 2026-02-25 — Win98 UI & sound system
Added
  • Full Windows 98 visual redesign for UI
  • Sound system with 8 SFX, pitch variance, and flood-fill suppression
  • Customizable state.keybindings with a dedicated Keys tab in settings
  • 5-click confirmation on all destructive reset buttons
  • Score breakdown tooltip accessible via ? button
Changed
  • Right-click on canvas now opens a context menu, default on
v0.10.1 2026-02-24 — Performance
Changed
  • Cell changes now patch directly into chunk caches instead of regenerating the whole chunk
  • All canvases set to opaque — removes unnecessary GPU alpha compositing
  • Solver frontier rebuild optimized (~4× faster)
v0.10.0 2026-02-23 — Scoring
Added
  • Risk-based scoring — higher adjacent mine count = more points
  • Score and Tiles Revealed display toggles
  • Score breakdown panel showing point values per tile type
  • Scoring overview in welcome modal
v0.9.1 2026-02-21 — Bug fixes
Fixed
  • Flag locking incorrectly locking misflags near satisfied numbers
  • Wrong-chord X sprite applied to the detonated mine instead of the misflagged cell
v0.9.0 2026-02-20 — Coordinates & visual feedback
Added
  • Chunk coordinate display toggle
  • Misflagged cell briefly shows X sprite when a chord detonates a real mine
v0.8.0 2026-02-13 — Authentic sprites
Changed
  • All sprites replaced with the authentic Win95 Minesweeper texture atlas
  • Cell size changed to 16px to match native atlas tile size
v0.7.0 2026-02-06 — Settings persistence
Added
  • All settings now persist across sessions
Changed
  • Welcome modal now only appears on first visit
  • Clearing all data automatically starts a new game
v0.6.0 2026-02-05 — Auto-flag assistance
Added
  • Option to automatically flag mines if fully surrounded by revealed tiles, default on
v0.5.0 2026-02-04 — Infinite* storage
Added
  • Storage quota warning display
Changed
  • Migrated from localStorage to IndexedDB, increasing the potential save size depending on your machine
  • Save data uses binary format, making it 67% smaller than before
v0.4.0 2026-02-03 — Advanced solver
Added
  • CSP backtracking solver — resolves patterns that simple rules can't crack
Fixed
  • Solver not recognizing revealed mines as satisfied constraints
  • Chunk border seams appearing at certain zoom levels
  • Flags disappearing when switching between zoom levels
v0.3.0 2026-02-04 — Rendering overhaul
Changed
  • Chunk rendering reduced from ~5,000 to ~20 GPU state changes, vastly improving performance
  • High-zoom rendering now uses chunk cache instead of redrawing every cell
  • Unrevealed tile grid drawn as a single pattern fill instead of per-cell
  • Sprites drawn at native resolution, eliminating scaling overhead
v0.2.0 2026-01-31 — Foundation
Added
  • Canvas pooling to eliminate garbage collection stuttering
  • Frontier-based solver (simple rules)
  • requestAnimationFrame render loop for smooth 60 FPS
Fixed
  • Flags placed in unexplored areas not rendering
  • Flagging a cell not checking adjacency rules
v0.1.0 2026-01-30 — Initial build
Added
  • The game
Made By
Design & Development Oirehm
Built With
Rendering HTML5 Canvas
Language Vanilla JavaScript
Storage IndexedDB
Dependencies None
Sprite Sheet
Original rip TCRF
Sheet work Inky, DaSpriter121

Winmine 95/98/ME sprite sheet. Used for visual recreation purposes only.

Legal

Minesweeper is a trademark of Microsoft Corporation. This is an independent fan project with no affiliation to or endorsement by Microsoft. Sprite assets are reproduced for non-commercial fan use only.

Game Statistics
Progress
Score 0
Tiles Revealed 0
Chunks Explored 0
Actions
Flags Placed 0
Mines Hit 0
Mines Found 0
Accuracy
Individual Reveals 0
Chords Performed 0
Tile Breakdown
Blank (0) 0
1s 0
2s 0
3s 0
4s 0
5s 0
6s 0
7s 0
8s 0
Time
Total Time 00:00:00
Session Time 00:00:00
Tiles / Minute
World
Seed
Chunks in Memory
Avg Size / Chunk
Storage Used
0
Metadata
Welcome — Infinite Minefield
Infinite Minefield
v0.16.0  ·  build %%BUILD_STAMP%%
An infinite minesweeper world that grows as you explore. Your progress saves automatically — close the tab and come back anytime. There's plenty to customize to your liking via the Settings button in the toolbar.
Toolbar
Settings
Gameplay, display & keybinds
Stats
Session & lifetime statistics
Leaderboard
Personal records & best runs
Find Frontier
Jump to your unexplored edge
Center Camera
Snap view back to origin
Game Mode
Switch modes & save slots
About
Changelog, credits & contact info
⚠ Save Incompatible

We're sorry. A recent update changed how the world is generated, and your previous save is no longer compatible. Your progress couldn't be loaded.

What changed:
    This won't happen again.

    The save format is now versioned. Future updates will always be able to read your progress, even if the game changes.

    A fresh world has been started for you. Sorry for the inconvenience.

    ⚠ Start New Game?

    This will permanently delete your current game progress. Consider downloading your save first.

    Current Progress:
    Loading...
    Game Over — Hardcore

    You hit a mine. Your world has been lost.

    ⚠ Delete All Data?

    This will permanently delete your entire save — all explored chunks, progress, and score. Settings will also be reset to defaults. This cannot be undone.

    Current Progress:
    Loading...
    Import World Preview
    ⚙ Import Settings — Preview

    Storage budget and world data will not be affected.

    Restore Backup — Preview

    Choose what to restore:

    Update Available

    A new version of Infinite Minefield is available. The update has already been downloaded and is ready to apply.

    Game Mode
    Standard
    Infinite minesweeper. Explore as far as you dare.
    No Guess
    Every move is logically deducible. Guesses are blocked.
    Hardcore
    One mine hit resets your world.
    Import & export disabled — Hardcore progress is local only
    Play Classic
    Finite board, one game at a time. Pick a difficulty and go.
    No Guess
    Session only — no save between visits
    Standard, No Guess, and Hardcore each have their own independent save. Play Classic is session-only.