Start here
Concepts
The terms IRT uses for tenants, projects, rooms and the infrastructure that runs them.
IRT uses these words consistently in the docs, the dashboard, the API and logs. Two rules matter most: hibernate and wake are things rooms do, and a room’s saved data is its room state.
Your account
Tenant. Your account. Your rooms run in VMs that are never shared with another tenant.
Project. One game or app, with its own settings, secrets, keys and
builds. A project has a slug, unique across IRT, used in URLs and in its
site’s address: my-game is served at my-game.irt-serve.com. There are
no environments inside a project; use a separate project for staging.
Build. A deployable version of a project: its bundled room code and,
optionally, its site. One build is live at a time. Making a build live
switches the site at once and moves rooms to it according to the
project’s rooms.buildUpdate setting.
Site. A project’s static files, such as its web client, served from
<project>.irt-serve.com. Your content is never served from irt.io.
Backend. Your own server-side code outside rooms, if you have one. It talks to IRT through the HTTP API and webhooks, and signs player tokens.
Rooms
Room. One running game instance, addressed by a room ID that is 1 to
64 characters of A-Z, a-z, 0-9, _ and -, unique within the
project. Rooms are the unit of pricing.
Room type. One of the named room definitions a build declares in
irt.config.ts’s rooms, such as a lobby and a match, each with its
own room module, schema, room state version and migrations, so the
rooms of one project share its players and player data. A room’s type is
set when it’s created and never changes. A create, quick join or
connection that names no type gets the type named default, which a
project with room instead of rooms has as its only type; a build
without one needs a type named every time. A connection for another type
than its room’s closes with 4015. A type can also be native, with no room
code of yours: a native room runs only IRT’s compiled code, natively
on the host rather than in a VM. It sends each message on to the other
players and keeps presence and a leader, and with a schema whose entity
kinds declare rules, players spawn, own and write its entities. (Native
here means native to IRT, not a native, non-web client.) A type may set
its own room size, maxPlayers and retention.
Room host. A Node process inside a VM that runs one or more rooms of the same build, of any of its standard room types. Rooms in a room host start, hibernate and stop independently. An exception in one room stops only that room.
Room size. A room’s class: standard, large or extra large. It sets the room’s connection limit, memory, CPU and price. Sizes are provisional until launch.
Room-hour. The unit rooms are billed in: an hour of a room from the start of a wake until it has hibernated or stopped, priced by room size. It’s counted outside the VM, by IRT’s host daemon.
Room state. The serialized state of a room, kept in object storage
while it hibernates. Entities, room.state and private state are room
state, saved and restored without any code of yours.
Managed store. How the IRT SDK saves room state: each tick’s changes are streamed out of the VM as they happen, so a crashed room host restarts its rooms with nothing lost.
Checkpoint. Saving room state while the room keeps running, for crash safety.
Hibernate. A room saves its room state and is removed from its room host. It happens 30 seconds after the last connection leaves, or when the room asks. The room host keeps running its other rooms.
Wake. Starting a hibernated room again, in any room host of the same build, and restoring its room state. A connection or an API call to a hibernated room wakes it.
Lifecycle
starting -> active -> hibernating -> hibernated -> waking -> active
\ |
+------------------> stopped <----------------+
stopped means the room was deleted and its room state may be removed.
The API reports a room’s status as active, waking or hibernated.
A room created through the API is hibernated until its first
connection, and that first start shows as waking to the client, though
it runs onCreate.
Connections and sync
Connection. One client’s WebTransport or WebSocket session with a room. A player has one connection per room: connecting again closes the older connection.
Player token. A short-lived JWT your backend signs to say who a player is. Projects that allow guests can skip it. See Player tokens.
Unreliable message. A message that may be dropped or arrive out of order, for data where only the newest value matters. Sent as a WebTransport datagram, or over WebSocket in order with stale messages dropped when the socket backs up.
Tick. One fixed-timestep step of a room’s simulation, run by the IRT SDK’s tick scheduler.
Entity. A synced object of a declared kind in a room, with typed
fields such as f32, u8, string and bytes.
State update. A message from a room telling a client the simulation state at a tick: which entities entered its view, which changed, which left. A client applies each update atomically.
Interest key. A value, such as a grid cell, a team or a chunk, that entities have and connections subscribe to. A connection sees the entities that share a key with it.
Stepper. A simulation step shared by a room and its clients. The room runs it every tick; the prediction library runs the same step on the client to predict the local player.
Infrastructure
Region. A geographic location with its own hosts and router. A room
runs in one region. The first region is eu.
Router. The edge clients connect to, at eu.irt.io for eu. It
authenticates connections, enforces limits, holds connections while a
room wakes and forwards them to the room host running the room.
VM. A Firecracker microVM. Each belongs to one tenant and runs many rooms. VMs start from a base snapshot, and stop 5 minutes after their last room hibernates.
Voice server. The part of a region that forwards audio between a room’s connections. It runs outside VMs and runs no tenant code.