Repository navigation
Repositories
TL;DR: DreamLand lives in about a dozen repositories under the
dreamland-mudGitHub organization. The engine, the configuration, the public Fenia library, the web client and the site are public. The full set of zones and the private Fenia scripts are not, and a local server runs on a small public sample instead. Use when: you need to know where a kind of change goes, which repository to clone, or how the pieces are laid out in a running server. Source of truth:dreamland_code/etc/dreamland.xml.template,dreamland_code/configure.ac,dreamland_code/README.md, the README of each repository,mudjs/vite.config.jsVerified: 2026-11-02 against dreamland_code a7c4fd10, dreamland_world a35c62ce, dreamland_fenia_public c28874b, mudjs 990bf6d, dreamland_web 9bf2c2d, dreamland_mudlet b18afc2
All public repositories are at https://github.com/dreamland-mud/<name>. Default branch is master unless the table says otherwise.
| Repository | Holds | Language |
|---|---|---|
dreamland_code |
The server: a core library plus plugins, build system, Docker files | C++17 |
dreamland_world |
Game configuration: commands, helps, races, professions, religions, skills, fight tuning, ports, 17 sample zones | XML, JSON |
dreamland_fenia_public |
Public Fenia helpers and examples | Fenia |
mudjs |
Browser client, played at https://dreamland.rocks/play
|
JavaScript, React |
dreamland_mudlet |
Mudlet package: panels, chat tabs, GMCP | Lua |
dreamland_web |
Static site generator, item searcher, help generator | JavaScript |
dreamland_mapper |
Zone mapper: turns zone XML into graph JSON for the client map panel | TypeScript |
dreamland_bots |
Telegram and Discord bots that talk to the game API | JavaScript |
dreamland_docker |
Dockerfiles for ready-made development images | Docker |
All of these carry the GPLv3 license file except dreamland_mapper and dreamland_mudlet, which have none in the repository. Check before you reuse their code. mudjs-vue is an archived experiment from 2023.
| Repository | Holds |
|---|---|
| Private Fenia | The spell, skill, behavior, quest and craft scripts that run the live game |
| Private areas | Every zone of the live world |
Two other private repositories hold hosting configuration and maintainer tooling. None of them is needed to build, run or test a local server. Pages in this wiki describe private Fenia by behaviour, not by file path.
The engine. src/ is the core library (libdreamland) with the XML layer, the scheduler, the Fenia interpreter, the localization primitives and the basic world objects. plug-ins/ holds 53 plugin directories: command handlers, combat, the OLC editors, the Fenia bindings, I/O and so on. Plugins load and reload at run time, the core does not. See Engine-Architecture.
The repository also has etc/dreamland.xml.template (server config), libexec/plugin.xml.template (plugin load order), admin/ (default characters, the Fenia database seed, build scripts), Dockerfile.localbuild, Dockerfile.localrun, Dockerfile.gitpod, .gitpod.yml and .drone.yml. Build commands are in README.md. Environments are on Local-Setup.
CI is a Drone pipeline on the maintainers' host that rebuilds after each push to master. .travis.yml and admin/travis are legacy.
Everything the engine reads at boot that is data rather than code. Top-level folders include commands, helps, races, professions, religions, clans, socials, skill-groups, fight, config, ports, gquests, languages, behaviors and wearlocations. Data-Configs maps each folder to its loader.
Two folders matter for a local server. areas.local has 17 sample zones listed in area.lst.xml. fenia.local has older Fenia examples in a legacy encoding (KOI8-R, unverified). fenia.examples has small Fenia examples grouped by entity type (spell, skill command, mob, object, room, behavior, affect, area quest). Do not hand-edit gquests/*.xml, the server rewrites those files.
Fenia helpers (utils/), one example spell, one example skill command and scripts for two zones (areas/: midgaard.are and under2.are). It is a library you can read and extend. Fenia-API indexes the helpers. Scripts here are loaded into the running server by name, see Fenia-Scripts.
The web client. The default branch is dreamland, which is tightly integrated with the server protocol and is where all work happens. The master branch is a generic client for any MUD and is frozen (per the client README, unverified). The production build is served at /play/. See Client-Web-Development and Client-Web-Protocol.
A Mudlet package assembled from src/*.lua into Dreamland.xml by build.py. The game offers the package to Mudlet users on connect. See Client-Mudlet-and-GMCP.
The public site: website.js renders static pages from templates and from a runtime tree, searcher.js is the item search app, help.js builds the help pages. Local run commands are in its README.
Reads zone XML, computes a layout and renders room graphs. By default it reads zones from a sibling directory with the private areas. Set the AREAS_DIR environment variable to point it at areas.local from dreamland_world instead.
The Discord bot (/who, /link, /ooc) and the Telegram bot. Both call the game's HTTP API on apiPort.
Dockerfiles for images published on Docker Hub under the dreamland user. The image description says it is based on Ubuntu 18.04 and includes a limited set of zones. The repository was last changed in 2020, so the image may lag behind the code (unverified). The Dockerfiles inside dreamland_code are newer and based on Ubuntu 20.04.
The configure step creates a runtime tree, copies the default characters and loads the Fenia database seed. Two repositories are cloned into it by hand.
| Path in the runtime tree | Comes from |
|---|---|
bin/dreamland, lib/, libexec/
|
the build of dreamland_code
|
etc/dreamland.xml |
copied from etc/dreamland.xml.template on first configure |
libexec/plugin.xml |
copied from libexec/plugin.xml.template
|
share/DL |
a clone of dreamland_world
|
share/DL/areas.local |
the sample zones inside that clone |
share/DL/fenia/public |
a clone of dreamland_fenia_public
|
var/db/fenia |
the Fenia database, seeded from admin/fenia/fenia.dump
|
var/db/player, var/db/oldstyle/player
|
player files, seeded with two characters |
The paths inside etc/dreamland.xml (tablePath, areaDir, feniaScriptDir, feniaPublicScriptDir) are relative to the runtime root. The stock template points areaDir at share/DL/areas.local and feniaScriptDir at share/DL/fenia. The live game points at the full set of zones and the private Fenia scripts instead, which is why a local server shows a much smaller world.
| You change | Repository |
|---|---|
| Combat, commands in C++, OLC editors, the Fenia bindings | dreamland_code |
| A help article, a race, a class, a socials entry, a tuning table | dreamland_world |
| A reusable Fenia helper or example | dreamland_fenia_public |
| A zone, a mob, an object | the private areas repository, or a sample zone in dreamland_world
|
| The browser client |
mudjs, branch dreamland
|
| The site, the searcher | dreamland_web |
New contributors who need a private repository changed can ask on Discord. See Contribute and Contributing-Workflow.
Start here
Get running
Contribute
- Contribute
- Contributing Workflow
- Code Style
- Accessibility
- Writing Player Text
- Game Design Principles
Build areas
- Building
- OLC
- OLC Rooms
- OLC Mobiles
- OLC Objects
- OLC Resets
- OLC Line Editor
- OLC Other Editors
- Area Format
- Area Quests
- Mob Forms and Parts
Fenia
- Fenia
- Fenia Language
- Fenia Triggers
- Fenia Gotchas
- Fenia API
- Fenia Scripts
- Fenia Behaviors
- Fenia Skills and Spells
- Fenia Cookbook
- Fenia Grammar
Engine
- Engine Architecture
- Engine Time and Pulses
- Output Format
- Mechanics Combat
- Mechanics World
- Data Configs
- Item Power
Localization
Clients
More