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
Port
Protocol
What
Reachable by
3005
TCP
The server's web port under Docker, dev:lan and start:lan
Players, via HTTPS proxy outside the LAN
3000
TCP
Plain next dev and next start
Local development
44444
UDP and TCP
Voice media (built-in media server), VOICE_RTC_PORT
Players, opened straight to the host, never proxied
8001
TCP
llama.cppllama-server, the default text backend
The server only
11434
TCP
Ollama
The server only
8188
TCP
ComfyUI
The server only
7869
TCP
The FLUX image worker
The server only
8880
TCP
Kokoro text-to-speech
The server only
8870
TCP
faster-whisper speech-to-text
The server only
3210 and up
TCP
The desktop app's bundled server; the first free port is remembered. Loopback only, unless Share on this Wi-Fi is on
The app itself, and the local network while shared on Wi-Fi
Codes
Kind
Shape
Example
Campaign room code
4 to 12 characters from A-H J-N P-Z 2-9 (no 0, O, 1, I)
U9VHZJZP
Host code
8 characters from the same alphabet without L
ABCD2345
Spoken room code for a shared app world
host code, dash, table code; spaces, lower case, a missing dash or a leading PLAY- are accepted
ABCD2345-EFGH6789
Account invite
ODM- plus 10 characters
ODM-K7PQ2M9XWD
Connected agent token
odm_ plus a long random string, shown once
odm_...
Links and addresses
Kind
Shape
Opens
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
Deep link
odm://join?s=<server>&c=<CODE>
The app, on the join screen
A server's own join link
https://<server>/join/<CODE>
The host's join page; the app accepts it too
A bare server address
play.example.com or http://192.168.1.20:3005
Add a server; https is tried first, then http
A shared app world
https://play-<HOSTCODE>.opendungeonmaster.com
The tunnel to that device
An app world shared on Wi-Fi
http://<LAN address>:3210 (the bundled server's port)
That device, on the same network only
The rulebook
https://<server>/rulebook
The SRD 5.1 as a book; sign-in required
The table view
https://<server>/campaigns/<id>/table
The chrome-free view for a television
Discord redirect
<public-url>/api/auth/discord/callback
Set in the Discord application
Connected agents
<public-url>/api/mcp
The MCP endpoint
Health
<server>/api/health
Docker's health check and the apps' probe
Inside Docker
You want
Use
A service on the Docker host from inside the container
http://host.docker.internal:<port>
The plain 127.0.0.1 defaults to work
Host networking on Linux: docker compose -f docker-compose.yml -f docker-compose.host-net.yml up -d