Test Tier
Try the network without an account. One request gets you a test room: a room that works for an hour, for up to ten players. No registration required. A coding agent can do the whole thing for you. To start a new game, ask it:
make a 2D top-down shooter using arrr.fun's test tierOr to add multiplayer to a game you already have:
implement arrr.fun's test-tier networking into my existing game. read the documentation and make the necessary changes to ensure it works wellEither way, point it at this page.
When you want to keep what you built, sign in and make a free app; it does not expire. You swap three values and nothing else.
1. Get a test room
curl -X POST https://cloud.arrr.fun/api/test-tier/rooms{
"appId": "test_3f9c2a71b0d84e15",
"apiKey": "arrr_…",
"roomId": "test_3f9c2a71b0d84e15",
"expiresAt": "2026-10-02T13:00:00.000Z",
"fps": 20,
"limits": { "roomMinutes": 60, "playersPerRoom": 10, … }
}You can send a JSON body with a name (a label) and an fps (the tick rate: 0 for a room that ticks only when someone sends something, otherwise up to 20; 20 if you leave it out).
2. Connect to it
Pass all three values to connect(), as you would for any app:
<script src="https://arrr.fun/sdk/arrr-network.iife.js"></script>
<script>
const room = await arrrNetwork.connect('test_3f9c2a71b0d84e15', { // the roomId
appId: 'test_3f9c2a71b0d84e15',
apiKey: 'arrr_…',
user: { id: crypto.randomUUID() },
onTick(frame, inputs) { /* every player gets the same inputs, in the same order */ }
});
room.send({ move: { x: 1, y: 0 } });
</script>The key opens that one room and no other. The rest is in Getting Started.
Limits
GET https://cloud.arrr.fun/api/test-tier returns the current numbers.
| Test room | Free app (signed in) | |
|---|---|---|
| Account | none | yes |
| Rooms | one | as many as you need |
| Lasts | one hour, then it is deleted | until you delete it |
| Players | 10 | no fixed limit |
| Tick rate | up to 20 a second | up to the network's maximum |
| Inputs per player | 10 a second, bursts of 30 | 60 a second, bursts of 600 |
| Largest input | 256 bytes | 8 KB |
| Largest snapshot | 64 KB | 2 MB |
| Traffic | 100 MB per room, 1 GB a month | 10 GB a month per account |
| Voice | no | yes |
| How many | one at a time, 10 a day | — |
Keep inputs small, and send them only when something changes (a key going down, not a position every frame). A game played that way by a handful of people uses a few tens of megabytes in an hour.
Test rooms share a fixed amount of space on the network. When it is all in use, a new test room cannot open yet. You are told it is busy, and a minute later there is usually room. Rooms you already have keep working.
When it ends
A test room ends an hour after you asked for it, or sooner if it uses up its traffic. Everyone in it is disconnected and the room and everything in it is deleted. It cannot be reopened. Joining it again is refused with a message that it has ended. In the SDK, connect() rejects with a JoinRefused whose code is room-ended, and a Lockstep session ends with that reason instead of retrying.
Whatever the game does with the error, the SDK also prints what happened and what to do next in the browser console, for example:
[arrr-network] the network refused room "test_3f9c2a71b0d84e15" (410): This test room has ended:
test rooms last 60 minutes. Get a new test room with POST https://cloud.arrr.fun/api/test-tier/rooms.
To keep going without limits like these, register free at https://cloud.arrr.fun, create an app and
an API key, and use them in place of appId, apiKey and roomId: a free app does not expire and
includes 10 GB of bandwidth a month.A room nobody is in closes after about a minute. Rejoin it within its hour and it opens again, empty.
Instructions for coding agents
Get one test room per project, by running the
curlabove yourself. PutappId,apiKeyandroomIdin the game's config. Never call/api/test-tier/roomsfrom the game: an address can only hold one test room at a time.Connect to the
roomIdyou were given. Any other room name is refused.The key is not a secret. It ships in the browser like any app key.
Design for the limits: at most 10 players, inputs well under 256 bytes, at most 10 a second per player. Publish snapshots under 64 KB.
Refusals, and what to do:
What you see Meaning Do 429when asking for a roomthis address already has a live test room, has had 10 today, or its test rooms have used 1 GB this month use the one you have, or move to a free app 503, "busy"every test room on the network is in use, or too many were asked for this hour wait a minute and try again 410, orJoinRefusedwithcode: 'room-ended'the hour is up, or the room used its traffic get a new test room JoinRefusedwithcode: 'room-full'10 players are already in wait for someone to leave Every refusal from the network ends by saying how to move to a free app. When the user is ready, do that: it is the same three values.
When the user wants to keep the game, tell them to sign in at https://cloud.arrr.fun, create an app and a key (API Keys), and swap the three values. They can name their own rooms from then on.
