Developer resources

Three tools power the platform ecosystem: the SDK for building games, the MudRelay for bridging telnet to the web client, and the MudLink agent that connects an existing MUD with no server config. Download and run instructions below.

Developer tiers
  • External MUD listing — maintain your own listing record (name, website, Discord, art, rules). Admin approves your listing and any later edits.
  • Maintainer — submit and update your own game's code via the SDK + submission pipeline.
  • Owner — full self-service control of your own games, unified in our stack.

Become a developer →

Build a game

EMP SDK

Scaffold, simulate, and bundle a minigame entirely in your own sandbox — no access to our servers required. Declare achievements and daily quests in emp.toml; the platform sets the rewards on approval.

emp-sdk new mygame --category board
emp-sdk play .                 # local simulator
emp-sdk validate .             # checks your manifest (achievements, quests, ...)
emp-sdk bundle mygame --version 1.0.0
Bridge telnet ⇄ web (you host it)

MudRelay

A WebSocket relay that lets the web client reach telnet MUDs. Run it on your own infrastructure. Direct mode proxies TCP straight through (/connect?host=H&port=P); Linked mode pairs with a MudLink agent (/play/<name>). Exposes /muds, /status, /health.

npm install
node mudrelay.js --port=443 --tls --cert=/path/cert.pem --key=/path/key.pem
Connect your MUD (no server config)

MudLink

A drop-in agent your MUD runs. It dials out to a relay (port 443, no inbound ports or certs needed), handling full telnet negotiation, MCCP2, and GMCP. It can also send a status heartbeat to the platform so your listing shows as online — even for a telnet-only game.

npm install
node mudlink.js --relay=wss://relay.mudhub.club --name=mymud --mud-port=4000 \
  --status-url=https://mudhub.club/emc2/mudlink/heartbeat \
  --listing-token=YOUR_LISTING_TOKEN

External MUD listings show a live online/offline badge driven by the MudLink heartbeat (or the relay's /muds feed). The platform marks a listing offline if no heartbeat arrives within the TTL.