What is included

Everything a long-running set of postal games needs, nothing a chess website has.

â™Ÿī¸

Full rules enforcement

Legality, check and mate, plus the draws the board declares by itself: stalemate, insufficient material, fivefold repetition and the seventy-five-move rule. A threefold repetition or fifty-move draw is reached by offering a draw. Promotion, castling and en passant all handled. You cannot send an illegal move and neither can your opponent.

đŸ“Ŧ

One-click import

Every outbound email carries a link that opens the app with the move prefilled, with the same validation as a paste. The move data travels in the link itself and is never uploaded anywhere.

đŸ—‚ī¸

Any number of games

The list shows whose move it is in each game, with full move history and a short game code matching the email subject, so a game and its thread line up at a glance. Multi-select for bulk resign, draw acceptance, delete, take back or send, each confirmed before anything destructive happens.

â†Šī¸

Play now, send when ready

Playing a move sends nothing, so the board is yours to look at afterwards. Send move writes the email when you are happy with it; until then the move can be taken back. Both grey out the moment the email leaves for your mail client or your clipboard, because from that point your opponent may already be replying to it.

🤝

Invitations, draws, resignation

Starting a game, offering a draw, accepting one and resigning all travel over the same email format, so the whole game happens in one thread. Accepting an invitation fills your opponent's reply address automatically from the message.

🌗

Dark and light themes

A calm dark theme and a classic light board, toggled from the View menu and remembered between runs.

âŒ¨ī¸

Keyboard-first

The whole app drives from the keyboard, dialogs included: arrow keys everywhere, Enter and Space both activate and the board plays with the cursor keys. Where focus is always shows on the thing you can act on, so a control rings while a list marks the row you are on.

🔒

Private by construction

No accounts, no server and no telemetry. The test suite structurally forbids network imports everywhere except the one disclosed update-check module, so your games are plain JSON files in your home directory and nothing about you ever leaves it.

đŸšĢ

No machines

No engine, no analysis, no hints, ever. The product is chess between people; "no machines" is scope, not a missing feature.

The email is the protocol

Every message a game sends is readable by a human first and a program second. This is roughly what your opponent receives.

Postal Gambit: oliver (White) vs jane (Black)

Move 1 (White): e4
Your move.

  a b c d e f g h
8 r n b q k b n r 8
7 p p p p p p p p 7
  ...

-----BEGIN POSTAL GAMBIT v1-----
Action: move
From: oliver@example.org
[the complete game record]
-----END POSTAL GAMBIT-----

Import this move with one click:
[Open this move in Postal Gambit]

The block carries the entire game state, so a lost email never corrupts a game. The wire format is versioned and documented in the repo.