Play Thronebound Realms now: it is a free 2D open-world MMORPG that runs in a browser tab. No download, no install, no plugin. Arrow keys or WASD on a computer, a thumbstick on a phone, a controller on a television — one account, one character, every device.
The part worth writing about is not the game. It is that the same tab drawing the world can answer real inference jobs for the Animica network while you play, and that the multiplayer had to be built so a browser can never lie about anything that matters.
What is in it
42 hand-built zones across the continent of Aldermark — four towns, a city, a sanctum, twelve routes, fifteen caves and dungeons, and a spire. 121 creatures, 42 bosses, 308 quests across 20 chains, and nine skills to level 99 with 149 recipes: mining, woodcutting, fishing, smithing, cooking, alchemy, crafting, combat and attunement.
The world is not authored by hand as data. It is generated deterministically from per-zone JSON by world/gen/gen-world.js under a fixed seed, and the same seed produces byte-identical maps. Quests are generated the same way and validated against the world afterwards: a quest that references an NPC who does not exist fails the build rather than shipping. That check has already earned its keep — it caught a chain quest pointing at an NPC that a world regeneration had removed.
2,000 players per realm, and why that needs interest management
A zone holds up to 2,000 players, and each zone has 50 independent realms, so you can find a quiet copy or a crowded one. Naively, presence is simple: broadcast every position update to everyone in the room. At a full house that is 2,000 players × 2,000 recipients × roughly 16 updates a second — about four million messages per second, for one zone.
So movement and local chat only reach players within 40 tiles, joining sends the nearest 150 peers rather than all 2,000, and joins, departures and global chat stay room-wide because they are rare and cheap. That creates a second problem: a player walking into view arrives as a movement update for somebody the client has never heard of. Rather than track what each of 2,000 clients knows — which is quadratic in memory — the client simply asks once, and the server answers with the introduction. It is self-healing, and costs one message per newly visible player.
The rule the multiplayer is built on
The presence server is deliberately not authoritative over anything that can be lost or duplicated. It knows who is standing where and what they said. Inventories, gems, experience and quests belong to the API and Postgres. If the presence process dies, everyone keeps playing single-player and reconnects later.
Identity is the same tb_token the REST API uses, hashed the same way and looked up in the same sessions table. There is no second credential and no way to be someone in the world that you could not already be over HTTP.
Everything a client sends is treated as a claim about itself only. It can never name another player as the author of a message: the server stamps authorship from the session, never from the payload, and there is a test that tries to forge it.
Trades and duels: what is real and what is attested
Two players can trade face to face, and stake gear on a duel in the arena. Both raise the same question — what stops a client simply asserting the outcome?
Royal Gems are real. They move only inside one database transaction, under advisory locks on both accounts, idempotent by reference. If either side cannot cover their side at settlement, the entire trade rolls back and nobody moves.
Items are attested by each player’s local save, because Realms inventories live on the device by design. Settling records a delivery into the receiver’s collection box. That is a genuine trust boundary, and the trade window says so rather than implying a guarantee the game cannot make.
Every trading game learns the same lessons the hard way, so they are built in from the start: any change to either side clears both confirmations, and confirming carries a hash of the exact offer on screen — a last-instant swap moves that hash and the confirmation is refused rather than silently agreeing to something else.
Duels go further, because a duel with stakes cannot be resolved by either player’s browser. The server fights it. The seed is fixed when the duel is created, before anyone knows the stakes. Both fighters are built from the characters the players already autosave, never from anything sent with the challenge. The simulator is pure and deterministic, so any duel can be recomputed from its row long afterwards — there is a test that replays a real one from its stored seed. Only the loser’s stake changes hands, so winning never costs you anything, and a draw moves nothing.
Serving inference while you play
Optionally, the tab runs Animica Agent 2B — our Qwen3.5-2B tool-calling fine-tune — through llama.cpp compiled to WebAssembly, and answers real jobs from the network. Which model you serve picks your in-game faction, and the faction changes what you are good at; the Triangle Covenant, for those serving Animica’s own model, gets the strongest bonuses.
Serving is entirely optional and the game says plainly what it costs before you start: your device’s CPU or GPU, its battery, and a model download of roughly half a gigabyte to a gigabyte. Earnings are real but volatile and may be zero. The game never custodies funds.
What it does not have
Players. The build is finished and tested — a suite covering presence, trading, the arena, the shop, daily rewards and quest integrity, plus tests that drive two real browsers against production to prove that two people can actually see each other, trade and duel — but almost nobody has played it. If you want to be early to something, the map is empty.