Skip to content

Repositories

Kit Oliynyk edited this page Nov 3, 2026 · 4 revisions

TL;DR: DreamLand lives in about a dozen repositories under the dreamland-mud GitHub 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.js Verified: 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.

Public repositories

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.

Private repositories

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.

What each repository is for

dreamland_code

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.

dreamland_world

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.

dreamland_fenia_public

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.

mudjs

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.

dreamland_mudlet

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.

dreamland_web

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.

dreamland_mapper

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.

dreamland_bots

The Discord bot (/who, /link, /ooc) and the Telegram bot. Both call the game's HTTP API on apiPort.

dreamland_docker

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.

How the pieces mount in a running server

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.

Which repository gets my change?

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.

See also

Clone this wiki locally