Thanks for your interest in MetalFish. The project is licensed under GPL-3.0 and contributions are accepted under the same license.
Download the network files before building (CMake copies the NNUE files into
build/ at configure time, so they must exist first):
python3 tools/download_engine_networks.py --dest networksmacOS (Apple Silicon — the primary path):
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DUSE_METAL=ON
cmake --build build --target metalfish metalfish_tests -j"$(sysctl -n hw.ncpu)"For Linux/Windows CUDA, see the README and docs/cross_platform_backend_plan.md.
./build/metalfish_tests # C++ unit suite: core search eval_gpu mcts hybrid
python3 tests/testing.py --quick # UCI protocol + perft smoke
python3 tests/test_lichess_bot.py
python3 tests/test_lichess_puzzle_runner.pypre-commit enforces clang-format (C++), black + isort (--profile=black,
Python), cmake-format, and check-yaml. Run it before committing:
pre-commit run --all-files- Keep changes focused — one logical change per PR.
- Run the unit suite and
pre-commitlocally; CI must be green before merge. - For search/eval behavior changes, include validation evidence. The engine is already strong, so gains are incremental and need low-noise measurement (cutechess tournaments and/or the Lichess bot), not single positions.
- Strength claims must follow the README "Benchmarking Policy" and "Strength Claims" sections — no "stronger than X" wording without large-scale testing.
MetalFish derives from Stockfish (alpha-beta search and NNUE evaluation) and is Lc0-compatible (MCTS and the BT4 transformer), both GPL-3.0. See the README "Acknowledgements" section.