Server authority
The server owns state and validates every payload, so cheating by packet forgery isn't a thing you bolt on later. Interest management (AOI) sends each client only what it can see — anti-wallhack by construction.
A source-available SDK (Tikron License 1.0) you deploy to your own Cloudflare account in minutes — the free tier works, no lock-in. One Durable Object per room, placed near the player who creates it — or a region you choose — on Cloudflare's global network (330+ cities). State lives on the server, clients send intents, reconnection is built in.
Built so AI coding agents ship multiplayer games in one session.
Latency measured end-to-end from a residential connection in Korea — includes ~80 ms of network RTT to the assigned edge; the engine itself adds single-digit milliseconds. Full methodology in docs/PERF.md.
The server owns state and validates every payload, so cheating by packet forgery isn't a thing you bolt on later. Interest management (AOI) sends each client only what it can see — anti-wallhack by construction.
Each room is its own Durable Object, spun up on demand near the player who creates it — or pinned to a region with a matchmake hint. Rooms scale horizontally, and state-preserving reconnection is built into the core.
Genre presets pick your netcode in one decision. An in-repo
AGENTS.md and llms.txt make a coding agent
productive in one context window — npx create-tikron and go.
# 1. scaffold a game (SDK from npm)
npx create-tikron my-game
cd my-game && npm install
# 2. log in to Cloudflare (free tier works)
npx wrangler login
# 3. ship it to the edge — your account, your game
npm run deploy
import { CasualRealtimeRoom, type Client } from "@tikron/server";
interface State { cursors: Record<string, { x: number; y: number }> }
export class Board extends CasualRealtimeRoom<State> {
onCreate() {
this.setState({ cursors: {} });
this.onMessage("move", (c, p) => {
const me = this.state.cursors[c.id];
if (!me || typeof p?.x !== "number" || typeof p?.y !== "number") return;
me.x = p.x; me.y = p.y;
this.markStateChanged(); // synced to everyone
});
}
onJoin(c: Client) { this.state.cursors[c.id] = { x: 0, y: 0 }; this.markStateChanged(); }
onSeatExpired(c: Client) { delete this.state.cursors[c.id]; this.markStateChanged(); }
}
Tikron is open core: the SDK runs on your own Cloudflare account (you self-host the rooms). Optional hosted services add leaderboards and a usage dashboard, keyed by API key.
A room-hour = one live room for one hour; rooms with no players cost nothing. Self-hosted rooms bill to your Cloudflare account — roughly ~$0.006 per room-hour at Cloudflare's own Durable Object pricing (approximate).
What Tikron does and doesn't do today — so you can decide before you commit.
.io games; not for competitive twitch shooters (head-of-line
blocking under packet loss). WebTransport is on the roadmap.roadmap
stateVersion bump + a migrateState hook.
Full detail: AGENTS.md → Limits & roadmap.