Introduction

irt.io is server-authoritative multiplayer for web games. You describe your shared state once, write to what you own like local variables, and the SDK keeps every client in sync — with a real server you can trust for anything cheat-sensitive. No dedicated netcode layer, no player-hosted lobbies, no rewrite when your game gets more serious.

It drops into the stack you already ship — Three.js, Phaser, plain canvas, Vite, Vercel — as plain TypeScript. Nothing about irt.io is a framework you build your game inside; it’s a library your game calls.

The one idea

Shared game state lives in a room on our servers. Every entity has an owner — a client or the server — and only the owner may write it.

import { joinRoom } from '@irtio/client';
import { schema } from './irtio/schema';

const room = await joinRoom(schema);

// You own your player. Write to it like local state; everyone else sees it.
room.state.players[room.me].x += dx;

That’s the model. Everything else — validation, RPCs, server-driven simulation — is a small, local step up from here, never a rewrite.

What you get

PieceDoes
SchemaOne typed description of your shared state
Room fileOwnership, validation, and server logic in one place
Client SDKjoinRoom, reactive state, RPCs, presence
Simulated playersHeadless bots that prove your netcode in tests
DashboardModeration, live rooms, usage, and billing

Where to next

  • New to it? Follow the quickstart — two tabs sharing a link in five minutes.
  • Want the whole picture first? Read the mental model.

This is placeholder documentation. Copy and APIs are provisional and will change before 1.0.