Ports, addresses and code formats

A look-up table: every port the server and its services use, the shapes a room code, host code, invite link, deep link and server address take, and the addresses the apps and the tunnel use.

Desktop appAndroid appServer

Ports

PortProtocolWhatReachable by
3005TCPThe server's web port under , dev:lan and start:lanPlayers, via proxy outside the LAN
3000TCPPlain next dev and next startLocal development
44444UDP and TCPVoice media (built-in ), VOICE_RTC_PORTPlayers, opened straight to the host, never proxied
8001TCP llama-server, the default The server only
11434TCPThe server only
8188TCPThe server only
7869TCPThe FLUX image workerThe server only
8880TCP text-to-speechThe server only
8870TCP speech-to-textThe server only
3210 and upTCPThe desktop app's bundled server; the first free port is remembered. Loopback only, unless is onThe app itself, and the local network while shared on Wi-Fi

Codes

KindShapeExample
Campaign 4 to 12 characters from A-H J-N P-Z 2-9 (no 0, O, 1, I)U9VHZJZP
8 characters from the same alphabet without LABCD2345
Spoken room code for a shared app worldhost code, dash, table code; spaces, lower case, a missing dash or a leading PLAY- are acceptedABCD2345-EFGH6789
ODM- plus 10 charactersODM-K7PQ2M9XWD
tokenodm_ plus a long random string, shown onceodm_...
KindShapeOpens
Invite link (QR codes carry this)https://opendungeonmaster.com/j?s=<server>&c=<CODE>, also /j/<CODE>?s=The confirmation page, then the app or the host's pages
odm://join?s=<server>&c=<CODE>The app, on the join screen
A server's own join linkhttps://<server>/join/<CODE>The host's join page; the app accepts it too
A bare server addressplay.example.com or http://192.168.1.20:3005Add a server; is tried first, then http
A shared app worldhttps://play-<HOSTCODE>.opendungeonmaster.comThe to that device
An app world shared on Wi-Fihttp://<LAN address>:3210 (the bundled server's port)That device, on the same network only
The https://<server>/rulebookThe as a book; sign-in required
The https://<server>/campaigns/<id>/tableThe chrome-free view for a television
Discord redirect<public-url>/api/auth/discord/callbackSet in the Discord application
<public-url>/api/mcpThe endpoint
Health<server>/api/health's health check and the apps' probe

Inside Docker

You wantUse
A service on the host from inside the containerhttp://host.docker.internal:<port>
The plain 127.0.0.1 defaults to workHost networking on Linux: docker compose -f docker-compose.yml -f docker-compose.host-net.yml up -d
The /app/content/open5e.sqlite, baked into the image
The generated key/app/data/.db-key in the data volume

Checked against desktop and Android app 0.17.2 and server 0.26.2 on 2026-10-11. Something wrong or missing? Open an issue.

Download · v0.17.2
Server app · v0.26.2

Optional. Runs the table for a whole group on one machine that stays on. Everyone else just installs the app.

Free & open source · MIT licensed · served from GitHub releases