WebAssembly builds for Stockfish.
This package is optimized for the lichess.org website, which needs multiple builds and chess variants. It is not straight-forward to load and use.
Check out https://github.com/nmrugg/stockfish.js for a simpler browser Stockfish.
# Example: Clean and make all web targets
./build.py all clean
Use --cxx-flags to override the default emcc flags which are -O3 -DNDEBUG --closure=1.
Use --ld-flags to override default linker flags (--ld-flags='-sENVIRONMENT=node' to target node).
Check ./build.py --help for all available targets.
To avoid installing or changing your emscripten version, use ./build-with-docker.sh or ./build-with-podman.sh:
# Example: Docker clean and make all targets for node as debug with SAFE_HEAP
./build-with-docker.sh --cxx-flags='-O0 -g3 -sSAFE_HEAP' --ld-flags='-sENVIRONMENT=node' all clean
# Example: Clean and make dist targets for web with a preallocated pthread pool size of 8
./build.py --ld-flags='-sENVIRONMENT=web,worker -sPTHREAD_POOL_SIZE=8' clean dist
./build.py downloads sources to the ./fishes folder then applies diffs from the ./patches folder.
Edit the Stockfish sources within ./fishes. Contribute your edits via patch file.
# Example: Update `sf_18.patch` with your source changes:
cd fishes/sf_18
git diff > ../../patches/sf_18.patch
Download the required nnues from the list below. Then:
./build.py --ld-flags='-sENVIRONMENT=node'
node ./src/wasm-cli.js ./sf_18.js
uci
- repo: https://github.com/official-stockfish/Stockfish
- base: cb3d4ee9
- tag: sf_18 (patch includes rebase of https://github.com/sscg13/Stockfish/tree/threat-small)
- nnue: nn-4ca89e4b3abf.nnue
- repo: https://github.com/official-stockfish/Stockfish
- base: cb3d4ee9
- tag: sf_18
- big nnue: nn-c288c895ea92.nnue
- small nnue: nn-37f18f62d772.nnue
- repo: https://github.com/official-stockfish/Stockfish
- base: 415ff793
- tag: stockfish-dev-20260609-415ff793
- nnue: nn-71d6d32cb962.nnue
- repo: https://github.com/fairy-stockfish/Fairy-Stockfish
- base: a621470b
- nnues: see repo links
Stockfish 14 without dynamic import() in WebWorker.
stockfish.wasm and stockfish-mv.wasm
SF_classical (strongest handcoded eval) and multi-variant equivalent.
No SIMD. No dynamic import() in WebWorker.
Stockfish 10 in pure JavaScript or WebAssembly without shared memory.