The Stockfish Chess Engine for Flutter.
The Leela Chess Zero (lc0) neural network chess engine for flutter is coming soon...
This package wraps the Stockfish chess engine (C++) for use in Flutter applications on Android and iOS. It uses Dart FFI (Foreign Function Interface) to communicate between Dart and native C++ code. For more information go to architecture.md.
Check out this working chess game using this package by @PScottZero.
Also see the example folder for a minimal Flutter app demonstrating usage.
iOS project must have IPHONEOS_DEPLOYMENT_TARGET >=12.0.
Update dependencies section inside pubspec.yaml:
stockfish: ^1.7.0import 'package:stockfish/stockfish.dart';
// create a new instance
final stockfish = Stockfish();
// state is a ValueListenable<StockfishState>
print(stockfish.state.value); # StockfishState.starting
// the engine takes a few moment to start
await Future.delayed(...)
print(stockfish.state.value); # StockfishState.readyWaits until the state is ready before sending commands.
stockfish.stdin = 'isready';
stockfish.stdin = 'go movetime 3000';
stockfish.stdin = 'go infinite';
stockfish.stdin = 'stop';Engine output is directed to a Stream<String>, add a listener to process results.
stockfish.stdout.listen((line) {
// do something useful
print(line);
});There are two active isolates when Stockfish engine is running. That interferes with Flutter's hot reload feature so you need to dispose it before attempting to reload.
// sends the UCI quit command
stockfish.stdin = 'quit';
// or even easier...
stockfish.dispose();Note: only one instance can be created at a time. The factory method Stockfish() will return null if it was called when an existing instance is active.