1. Run Citadel
One command builds the server, starts the local game backend, and serves a browser demo.

Players propose actions. Citadel applies the rules and returns one shared world.
Citadel’s signature move: write your game’s rules — movement, damage, loot, win conditions — in Lua, Python, or JavaScript, and the server makes them the authoritative law. Players can only propose; your script decides what actually happens. Easy to write and hot-reload, impossible to cheat.
You do not need to understand networking theory before seeing Citadel work. The first quest is intentionally small:
1. Run Citadel
One command builds the server, starts the local game backend, and serves a browser demo.
2. Open two players
Open two browser tabs. Each tab joins as a guest and gets its own realtime participant.
3. Move the shared world
Move in one tab. The other tab receives the update and renders the peer. That is your first multiplayer loop.
I want a tiny online game
Build Knights vs Monsters. You will write server rules, connect a client, validate attacks, and share monster state.
I already use a game engine
Install the Unity, Unreal, or Godot SDK and connect your existing project to Citadel.
I build for the web
Use @citadel/client over WebSocket and keep rendering in your own Three.js
or browser app.
I write the server rules
Write your game’s rules in GameScript — Lua, Python, or JavaScript — and let the server make them authoritative. All three follow one language-neutral host contract.
Every Citadel game has three clear roles:
That separation is the core idea behind the whole documentation. Learn it once, then reuse it in Unity, Unreal, Godot, Rust, or the web.
Citadel already ships device/custom authentication, authenticated realtime connections, named rooms, single-node authoritative matches and presence, storage, friends, groups, durable chat history, leaderboards, a durable notification inbox with local live delivery, wallet services, operator APIs, and client surfaces for Unity, Unreal, Godot, Rust, and the web. Lua ships by default; Python and capped JavaScript runtimes are feature-gated.
Some arcs are still in progress: cross-node authoritative match ownership, live chat fan-out and typing, hardened WASM game logic, full Node/TypeScript hosting, Rust-as-a-crate game logic, and a few platform/package ergonomics.