Chess Lab by GVP
Designed and built by GVP — WebApp by GVP.
Chess Lab is a single-player training app. Everything — the rules, the engine, the analysis and your progress — runs and is stored in your browser. There are no accounts, no tracking and no server-side processing. Your games never leave your device.
Engine
The computer opponent and the analysis use Stockfish 19 (lite network, single-threaded WebAssembly build from stockfish.js 19.0.1), loaded on demand into a dedicated Web Worker. Play, review and variation exploration each use a separate worker so searches can't interfere.
| Level | Skill Level | Search limit |
|---|---|---|
| Beginner | 0 | depth 1 |
| Casual | 4 | depth 3 |
| Intermediate | 9 | depth 7 |
| Advanced | 15 | depth 12 |
| Expert | 20 | 1500 ms per move |
These tiers are approximations built from Stockfish's own Skill Level option and search limits. They are not calibrated Elo ratings.
How game review works
- Every position of the game (N moves → N+1 positions) is evaluated at a fixed depth: Quick = 10, Standard = 14, Deep = 18.
- Stockfish reports scores from the side to move; all scores are converted to White's point of view before comparison. Mate scores are kept separate from centipawns.
- Each score becomes a win chance using the logistic curve Lichess publishes (50 + 50·(2/(1+e−0.00368·cp) − 1)); mates are 0 % or 100 %.
- A move's cost is the win chance its player gave up versus the engine's best move in the position before it.
- Labels: Best = the engine's move or < 0.5 points lost; Excellent < 2; Good < 5; Inaccuracy < 10; Mistake < 20; otherwise Blunder.
- “Brilliant” is intentionally not offered: there is no defensible rule for it from evaluation deltas alone.
- Accuracy uses the published formula 103.17·e−0.0435·loss − 3.17, averaged per player. It is an estimate.
These are local estimates and are not official classifications from any chess website.
Puzzles
5,265 puzzles from the Lichess Open Puzzle Database, released under CC0. They were selected from 3,625,534 records by a deterministic script (popularity ≥ 70, ≥ 300 plays, rating deviation ≤ 90, balanced across rating bands and themes), validated move-by-move, and kept verbatim — IDs, ratings, themes and solutions are unchanged. Thanks to Lichess and its players for making this data free.
Licences and source
- Stockfish — GNU General Public License v3. Full text: COPYING-stockfish.txt. The unmodified engine binaries served at
/engine/are built from the stockfish.js 19.0.1 source: https://github.com/nmrugg/stockfish.js/tree/v19.0.1 (Stockfish itself: official-stockfish/Stockfish). - Chess Lab application code — GNU GPL v3 or later, so the app and the engine it distributes are under compatible terms. The complete source of this app is published with the project.
- chess.js — BSD 2-Clause. react-chessboard (including its default piece set) — MIT. Next.js, React — MIT.
- Puzzle data — Lichess Open Puzzle Database, CC0 1.0 (public domain dedication).
Chess Lab is an independent project and is not affiliated with Lichess, Chess.com or the Stockfish team.
Install as an app
- Android / Chrome / Edge: use the Install app button in the menu, or the browser's “Install” / “Add to Home screen” option.
- iPhone / iPad (Safari): tap Share, then Add to Home Screen.
- Mac / Windows: in Chrome or Edge, click the install icon in the address bar.
Once installed it opens in its own window, and after the first visit the engine and puzzles keep working offline.
Privacy
No cookies, analytics or network calls beyond loading this site's own files. Preferences, unfinished games, game history and puzzle progress are stored in localStorage on this device only. Clearing site data removes them.