Server overview and requirements
The server is the same program that runs inside the desktop and Android apps, run on a machine of your own: a PC that stays on, a home server, a rented box. It serves the game's pages to browsers and the game's data to the apps, keeps every account and campaign in one encrypted database, and calls whatever AI services you point it at.
When to run one
- You want the table reachable without anyone's app being open.
- You want one AI Dungeon Master for a group: a fully local model on one GPU everyone shares, or the Claude Code or Codex subscription you already pay for, signed in on the server's computer.
- You want the extras: ComfyUI scene art and battle maps painted by AI, Kokoro or another speech server for narration, Whisper push-to-talk and dictation, the full voice media server with floor rules and side rooms, Discord sign-in, OpenRouter, world packs from the registry, transcription.
- You want accounts with passwords, sign-up policies and admin tools.
If none of that applies, hosting from the app is simpler and equally complete for a table with an OpenAI key or a human Dungeon Master.
Hardware
| Setup | What you need |
|---|---|
| Human DM, or a remote key (OpenAI, OpenRouter) | Any machine that runs Docker or Node (22.18 or newer, 24, or 26): a Raspberry Pi 4 class box, a NAS, a small VPS. 2 GB of memory is comfortable. |
| A CLI agent (Claude Code, Codex, opencode, Grok Build) | The same small machine, with the program installed and signed in on it. The turns run on the program's own plan. A server started with Node or systemd finds it; the Docker image needs the program built into it. See Agent programs and connected agents. |
| A local text model | A GPU (or a Mac, or an integrated GPU with shared memory) with enough memory for the model at a 64K context: about 45 GB for the recommended Qwen3.6 35B at Q8, 28 GB at Q4, 10 GB for the Gemma 4 12B fallback. Expect one to three minutes per turn on a single consumer GPU. |
| Local image generation | ComfyUI with an SDXL-class checkpoint: 8 GB of GPU memory or more. On an integrated GPU the image model and the text model share one pool and jobs are queued one at a time. |
| Narration and push-to-talk | Kokoro and faster-whisper run on a modest GPU or on the CPU with some delay. |
One process, one copy
Run exactly one instance. The server is a single synchronous SQLite writer with an in-process event bus, turn queue and voice media server. It cannot be replicated, load-balanced, or pointed at a shared data folder from two hosts, and a development server must never share a data folder with a production one.
Ports
| Port | What |
|---|---|
3005 | The web port under Docker, dev:lan and start:lan. Put HTTPS in front of this one. |
3000 | Plain next dev and next start. |
44444 UDP and TCP | Voice media when the transport is the built-in media server. Not proxied; opened straight to the host. |
8001, 11434 | llama.cpp and Ollama, on the host, called by the server. |
8188, 7869 | ComfyUI and the FLUX image worker. |
8880, 8870 | Kokoro text-to-speech and faster-whisper speech-to-text. |
Only the web port and, for voice, the media port need to be reachable by players. Everything else is the server talking to services on its own host. See Ports and addresses.
Data on disk
| Path | What |
|---|---|
data/local-roleplay.sqlite | The database: accounts, campaigns, sheets, the chronicle. Encrypted at rest with DB_ENCRYPTION_KEY. |
data/content/open5e.sqlite | The read-only content pack. Under Docker it lives at /app/content, outside the data volume. |
data/worlds/ | Installed world packs. |
data/.db-key | The key Docker generated on first boot, if you did not supply one. |
public/uploads/ | Portraits, covers, backdrops and handouts people uploaded. |
public/generated/, public/generated-audio/ | AI-painted pictures and cached narration audio. |
public/ambience/ | The sound library and its credits, shipped with the project. |
models/ | The embedding model for recall. |
Next
Run with Docker is the ten-minute path. Either way, the first account needs the setup code the server prints, and a guided setup then walks the storyteller, pictures, voice and sign-ups. Run from source for a machine without Docker or for development.