Run your own online server
blur-online is a Demonware-compatible service for accounts, login, lobby, matchmaking and IP/NAT discovery.
Go, standard library only. The project’s own instance is at
wss://online.blur.entropylan.party/socket.
Build and run
Section titled “Build and run”cd server && go build -o blur-online ../blur-online -listen :8080 -key <shared key> -accounts accounts.json -public-ip <server public IPv4>./blur-online -accounts accounts.json -adduser name:password # optional; players can also create accounts in game- TCP
-listen: websocket on path/socket. Put a TLS reverse proxy (e.g. Caddy) in front, with websockets on. - UDP 3074 and 3075: Demonware IP/NAT discovery. The game expects these fixed ports, so they must reach the host directly. A CDN or HTTP-only proxy in front breaks NAT discovery.
- The key comes from
-keyor envBLUR_ONLINE_KEY.-versionprints the build. accounts.jsonholds Tiger password hashes. Keep it private and backed up.- Lobbies and logins are in memory; a restart drops them.
Docker
Section titled “Docker”Image: git.mintopia.net/mintopia/blur-online:<tag> (develop, main, sha-<short>; release vX.Y.Z also tags X.Y.Z,
X.Y, X and latest). server/docker-compose.example.yml runs it with host networking, the key in .env and ./data
for accounts.json. server/deploy/ has an Ansible playbook that templates the compose file and starts it.
Point the game at it
Section titled “Point the game at it”BLUR_ONLINE_URL=wss://your.host/socket BLUR_ONLINE_KEY=<key> ...The key must match the server’s. BLUR_ONLINE_URL=off disables online (LAN only). A release build compiles in a default URL
and key; see Build from source. Players create an account in game (the licence key field is ignored).
BLUR_DWLOG=1 prints Demonware’s own client log, and the server logs every lobby task it doesn’t implement.
The full protocol is in Blur online server: full spec.