The Cloudflare Worker
One Cloudflare Worker with its own domain, database and players. Sockets, reconnection, turn clocks, ratings and replay are handled by a Durable Object.
The Flutter App
A Flutter app for Android and the web. Sign-in, lobby, friends, profiles, avatars, push and deep links all ship with it and natively speaks the Server's Language.
You write the rules
Six pure game rules functions and a board widget. One command scaffolds both halves and leaves a game running on your machine.
What you write
- The rules, in TypeScript
- Six pure functions: the opening position, what a move does to it, what each seat is allowed to see, and when the game is over.
- The board, in Dart
- One widget that draws the current view and proposes moves, plus a rules twin, so the board can respond before the server has answered.
- What a new game can be set to
- Declare the options. The engine renders the creation dialog, the lobby entry and the countdown around them.
What you get
- Sign-in, accounts, profiles and avatars
- Lobby, invites, friends and bots
- WebSockets, reconnection and turn deadlines
- Ratings, history and immutable replay
- Push notifications and deep links
- The game's own website and its Play Store pipeline
For scale: Rock–Paper–Scissors, the reference game, is about 220 lines of TypeScript and 500 of Dart, and none of it mentions turns, deadlines, sockets, versions, persistence or ratings.