The mudpy project aims to create a simple, generic, cross-platform, freely-redistributable MUD core engine which can be easily understood and extended. It is written in pure Python 3 and has only pure Python dependencies. All configuration and data are stored in consistently-formatted plain text (YAML 1.1) files for ease of administration. The core engine is unicode-clean internally and supports UTF-8 encoding for input and output of extended text characters.

The mudpy program and sample content are released under a free and open license, and any bug reports, criticisms, ideas, patches, content submissions or other offers of collaboration are wholeheartedly welcome.

what’s missing

This project is still very much a work in progress, and is unlikely to be suitable for anyone who isn’t willing to put in a bunch of work (help implementing features upstream is welcome, of course!). Here’s a non-comprehensive list of missing things most folks are likely to expect in a MUD:

  • interactive objects/props

  • inventory/equipment management

  • non-player characters

  • a default combat system

  • sample races/classes and spells/skills

  • example implementation of character stats/progression

  • closeable/lockable portals

  • ability to change randomly-generated avatar names

  • pagination of the output stream

what’s included

The fundamentals of a multi-user service are in place, and foundations are laid on which the missing features above can be built. Here are some highlights of what’s been implemented so far:

  • the beginnings of a MUD framework

    • account creation, authentication and lobby menus

    • movement between rooms/locations with inferred portals

    • in-room communication between users

    • setting and viewing user preferences

    • an integrated command help system

    • world creation and introspection commands for admins

    • live reloading of configuration and source code

  • a full-featured Telnet service with a focus on IETF RFC compliance

    • RFC 854 Telnet protocol

    • RFC 856 binary mode

    • RFC 857 echo control

    • RFC 858 go-ahead suppression

    • RFC 885 end-of-record transmission

    • RFC 1091 terminal type

    • RFC 1073 window size negotiation

    • RFC 1184 line-at-a-time input mode

    • RFC 1143 “Q method” negotiation state engine

  • mature development practices

    • traditional Python distutils/setuptools/pip packaging

    • comprehensive regression and style testing

    • minimal runtime dependencies

    • extensive logging

    • flexible, generalized data model

    • in-repository documentation