Game review
css-sweeper
4 / 10
- Developer
- Jane Ori (James0x57, PropJockey)
- Publisher
- Independent
- Released
- 1 January 2020
- Platforms
- Web browser (desktop primarily; touch technically supported but impractical)
- Genre
- Puzzle
- Monetisation
- Free, open source, no ads and no in-game purchases
- Players
- Single-player only
The short version
css-sweeper is a real, complete Minesweeper implementation with no JavaScript anywhere in it — the board state, the flood-fill-free win condition, even the LCD-style mine counter, all run on a CSS variable trick called Space Toggle that the author helped popularise. That's a genuine and well-documented technical achievement, and it's popular for good reason: 857 GitHub stars and updates as recent as August 2026. It is also, measured directly rather than guessed at, unplayable on a phone: the only board size on offer is Minesweeper's 30-column, 16-row Expert grid, which works out to roughly 12.5 CSS pixels per cell on a 390-pixel phone viewport — smaller than a human fingertip's contact area by a wide margin, on a fixed grid with no way to choose an easier size. Brilliant to read about; not something to hand a friend on their phone.
Biggest strengths
- The "no JavaScript" claim is real and checkable in the page source — every game state (revealed cells, flags, the win/loss condition, even the seven-segment mine counter) is driven entirely by checkbox/radio `:checked` states composed through CSS custom properties, a technique called Space Toggle that this project's own author helped popularise and that the README documents in real technical detail
- The win condition is a genuinely thoughtful redesign for the medium, not a corner cut: since CSS has no loops and can't do a real flood-fill reveal, the game instead asks the player to correctly flag every mine (revealing is optional, for gathering number clues), which the README explains plainly and which still produces a real, winnable puzzle
- A dedicated flag-mode toggle switches what a tap does across the whole board — the same touch-native answer to Minesweeper's usual left-click/right-click split that PROXX uses, genuinely well thought through even though the cell size elsewhere undermines it
Biggest weaknesses
- Measured directly via the rendered page, not estimated from a screenshot: the only board on offer — all sixteen preset "fields" and the random generator alike — is a fixed 30-column by 16-row grid (Minesweeper's classic "Expert" size, confirmed against the ID range of every cell in the markup), which renders at roughly 12.5x12.5 CSS pixels per cell on a 390-pixel phone viewport. That is far below any usable touch target on any accepted mobile guideline, and there is no smaller/easier board size to fall back to
- A shipped Google Analytics beacon (`gtag.js`, tag `UA-146833088-2`) pointed at a Universal Analytics property that Google itself sunset in mid-2023 — dead, but still a third-party beacon that had no business firing on a visitor's device. Stripped before hosting this copy; flagged here per house policy on exactly this pattern
- Reaching the actual board takes navigating through a "select your field" screen and a "click-click!" confirmation overlay, both implemented as large, full-width CSS `:target` panels that share screen space with each other and, at points, with the minefield underneath — testing found this stack genuinely fiddly to navigate precisely, on both the phone and desktop profiles
Who it's for: CSS and front-end engineers who want to see a genuinely inventive no-JavaScript technique proven out at scale, played on a desktop with a mouse
Our recommendation: Worth a look on a laptop purely for the engineering; do not expect to actually play a round of it on a phone
4 / 10
Minesweeper has become the go-to proving ground for "can this technology actually build a game," and css-sweeper is one of the more serious attempts at answering that question with CSS alone. The claim in its own title — implemented in CSS + HTML, no JavaScript — holds up under direct inspection: the only <script>-adjacent thing anywhere in the page is a font stylesheet link, and every piece of game state, from a single revealed cell to the seven-segment mine counter at the top of the board, is wired through chains of hidden <input type="checkbox"> and <input type="radio"> elements composed with a CSS custom-property trick its README calls Space Toggle. It's real engineering, not a trick title, and it's popular for exactly that reason — 857 GitHub stars and commits as recent as the end of last month, six years after the project's first release.
A properly redesigned win condition, not a shortcut
What's genuinely clever here isn't just that it works, but how the author adapted the rules to what CSS can and can't do. A normal Minesweeper flood-fills every connected empty area the moment you reveal one — trivial in a language with loops, impossible in one without them. Rather than fake it or give up, the README explains the actual fix: the win condition was redesigned around flagging instead. Flag every mine, don't flag anything that isn't one, and you win — revealing cells becomes an optional way to gather number clues rather than the objective itself. It's a change that respects what the medium can do rather than working around a missing feature, and it still produces a real, satisfying puzzle to solve. The touch layer gets the same care: a dedicated flag-mode toggle switches what a tap does across the whole board, the same solution PROXX uses for the exact same left-click/right-click problem, and it's a genuinely well-reasoned answer on paper.
The number that matters more than any of that
Here's the fact that decides this review, and it's not a matter of opinion: every one of the sixteen preset boards, and the random generator alongside them, is fixed at 30 columns by 16 rows — Minesweeper's classic "Expert" difficulty, confirmed directly against the ID range of every cell checkbox in the page (sweepgrid-0-0 through sweepgrid-15-29). There is no smaller, easier board anywhere in the game. Measuring the actual rendered cell size on a simulated 390-pixel-wide phone screen puts each cell at roughly 12.5 by 12.5 CSS pixels — not an estimate from a screenshot, but the real number getBoundingClientRect() reports for the cell element itself. A human fingertip's contact area on a touchscreen runs somewhere around 40 to 50 CSS pixels; a 12.5-pixel target is smaller than that by a factor of three or four, adjacent to 479 other targets exactly the same size with no gap between them. Whatever mechanism drives the cell underneath — and the checkbox/label activation genuinely does work correctly when hit precisely, confirmed directly rather than assumed — a real thumb is not going to hit the intended cell reliably at that size, and there's no setting anywhere to make the board bigger or the phone's board smaller.
Reaching the board at all adds its own friction on top. Getting from the field-select screen to an actual game means navigating a stack of full-page CSS :target panels — the field picker, a "click-click!" confirmation overlay that sits on top of the board's own upper rows — and testing repeatedly found this stack awkward to navigate precisely on both the phone and desktop profiles, landing taps on the wrong layer more than once during this review's own testing. None of that is explained in-game either: there is no help text anywhere describing the flag-only win condition or the flag-mode toggle, so a first-time player is relying entirely on decades-old Minesweeper convention with zero on-screen guidance from the game itself.
One more thing worth flagging before publishing
The copy of the page installed for this review had a Google Analytics beacon (gtag.js, property UA-146833088-2) loading on every visit. That specific Universal Analytics property was shut down by Google itself in mid-2023, so the beacon fires into the void rather than actually tracking anyone — but it was still there, still requesting a third-party script on every load, and it has been stripped from the hosted copy here rather than left in.
The verdict
Judged purely as a piece of CSS engineering, css-sweeper is exactly as clever as its star count suggests, and the win-condition redesign in particular shows real thought about what the medium is actually good at. Judged as a game to hand someone on their phone, which is what this shelf promises, it fails on a number that isn't up for debate: a fixed Expert-sized board rendering cells a third the size of a fingertip. Play it on a laptop for the novelty. Don't expect to clear a single field on a phone.
Pros and cons
Pros
- The "no JavaScript" claim is real and checkable in the page source — every game state (revealed cells, flags, the win/loss condition, even the seven-segment mine counter) is driven entirely by checkbox/radio `:checked` states composed through CSS custom properties, a technique called Space Toggle that this project's own author helped popularise and that the README documents in real technical detail
- The win condition is a genuinely thoughtful redesign for the medium, not a corner cut: since CSS has no loops and can't do a real flood-fill reveal, the game instead asks the player to correctly flag every mine (revealing is optional, for gathering number clues), which the README explains plainly and which still produces a real, winnable puzzle
- A dedicated flag-mode toggle switches what a tap does across the whole board — the same touch-native answer to Minesweeper's usual left-click/right-click split that PROXX uses, genuinely well thought through even though the cell size elsewhere undermines it
- Actively maintained six years on: 857 GitHub stars and commits as recent as 30 August 2026, a real, ongoing project rather than an abandoned demo
- Cleanly BSD-2-Clause licensed, confirmed by reading the actual LICENSE file rather than trusting an API field, with the author's name in both the licence and the page itself
Cons
- Measured directly via the rendered page, not estimated from a screenshot: the only board on offer — all sixteen preset "fields" and the random generator alike — is a fixed 30-column by 16-row grid (Minesweeper's classic "Expert" size, confirmed against the ID range of every cell in the markup), which renders at roughly 12.5x12.5 CSS pixels per cell on a 390-pixel phone viewport. That is far below any usable touch target on any accepted mobile guideline, and there is no smaller/easier board size to fall back to
- A shipped Google Analytics beacon (`gtag.js`, tag `UA-146833088-2`) pointed at a Universal Analytics property that Google itself sunset in mid-2023 — dead, but still a third-party beacon that had no business firing on a visitor's device. Stripped before hosting this copy; flagged here per house policy on exactly this pattern
- Reaching the actual board takes navigating through a "select your field" screen and a "click-click!" confirmation overlay, both implemented as large, full-width CSS `:target` panels that share screen space with each other and, at points, with the minefield underneath — testing found this stack genuinely fiddly to navigate precisely, on both the phone and desktop profiles
- No in-game instructions anywhere in the page: nothing explains the flag-only win condition, the flag-mode toggle, or how to read the counter, so a first-time player is working entirely from Minesweeper convention with no help from the game itself