Under the board

Two engines, both on your phone

The coach is not a heuristic, not a lookup table and not a language model with opinions about chess. It is a top-ranked chess program searching the position in front of you, on your device, with no network anywhere in the loop — and there are two of them in the app, because a second opinion is worth having.

It runs on the device

The engine is compiled into the app and searches locally. That is not a privacy slogan — it is what makes the app work on a train, and what makes “analyse this” instant rather than a round trip to somebody’s GPU with a queue in front of it.

It also means the app has nothing to send anywhere, which is why the privacy policy is as short as it is.

Stockfish plays at a strength you set

Anywhere from about 1400 to full strength. A limited engine is not a strong engine playing badly on purpose in the obvious way: strength is limited by restricting how deep and how widely it searches, so it plays like somebody who did not see far enough — which is what a human opponent actually feels like.

Reckless has no such limiter, so choosing it takes the opponent ladder down to one rung: full strength. Settings says so before you choose rather than after.

It defends properly in the endgames

In the endgame drills the engine takes the other side and puts up the best defence there is. Knowing that king and pawn against king is winning is not the same as converting it against a defence that never errs, and the difference between those two states is exactly the thing the mode is for.

Both of them, one at a time

You pick which one plays.

Stockfish and Reckless are both compiled into the app. One of them is chosen in Settings, and from then on it plays, it grades your moves, and it labels the endgame drills. They do not run at once, and they never play each other — a second engine here is a second opinion you can switch to, not a spectacle to watch.

Stockfish 18

The strongest engine there is, and the only one here that can play down to a rating.

GPLv3 · source

Reckless 0.10

A different opponent with its own taste in positions. It has no strength limiter, so it plays at full strength or not at all.

AGPLv3 · source

Why bother with the second one? Because two engines that are both near the top of the rating lists still disagree, and the positions where they disagree are the interesting ones. An engine is not an oracle; it is a very strong player with a taste in positions, and having two of them makes that visible instead of hiding it behind a single number.

The one design decision worth arguing about

Move grading uses win probability, not centipawns.

Losing a hundred centipawns when you are already up a queen barely matters. Losing them in a level position is decisive. Centipawns cannot tell those apart — they are a linear scale laid over a game whose outcomes are not linear at all.

So every evaluation is converted to a win probability first, and the grade is the drop in your chances of winning. A trainer that says blunder when nothing happened stops being worth listening to, and once you stop listening the whole thing is decoration.

And then it says something

“−1.4” is not feedback. This is.

Once the engine has an answer, a coaching layer turns it into a sentence about the position — built from the features that actually changed, not from a template with the move pasted in.

  • “takes the open d-file”
  • “plants the knight on the e5 outpost, where no pawn can dislodge it”
  • “pries open lines toward the enemy king”
  • “leaves the opponent with an isolated pawn”
  • “lands the rook on the seventh rank”
  • “breaks up the enemy bishop pair”

All of it translated into 31 languages — including the chess vocabulary, which is the part a player notices being wrong. A fork is a horquilla in Spanish, a fourchette in French, 捉双 — “catching two” — in Chinese and 両取り in Japanese.

The licence

Using these engines has a price, and it is not money.

Stockfish is free software under the GPLv3. Reckless is free software under the AGPLv3. Both are linked into this app, and both licences are copyleft: a work that includes them and is distributed must carry the same terms.

The GPLv3 explicitly permits combining with AGPLv3 code, and what comes out of that combination carries the Affero terms. So Brass Pawn is distributed under the GNU Affero General Public License v3, and its complete corresponding source is published. That is not generosity. It is the condition of using engines this strong, and it is a fair one.

The Affero clause is the one about software offered to users over a network, and it changes nothing here: both engines run on your device, and the app makes no network requests at all.

Not taking our word for it

The rules engine is proved, not tested.

The iOS app reimplements the rules in Swift rather than shipping a library, and a move generator with a bug in it is a trainer that teaches illegal chess. So it is checked with a perft suite: every legal move sequence to a given depth is counted from a set of positions with known answers, and the count either matches exactly or the build fails. There is no “mostly correct” state for a move generator to be in.

Read the source →

Brass Pawn

Tactics, positional judgement, endgame technique and coached play, with the engine running on the device itself. No account, and nothing collected — apart from what online play needs: that you are online, and the friends you make.

Chess practice: offline analysis, puzzles and friends

Free software under the GNU Affero General Public License v3. Read the source.

© 2026 Mincho Milev. Brass Pawn is free software.

Stockfish © the Stockfish developers, GPLv3. Puzzles and games from the Lichess database, CC0. Not affiliated with Apple, Lichess, the Stockfish project or the Reckless project.