Play Minesweeper Online for Free https://mnswpr.com
Find a file
Ayo d5109b8dc9
Some checks failed
Checks / lint (push) Has been cancelled
Checks / test (push) Has been cancelled
Checks / content (push) Has been cancelled
chore: update readme
2026-07-18 22:26:19 +02:00
.github/workflows chore: restore mnswpr to a standalone app repo (#54) 2026-07-18 20:47:19 +02:00
.husky chore: add contribution content checks (#53) 2026-07-16 21:17:44 +02:00
.vscode chore: use eslint for linting & formatting 2026-04-02 14:41:52 +02:00
docs chore: update readme 2026-07-18 22:26:19 +02:00
firebase chore: organize repo 2026-07-18 22:00:07 +02:00
scripts chore: update repo policy to check tool co-authors 2026-07-18 22:04:35 +02:00
src chore: organize repo 2026-07-18 22:00:07 +02:00
.env.development chore: flatten the app workspace 2026-07-18 21:12:24 +02:00
.env.example chore: flatten the app workspace 2026-07-18 21:12:24 +02:00
.gitignore chore: flatten the app workspace 2026-07-18 21:12:24 +02:00
.nvmrc chore: update release gh action 2026-04-03 03:03:08 +02:00
.repo-policy.json chore: update repo policy to check tool co-authors 2026-07-18 22:04:35 +02:00
.secretlintignore chore: security hardening 2026-07-03 23:04:52 +02:00
.secretlintrc.json chore: security hardening 2026-07-03 23:04:52 +02:00
AGENTS.md chore: update repo policy to check tool co-authors 2026-07-18 22:04:35 +02:00
CLAUDE.md chore: init agents instructions 2026-07-18 20:59:25 +02:00
CONTRIBUTING.md chore: update readme 2026-07-18 22:26:19 +02:00
eslint.config.js chore: monorepo scripts (dev, build, db, etc) 2026-07-03 20:25:33 +02:00
LICENSE chore: relicense to MIT (#52) 2026-07-16 21:15:49 +02:00
netlify.toml chore: flatten the app workspace 2026-07-18 21:12:24 +02:00
package.json chore: organize repo 2026-07-18 22:00:07 +02:00
pnpm-lock.yaml chore: flatten the app workspace 2026-07-18 21:12:24 +02:00
pnpm-workspace.yaml chore: flatten the app workspace 2026-07-18 21:12:24 +02:00
README.md chore: update readme 2026-07-18 22:26:19 +02:00
screenshot.png chore: add sreenshot 2026-07-03 10:29:17 +02:00
vite.config.js chore: organize repo 2026-07-18 22:00:07 +02:00
vitest.config.js chore: flatten the app workspace 2026-07-18 21:12:24 +02:00

Play Minesweeper Online for Free

Netlify Status

Play it here: mnswpr.com. This is the classic game Minesweeper built with vanilla web technologies (i.e., no framework dependency).

mnswpr gameplay

How to Play

The goal is to reveal every safe cell without detonating a mine. Your first click is always safe.

  • Left click — reveal a cell
  • Right click — flag / unflag a suspected mine
  • Left + right click together (chording) — reveal the neighbors of a satisfied number
  • Touch — tap to reveal, long-press to flag

Ways to Use

The web is a wonderful, free, and open platform to create and distribute value. You can use mnswpr in different ways:

  • as a deployed web app
  • as a library with npm i @cozy-games/mnswpr
  • as a web component (coming soon).

Using it as a library takes only a few lines — mount it onto any element by id:

import '@cozy-games/mnswpr/mnswpr.css'
import mnswpr from '@cozy-games/mnswpr'

const game = new mnswpr('app')
game.initialize()

Tooling

The project has gone through years of existence. It started from 2019 when tooling was massively different. I have modernized it since and have witnessed how much easier and faster it is to build now - even without web frameworks or LLMs!

As of now the tooling I use are:

  • Vite for bundling and development server
  • Eslint for JS linting & CSS linting
  • ESLint Stylistic for JS formatting
  • Husky for git hooks
  • PNPM for dependency management
  • and a bunch of automation using scripts and Continuous Integration actions

Because a big part of this project's purpose is to track how the software development industry evolves, I now also use it as a playground for coding agents.

Development

Technology Stack: HTML, JS, and CSS; Google Firebase for leader board store; Netlify for hosting

To start development, you need node. I highly recommend pnpm to be used as well. Once you know you have this, you can do the following:

  1. Install dependencies: pnpm i
  2. Start the dev server: pnpm run dev

The rest of the everyday commands:

pnpm test           # run the Vitest suite
pnpm lint           # ESLint (JS + CSS)
pnpm lint:fix       # ESLint with autofix
pnpm run build      # build the website
pnpm run preview    # serve the production build

The game engine and leaderboard are consumed from npm — they live in ayo-run/cozy-games, not here.

Contributing

Contributions are welcome! See AGENTS.md for the architecture, conventions, and release workflow before opening a pull request.

Background

One day, while working in my home office, I heard loud and fast mouse clicks coming from our bedroom. It's my wife, playing her favorite game (Minesweeper) on a crappy website full of advertisements.

I can't allow this, it's a security issue. 🤣

But it is also an opportunity.

I wanted to give her the same game, with a similar leader board she can dominate. And this is also a chance for me to dig deeper into vanilla JS.

Can I make a page with complex interactions (more on this later) without any library dependency?

What I have learned:

  1. JS is awesome
  2. We don't always need JS frameworks (or TS)
  3. Even subtle UI changes can improve user gameplay experience
  4. There's more ways to break your app than you are initially aware of
  5. Competition motivates users to use your app more
  6. Hash in bundled filenames helps avoid issues with browser caching (when shipping versions fast)

License

MIT


Just keep building.
A project by Ayo