Welcome to F97.BE!
Python, Photons, and Predictions.
Zugwunder
Zugwunder is a native chess application for macOS with a chess engine of its own, written from scratch in Swift. It does three things: it solves chess problems, it trains your tactics, and it plays against you. Its engine is also available as a stand-alone UCI engine, so you can use it in any other chess program, from analysis boards to engine tournaments.
The name is a play on the German words Zugzwang (the compulsion to move, even when every move makes things worse) and Wunder (miracle). The program speaks German, English, French and Dutch.
System requirements
Zugwunder requires a Mac with Apple silicon (M1 or later) and macOS 14 Sonoma or later. It is written entirely in Swift and optimised for Apple's own chips; there is no version for Intel Macs, Windows or Linux. That includes the UCI engine, which runs only on the Mac as well.
What Zugwunder can do
- Problem solver: mate, helpmate, selfmate and stalemate in n moves. Zugwunder shows the complete solution tree, including every defence, and checks whether a problem has alternative solutions (cooks).
- Board editor: set up any position by hand or paste a FEN; Zugwunder checks that the position is legal before it starts.
- Tactics trainer: puzzles from the Lichess puzzle database, a personal library of your own puzzles, and progress tracking by theme and difficulty.
- Playing partner: games against the engine at three strength levels, with a chess clock, an opening book and move announcements.
- Game analysis: open PGN files, step through games and let the engine point out mistakes and better moves.
- UCI engine: the command Install UCI engine in ~/bin puts the engine on your Mac for other chess programs. The disk image also contains it, together with an English guide to all of its options.
Inside the engine
Zugwunder's engine is a classical alpha-beta searcher with the techniques that strong engines have in common: principal variation search, a transposition table, null-move pruning, late move reductions, futility and static-exchange pruning, and careful time management that thinks longer when the best move is unstable. With Lazy SMP it searches on several processor cores at once.
Positions are evaluated by a small neural network, an NNUE (768 inputs, two accumulators of 256 neurons, one output). The network is updated incrementally as moves are made, so it costs little more than a hand-written evaluation while understanding chess far better. In endgames, Zugwunder plays perfectly: it computes exact tables for king and queen, king and rook, king and pawn, king, bishop and knight, and king and rook against king and bishop while it starts, and it can use Syzygy tablebases for all endgames with up to five pieces.
How Zugwunder was made
Zugwunder began in September 2026 as Mattlotse ("mate pilot"), a solver for chess problems. To solve problems it needed a fast, correct move generator and search - and from there it was a short step to an engine that plays. The whole program was developed by Erik Schmidt: every line of it is new; no code or data from other engines is included.
The most important rule of the project is: nothing is accepted without measurement. Every change to the engine, however convincing it looks, has to prove itself in thousands of fast games against the previous version. A statistical test (SPRT) decides when enough games have been played; changes that do not make Zugwunder stronger are thrown away.
The neural network learned chess only from Zugwunder itself. The engine played hundreds of thousands of fast games against itself overnight on a Mac Studio, the positions were labelled with its own search results and final game outcomes, and the network was trained in PyTorch on the Mac's GPU. Each new network then played the old one:
- Network v1: 24.3 million positions from self-play - +225 Elo over the hand-written evaluation.
- Network v2: 41.4 million positions, partly played by v1 - +54 Elo over v1.
- Network v3: 66.7 million positions, partly played by v2 - +104 Elo over v2.
To place Zugwunder on a public scale, it played 1000 games against Stockfish 19 at calibrated strength levels (2850, 3000, 3100 and 3190 Elo), under conditions like those of the CCRL rating list: 60 seconds plus 0.6 seconds per move, one core, 256 MB hash, 5-piece Syzygy tables. The result: Zugwunder 1.0.17 plays at about 2986 ± 17 Elo on the CCRL blitz scale. That is an estimate, not an official rating.
What's next
- Network v4: training starts today, 27 September 2026. The Mac will play and learn around the clock; each new network only replaces the old one if it wins the match.
- A public rating: once the engine has settled, the UCI engine is to be submitted to the rating lists, so that its strength is measured independently.
- More for engine users: pondering, Chess960 and a strength limit for the UCI engine are not supported yet and are candidates for later versions.
Zugwunder updates itself: new versions, including new networks, are offered inside the app as soon as they are available.
Download
The current version for Apple silicon can be downloaded here: Zugwunder-1.1.0.dmg
To go with it, there is a lean chess interface for UCI engines called Grindmaster Trash – all the good names were taken, unfortunately – which can be downloaded here: Grindmaster-Trash-1.0.2.dmg
Everything is multilingual, dutifully notarised by Apple and, of course, completely free. Have fun!