Skip to content

brianhliou/mistboard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,360 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

CI License: AGPL-3.0

Mistboard screenshot showing the same Fog of War chess position from White and Black perspectives

Mistboard is a free, open-source platform for dark chess, also called Fog of War chess. It is a hidden-information chess variant where the server enforces what each player can see: their own pieces, opponent pieces in view, and legal moves from that partial information.

The project goal is to build the trustworthy open-source place to play, study, rank, and build engines for hidden-information games, starting with dark chess.

Mistboard is independent. It is not affiliated with lichess, chess.com, or any other chess platform.

Features

  • Low-friction PvP dark chess rooms with shareable room links and account-optional play.
  • Postgame replay from either player's perspective or full truth.
  • Public game links with PGN and JSON export.
  • A first-party engine track that uses the same redacted EngineTurnRequest boundary available to any third-party engine.

Live PvP dark chess is playable at mistboard.com. The current stage and launch gates are tracked in docs/STATUS.md and docs/ROADMAP.md.

Development

Prerequisite: Node.js 22 or newer.

npm install
npm run dev

Open http://localhost:3000.

Useful checks:

npm test
npm run typecheck
npm run verify -- --changed

For Postgres-backed replay, reconnect, and persistence flows:

npm run db:up
npm run db:migrate
npm run dev:persistent

See CONTRIBUTING.md for the contributor workflow, local test matrix, and pull request expectations.

Code

Mistboard is a small TypeScript npm workspace:

packages/game           Pure game logic: types, rules, visibility, variants
packages/board-render   Shared SVG and browser board rendering primitives
apps/server             WebSocket rooms, clocks, event log, HTTP API
apps/web                Vite browser client, game screens, replay, learning UI

The server owns canonical GameState. Clients receive only a PlayerView, the seat-scoped projection produced by the rules package. This is the core hidden-information boundary: hidden pieces, hidden opponent moves, and live truth state must never be sent to the wrong consumer.

The browser client is a no-framework Vite build using chessground for board interaction and chessops for chess primitives. The server is a Node.js WebSocket process with Postgres for the event log and game history.

See docs/ARCHITECTURE.md for the full data flow and state model.

Documentation

Use GitHub issues for bug reports and feature requests.

Contributing

See CONTRIBUTING.md, CODE_OF_CONDUCT.md, and SECURITY.md.

License

AGPL-3.0-or-later. See LICENSE.

For uses that require terms other than AGPL, such as closed-source distribution, reach out via mistboard.com/contact.

Governance

Mistboard is founder-led. The code is open source, but the official project identity, mistboard.com, hosted service, roadmap, and production infrastructure remain controlled project assets.

See GOVERNANCE.md, TRADEMARK.md, and docs/project-direction.md.