Live · olympia.orph.dev
Four games. One edge runtime. Live, right now.
Chess, pool, poker, and snake — running entirely on Cloudflare Workers, served from the nearest 300-city POP. No install, no signup, no warm-up. Click, play.
p99 latency
14ms edge
cold start
0ms workers
pop count
335 global
bundle
38kb gz
01 · Games
Four games, each deliberately built.
Every demo is the real package — same binary you'd npm i, embedded on this page.
Chessv4.2
Stockfish at the edge. Untimed, rated, or live against a friend with shareable rooms.
Poolv4.2
Eight-ball with predictable physics — every break solvable, every shot deterministic.
Pokerv4.2
Texas hold’em against a learned opponent. No tells. No tilts. Just ranges and pot odds.
Snakev4.2
Twelve-millisecond ticks. Wrapping borders. The leaderboard resets every Sunday.
02 · Platform
Built on the same edge-native stack as everything else at Orphnet.
01
Edge runtime
Each game serves from the nearest of 335 POPs. No region selection, no warm-up. p99 14ms.
02
Shared kernel
Identical Phaser scaffolding, identical ORM bindings, identical asset pipeline across all four titles.
03
Type-safe ORM
Match state, move history, leaderboard — all in D1, queried with end-to-end inference.
04
No signup
Anonymous play by default. Add a handle if you want the leaderboard to remember you.
05
Shareable rooms
A URL per match. Friends join with one click, no account, no waiting room.
06
Open source
Every package on npm under @olympia/*. PRs welcome — read the brief first.
Architecture
A Worker, five DOs, two storage layers.
Every game in Olympia is the same shape. The Nuxt UI talks to a Hono Worker. The Worker is a thin shell that hands WebSocket upgrades to one of four per-game Durable Objects. A fifth DO runs matchmaking. D1 owns rooms and sessions. R2 owns replays.
- Anonymous guest JWT, refreshed silently
- Six-character room codes, deterministic DO IDs
- WS hibernation, 30-second reconnect grace
- Sliding-window rate limits in KV
- 30-day R2 lifecycle for replays