dehlen / chesskit-engine

β™ŸοΈπŸ€– Swift package for UCI chess engines.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

β™ŸοΈπŸ€– ChessKitEngine

checks codecov

A Swift package for the following chess engines:

ChessKitEngine implements the Universal Chess Interface protocol for communication between chess engines and user interfaces built with Swift.

For a related Swift package that manages chess logic, see chesskit-swift.

Usage

  • Add a package dependency to your Xcode project or Swift Package:
.package(url: "https://github.com/chesskit-app/chesskit-engine", from: "0.2.0")
  • Next you can import ChessKitEngine to 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()
// 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.
  • Enable engine neural networks
    • Copy the relevant file in the Resources directory of this repo to your app's bundle, then use the engine-specific commands to provide them to the engine (where fileURL is a String of the URL of the file).
    • These must be called in the order shown.
    • For Stockfish 15.1 (nn-1337b1adec5b.nnue):
      engine.send(command: .setoption(id: "EvalFile", value: fileURL))
      engine.send(command: .setoption(id: "Use NNUE", value: "true"))
    • For LeelaChessZero 0.29 (192x15_network):
      engine.send(command: .setoption(id: "WeightsFile", value: fileURL))

Supported Engines

The following engines are currently supported:

Engine Version License Options Reference
Stockfish 16.1 GPL v3 πŸ”—
lc0 0.29 GPL v3 πŸ”—

Author

@pdil

License

ChessKitEngine is distributed under the MIT License.

About

β™ŸοΈπŸ€– Swift package for UCI chess engines.

License:MIT License


Languages

Language:Swift 87.1%Language:Objective-C++ 5.0%Language:Objective-C 4.7%Language:C++ 2.5%Language:C 0.8%