mirror of
https://github.com/chesskit-app/chesskit-engine.git
synced 2026-05-19 15:50:35 +00:00
307065d56eb9b9c3b25326b9333946ea445c8f0a
♟️🤖 ChessKitEngine
A Swift package for chess engines.
ChessKitEngine implements the Universal Chess Interface protocol for communication between chess engines and user interfaces built with Swift.
Usage
- Add a package dependency to your Xcode project or Swift Package:
.package(url: "https://github.com/chesskit-app/chesskit-engine", from: "0.1.0")
- Next you can import
ChessKitEngineto use it in your Swift code:
import ChessKitEngine
// ...
Features
- Initialize an engine and set response handler
// create Stockfish engine
let engine = Engine(type: .stockfish)
// set response handler
engine.receiveResponse = { response in
print(response)
}
// start listening for engine responses
engine.start()
- Send UCI protocol commands
// check that engine is running before sending commands
guard engine.isRunning else { return }
// stop any current engine processing
engine.send(command: .stop)
// set engine position to standard starting chess position
engine.send(command: .position(.startpos))
// start engine analysis with maximum depth of 15
engine.send(command: .go(depth: 15))
- Update engine position after a move is made
// FEN after 1. e4
let newPosition = "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1"
engine.send(command: .stop)
engine.send(command: .position(.fen(newPosition))
engine.send(command: .go(depth: 15))
- Receive engine's analysis of current position
// receiveResponse is called whenever the engine publishes a response
engine.receiveResponse = { response in
switch response {
case let .info(info):
print(info.score) // engine evaluation score in centipawns
print(info.pv) // array of move strings representing best line
default:
break
}
- Terminate engine communication
// stop listening for engine responses
engine.stop()
- Enable engine response logging
// log engine commands and responses to the console
engine.loggingEnabled = true
// Logging is off by default since engines can be very
// verbose while analyzing positions and returning evaluations.
Supported Engines
The following engines are currently supported:
Author
License
ChessKitEngine is distributed under the MIT License.
Languages
Swift
86.5%
Objective-C++
5.2%
Objective-C
4.4%
C++
3.1%
C
0.8%