Skip to content

♟️🤖 Swift package for UCI chess engines.

License

Notifications You must be signed in to change notification settings

dehlen/chesskit-engine

 
 

Repository files navigation

♟️🤖 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.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Swift 87.0%
  • Objective-C++ 5.0%
  • Objective-C 4.7%
  • C++ 2.5%
  • C 0.8%