Stale moves lose safely
Optimistic version checks stop two clients from quietly overwriting the same turn.
TabletopRPC
Open source · Kotlin · Spring Boot
The authoritative game engine for cards, dice, boards, pieces, turns—and whatever your next game invents.
{
"type": "place_piece",
"actor_id": "7b2…e91",
"payload": {
"space_id": "0-0"
},
"expected_version": 3,
"idempotency_key": "turn-001"
}
Built for real clients
Clients describe intent. TabletopRPC owns the truth, validates the move, applies it once, and returns a fresh snapshot plus ordered events.
Optimistic version checks stop two clients from quietly overwriting the same turn.
Idempotency keys make unreliable networks boring instead of game-breaking.
Dice rolls and deck shuffles happen on the authoritative server, never a player’s device.
Poll ordered changes today; add SSE or WebSockets tomorrow without changing commands.
Live reference clients
Each playable demo is a real client of the public TabletopRPC API. Together they cover grids, cards, dice, private views, legal actions, turn effects, and computer opponents.
DEMO 01 · GRID & PIECES
Challenge a minimax computer opponent while every placement is validated and versioned by the server.
Play Tic-Tac-Toe →DEMO 02 · CARDS & DECKS
Hit, stand, and face the dealer with server-owned shuffling, hidden information, and hand scoring.
Play Blackjack →DEMO 03 · DICE & RACING
Race an API-controlled opponent through legal moves, captures, safe spaces, and home lanes.
Play Mini Ludo →DEMO 04 · LEGAL ACTIONS
Follow server-published moves through mandatory captures, chained jumps, and promotion.
Play Checkers →DEMO 05 · PRIVATE STATE
Bet through four streets while player-specific projections protect private hole cards.
Play Hold’em →DEMO 06 · MULTI-STEP CHOICES
Match colors and ranks, play turn-changing actions, and choose a color for wild cards.
Play Color Clash →Built to teach: the demos, API, and Swagger UI all run from the same open-source Kotlin application.
Your rules. One reliable engine.