UCI Engine Guide
Last checked against Slate 0.5.3, the free UCI engine. Details that apply to one version (file names, the bench number, known issues) say which.
Slate is a free UCI chess engine, written from scratch. It has no graphical interface of its own: you run it inside a chess GUI (a program that shows the board) or from a testing tool. The free engine is the engine only; coaching, game review and human-like play levels are in the Slate Chess app.
1. Quick start
- Download the zip for your computer from slatechess.com/engine/, which always lists the latest version and what each download needs.
- Check the download against its SHA-256 hash (section 3).
- Unzip it. The folder holds
slate(the engine;slate.exeon Windows),ENGINE_LICENSE.txtandTHIRD_PARTY_NOTICES.txt. The Windows download also holds the runtime files the engine needs. - In your chess GUI, add a new UCI engine and point it at the
slatefile (slate.exeon Windows). - Start a game or an analysis. Set Hash and Threads in the GUI's engine settings if you want to.
Which download to choose:
- Mac: Apple silicon (M1 or later) only, macOS 15 (Sequoia) or later. There is no Intel Mac build.
- Linux x86-64: the plain build runs on any x86-64 PC; the AVX2 build ("haswell" in the file name) is a little faster on CPUs from 2013 on and plays exactly the same moves. If you aren't sure your CPU has AVX2, use the plain build.
- Linux arm64: for example a Raspberry Pi 4 or 5 with a 64-bit OS, AWS Graviton or Ampere servers.
- All Linux builds need glibc 2.35 or later (section 4.2).
- Windows x86-64: 64-bit Windows 10 or 11. It needs Microsoft's Visual C++ runtime, which is already on most PCs (section 4.4).
2. Using Slate in a chess GUI
Slate speaks standard UCI, so it should work in any UCI GUI. We test it with cutechess-cli and fastchess, the match tools rating lists use, and with Arena.
- Add the engine: choose "add/install UCI engine" (the name varies) and select the
slatefile itself, not the folder or the zip. - Name and author: the engine reports itself as
Slate 0.5.3byThe Slate developers(the development team's name; the copyright holder is Turtle Leap LLC). - Opening book and endgame tablebases: Slate has none of its own and has no tablebase option. Use your GUI's opening book or test openings. GUI-side tablebase adjudication works as usual.
- Chess960 (Fischer Random): not supported in 0.5.3. Slate doesn't offer
UCI_Chess960, so GUIs won't use it for Chess960 games.
3. Checking your download
Each file has a SHA-256 hash listed next to it on the download page and in SHA256SUMS.txt. Compare the hash of your download with the listed one. If they differ, download again.
- macOS:
shasum -a 256 <downloaded zip>; Linux:sha256sum <downloaded zip> - Check the engine itself: run
./slate benchin the unzipped folder. It searches a fixed set of positions and ends with
Nodes searched : 1329420
1,329,420 nodes is Slate 0.5.3's signature on every platform; each version's number is listed on its download page. The time and nodes per second depend on your machine; the node count must not. A different count means a different or damaged build.
4. Installing: platform notes and fixes
4.1 macOS: "cannot be opened" / "developer cannot be verified"
The Mac engine isn't notarized by Apple yet, so macOS may block it the first time a downloaded copy is run, and some GUIs then just report that the engine "failed to start".
Fix it once, in Terminal, for the unzipped folder:
xattr -dr com.apple.quarantine ~/Downloads/slate-0.5.3-public-macos-arm64
(This example is for 0.5.3; use your folder's name.)
(Use the folder's real location.) Alternatively: try to run it once, then go to System Settings → Privacy & Security and click Open Anyway next to the message about slate.
If the engine still won't start:
- Check that the file is executable:
chmod +x slate. - Check your macOS version: Slate 0.5.3 needs macOS 15 or later and an Apple-silicon Mac.
- Run
./slate benchin Terminal: any error appears there.
4.2 Linux
- Executable bit: if your unzip tool drops it, run
chmod +x slate. - "GLIBC_2.35 not found": the Linux builds need glibc 2.35 or later and the standard C++ runtime (
libstdc++6), which almost every desktop and server distribution has: Ubuntu 22.04 and later, Debian 12 and later, Fedora 36 and later, current Arch and openSUSE Tumbleweed. RHEL / Rocky / AlmaLinux 9 (glibc 2.34) and older distributions can't run it; use a container such asubuntu:24.04. - "Illegal instruction" with the AVX2 build: your CPU has no AVX2; use the plain x86-64 build.
- Size: the Linux binaries are about 58 MB (22 MB zipped) because they carry their own runtime libraries; this is normal.
- Headless use: Slate reads UCI on standard input and writes to standard output, so it works over SSH, in containers and with
cutechess-cli,fastchessand similar tools.
4.3 Slate doesn't write files
Slate writes nothing to disk: no logs, no learning files, no settings. It needs no write access and no network access. Everything it does is in its UCI output.
4.4 Windows: "Windows protected your PC"
The Windows engine isn't code-signed yet, so Windows SmartScreen may show "Windows protected your PC" the first time you run it, and some GUIs then report that the engine "failed to start". Choose More info, then Run anyway. Before you do, check the download against its SHA-256 hash (section 3).
If the engine still won't start:
- A message about a missing DLL (for example
VCRUNTIME140.dllorMSVCP140.dll): install Microsoft's Visual C++ Redistributable (x64) from Microsoft. Most PCs already have it. - Keep the files together:
slate.exeneeds the runtime files that came in the zip, in the same folder. Point your GUI atslate.exein that folder, not at a copy moved somewhere else. - Check the engine itself: open a Command Prompt in the folder and run
slate.exe bench. It should end with 1329420 nodes searched (section 3). - Windows version: Slate 0.5.3 needs 64-bit Windows 10 or 11 on an x86-64 PC. There is no Windows on Arm build.
5. Options
| Option | Type | Default | Range | What it does |
|---|---|---|---|---|
| Hash | spin | 64 | 1–65536 | Transposition table size in MB. Rounded down to a power of two (see 6.1). |
| Threads | spin | 1 | 1–1024 | Search threads (Lazy SMP). Use at most your physical core count. |
| MultiPV | spin | 1 | 1–256 | Number of best lines to show in analysis. Above 1 the engine plays a little weaker; keep 1 for games. |
| Ponder | check | false | Lets the GUI have Slate think on the opponent's time. Slate supports go ponder and ponderhit. | |
| Move Overhead | spin | 30 | 0–5000 | Milliseconds kept back on every move for GUI and network delays. Raise it if Slate loses on time (see 6.3). |
| Contempt | spin | 0 | −100–100 | Centipawns. Positive values make Slate avoid draws (a draw counts as −Contempt for the side to move); negative values make it accept them. Keep 0 for testing. |
| Clear Hash | button | Empties the hash table. | ||
| UCI_ShowWDL | check | false | Adds win/draw/loss chances in per mille (wdl W D L) to the search output. | |
| UCI_AnalyseMode | check | false | Accepted for GUI compatibility; it doesn't change the search. | |
| UCI_EngineAbout | string | Information only. |
Unknown option names are answered with info string unknown option <name> and ignored.
6. Gotchas
6.1 Hash is rounded down to a power of two
Hash 100 becomes 64 MB, and Hash 1000 becomes 512 MB. Slate says so in its output (info string Hash 1000 MB rounded to 512 MB (a power of two)). Use 16, 32, 64, 128, 256, 512, 1024, 2048 … to get exactly what you ask for.
6.2 Keep Hash within your memory (and at most 65536)
Set Hash well below your computer's free memory: a table larger than the memory you have makes the engine very slow to start. GUIs keep to the advertised maximum of 65536 MB; in 0.5.3 a hand-written script or config that sends a larger value makes the engine stop responding while it tries to allocate it (fixed in 0.5.4, which caps it).
6.3 Losing on time
Slate's time management is tuned for local play, and it lost no games on time in 960 fast test games (down to 20 seconds plus 0.3 seconds a move). If it does lose on time on your setup, the cause is usually delay between the GUI and the engine: a busy machine, many games in parallel, a slow GUI, or a network link. Raise Move Overhead: 100 ms for a loaded machine, 300–1000 ms over a network.
6.4 Reproducible results
With one thread, the same Hash size and a fixed node count (go nodes N), Slate plays the same moves every time, provided each game starts with ucinewgame (most GUIs send it). Without it, the hash table keeps what the previous search learned and the result can differ. With more than one thread, results vary from run to run, as with any multi-threaded engine.
6.5 No legal move
When the position is checkmate or stalemate, Slate answers go with bestmove (none).
6.6 Invalid positions
An unreadable FEN is reported as info string invalid position (ignored): … and Slate keeps the previous position. If analysis looks wrong after pasting a position, check the GUI's engine log for that line.
6.7 Large thread counts
Threads up to 1024 is accepted, but more threads than physical cores slows Slate down. Starting many threads takes a moment; send isready and wait for readyok before go (GUIs do this).
7. For rating lists and engine testers
- Identification:
id name Slate 0.5.3,id author The Slate developers. Copyright holder: Turtle Leap LLC. - Verification:
slate bench(or the UCI commandbench) must report 1,329,420 nodes (section 3). - Recommended settings: the defaults are fine. Set Hash and Threads to your list's conditions; leave Contempt at 0, MultiPV at 1 and Ponder off unless your conditions say otherwise.
- Single-thread and multi-thread: both are supported. Our own measurements are single-threaded.
- Self-contained: no opening book, no tablebases, no learning, no files written, no network access. Results depend only on the settings and the openings you give it.
- Supported
goparameters:wtime,btime,winc,binc,movestogo,depth,nodes,mate,movetime,infinite,ponder,searchmoves.stopandponderhitare handled immediately, even mid-search. - Output: standard
infolines withdepth,seldepth,multipv,score cp/score mate, optionalwdl,nodes,nps,hashfull,timeandpv, thenbestmove … ponder …. - Our own strength estimate: about 3,220 on a CCRL-like scale, from our own matches against public engines (1 thread, 10 s + 0.1 s per game, Apple M3 Max). It is not an official rating-list figure; your list's own figure is the one that counts.
- Publishing: you may publish results, games, ratings and statistics, and pass on unmodified copies of the zip to other testers of your list (see the licence).
- Contact: questions, bugs or a request for a specific build: support@slatechess.com.
8. Debugging commands
These aren't part of UCI but help when something looks wrong. Type them after starting ./slate in a terminal.
| Command | What it does |
|---|---|
bench | The verification search (section 3). Also works as ./slate bench. |
d | Shows the current board, its FEN and its hash key. |
eval | Shows the static evaluation of the current position (centipawns, from the side to move). |
perft N | Counts all positions N moves deep, per first move: a check of move generation. |
quit | Exits. |
A minimal session:
uci
isready
position startpos moves e2e4
go movetime 2000
quit
9. Reporting a problem
Write to support@slatechess.com with:
- the file you downloaded and your operating system version (and CPU, for Linux);
- the output of
./slate bench; - your GUI or testing tool and its version, the time control, Hash and Threads;
- the engine log from your GUI (most GUIs can save the UCI communication) or the PGN of the game, and the FEN if it's about one position.
10. Licence, in short
The engine is free for personal use, analysis, engine testing and rating lists. You may publish your results and games, and pass on unmodified copies for those purposes. Selling it, embedding it in another product or service, modifying it or reverse-engineering it needs written permission. The full licence is in ENGINE_LICENSE.txt in every zip; the third-party notices are in THIRD_PARTY_NOTICES.txt.
Questions, bug reports or a request for a specific build: support@slatechess.com. See "Reporting a problem" above for what to include. For the Slate Chess app, use the support page.