A modern MUD engine - headless game engine for real-time, text-based multiplayer worlds
Project description
💀 Daemons Engine
A Python framework for building text-based multiplayer RPGs with real-time WebSocket communication. Includes a batteries-included headless engine server, a debugging client, example content and a CMS.
⚠️ Pre-Release Beta Breaking package updates may still occur regularly and unpredictably. There is no timeline yet for a stable Alpha release.
🤖 Clanker Alert: Extensive use of LLM generated code This project is an exercise in testing the limits of agentic development processes. Ideologically opposed developers should skip it. As an experimental artifact, the existence of this project should not be mistaken for a positive or negative statement about agentic development. Although we can say there has been a rigorous cybersecurity review and the engine has over 800 tests, this software is provided "as-is" and "without warranty of any kind", per the MIT license.
Latest Roadmap Release: Phase 17 - Environmental systems (Weather, Biomes, Flora, Fauna, Ecosystems)
Quickstart
Prerequisites
- Python 3.11 or higher
- pip (Python package manager)
Step 1: Create Project Directory
mkdir my-game
cd my-game
Step 2: Create Virtual Environment
# Windows
python -m venv .venv
.\.venv\Scripts\Activate
# macOS/Linux
python3 -m venv .venv
source .venv/bin/activate
Step 3: Install Daemons Engine
pip install daemons-engine
Step 4: Initialize Your Game
daemons init <new_game>
This creates:
world_data/YAML content (rooms, NPCs, items)config.pyServer configurationmain.pyApplication entry pointalembic.iniDatabase migration configalembic/Migration scripts
Step 5: Set Up Database
cd <new_game>
daemons db upgrade
Step 6: Run the Server
From /<new_game>...
# Development (auto-reload on code changes)
daemons run --reload
# Production (requires JWT secret key)
daemons run --production
The --production flag enables security hardening:
- Requires
JWT_SECRET_KEYenvironment variable - Enforces JWT issuer/audience validation
- Runs without auto-reload
If JWT_SECRET_KEY is not set, you'll be prompted to generate one.
You should see:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Application startup complete.
Step 7: Connect a Client
Option A: Reference Client
pip install flet
daemons client
Option B: Build Your Own
Connect via WebSocket to ws://127.0.0.1:8000/ws/game/auth.
Test Credentials:
- Username:
testplayer1/ Password:testpass1 - Username:
testplayer2/ Password:testpass2
Create Game Content
All content is defined in YAML files under world_data/.
Example Room (world_data/rooms/tavern.yaml)
id: tavern_main
name: "The Rusty Tankard"
description: |
A cozy tavern with a crackling fireplace.
room_type: indoor
area_id: starter_town
exits:
north: town_square
Example NPC (world_data/npcs/barkeeper.yaml)
id: npc_barkeeper
name: "Greta the Barkeeper"
description: "A stout woman with a warm smile."
level: 5
behaviors:
- merchant
spawn_room: tavern_main
Project Structure
my-game/
world_data/ # Your game content
rooms/ # Room definitions
items/ # Items and equipment
npcs/ # NPC templates
quests/ # Quest definitions
dialogues/ # NPC dialogue trees
alembic/ # Database migrations
config.py # Server configuration
main.py # Application entry point
dungeon.db # SQLite database
Quick Reference
| Task | Command |
|---|---|
| Initialize project | daemons init |
| Run migrations | daemons db upgrade |
| Start server (dev) | daemons run --reload |
| Start server (prod) | daemons run --production |
| Run client | daemons client |
| URL | Description |
|---|---|
| http://127.0.0.1:8000/docs | Swagger API docs |
| http://127.0.0.1:8000/redoc | ReDoc API docs |
Documentation
LLM Context Files
The docs/build_docs/ directory contains context articles and implementation plans designed for AI coding assistants (GitHub Copilot, Claude, Cursor, etc.). When we ask an LLM agent to make a detailed plan before implementation, a best practice is to capture the plan in a markdown file so that we can keep the LLM on task and hold it accountable to stated objectives.
For your own game: Run the build script to generate context files for your customizations:
python docs/build_docs/build_context.py
This will produce llm_context_architecture.md, llm_context_content.md, llm_context_index.md, and llm_context_protocol.md.
Delete these files and run build_context.py to rebuild the context after a major change.
License
MIT License see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file daemons_engine-0.1.21.tar.gz.
File metadata
- Download URL: daemons_engine-0.1.21.tar.gz
- Upload date:
- Size: 750.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3abf2e8e65e72e35388699abd9fe78509a02f10f7baed8655414e1a8f6031ae
|
|
| MD5 |
2a7a3093a368301dd1cb4018628c4891
|
|
| BLAKE2b-256 |
7aba8cadeb1b0eb2887f12bb3cebf62503c611f288536380588b3c8b9762a957
|
File details
Details for the file daemons_engine-0.1.21-py3-none-any.whl.
File metadata
- Download URL: daemons_engine-0.1.21-py3-none-any.whl
- Upload date:
- Size: 927.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
860e58f6ea168189d04414aa862e4663d254912cc8c196991563520f66de6713
|
|
| MD5 |
ed852fb87458f8982bd48f78791f9bf2
|
|
| BLAKE2b-256 |
5e8fa9772de78a6d275cfcdebc5ae1735c89183306b99d71b4578a0624e0a270
|