The Python MU* Development Library

Evennia Dev Blog

Various Evennia- and MUD-related musings by Griatch, the Evennia lead developer.

Evennia 2.0.0 released today
- June 10, 2023


As part of our new use of semantic versioning, Evennia 2.0.0 was released today. Evennia is a Python MU* creation framework and server. As the change of the major version indicates, this is a backwards incompatible change ... well, maybe. It depends on your use-case. Read on.

In this post I'll go over some of the new things since the release of Evennia 1.0 some six months ago.

New version of the ExtendedRoom

The main thing that may be backwards income is the ExtendedRoom contrib. This contrib extends the standard room with the ability to look at 'details' and to have descriptions that change by season and by time-of-day in the game. I originally wrote the ExtendedRoom contrib more than a decade ago and it was in dire need to be recactored and cleaned up to use the modern tools available in Evennia. Not to mention make use of my additional years of experience since first creating it.

Here are the new features:

  • All rooms can now have any number of "room states", like "burning", "flooded", "dark", "crowded" or what have you. The season and time_of_day are now just treated as any other room-states except that they auto-change with in-game time.
  • Rooms can have any number of swappable room-descriptions, just by adding an Attribute desc_<roomstate> to the room. This will be used when a given room-state is set on the room. If no room state matches, the traditional desc Attribute is used.
  • In the old contrib, you could add special tags, like <morning>...</morning> in your descriptions and have those parts of the texts only appear when it's morning in-game. This still works, but only ever supported time-of-day states. The new way is to make use Evennia's FuncParser to embed functions in the text directly. The ExtendedRoom understands the new state inline function. This can be used with any room state (including seasons and time-of-day). For example: $state(morning, The morning sun is shining in.) or $state(burning, This place is on fire!).
  • The room still supports details - the ability to look at things in the room without needing to create a new database object first. This hasn't changed.
  • The ExtendedRoom now also has simple support for echoing random messages now and then to the room.

Overall, the code was completely re-written and cleaned up, making use of the latest Evennia tooling. It also has much better unit-test coverage. All the unit tests of the old implementation passes for the new one, but the changes are so big that it's nevertheless possible people making heavy use of this contrib may see side effects from upgrading.

Now, a contrib is not part of the core, so it (potentially) being backwards-incompatible should normally not warrant a major version bump. But I feel the ExtendedRoom contrib is used by so many in the Evennia community that it's prudent to up the major version to let people know that they should keep an eye out when upgrading.

More on the Beginner Tutorial

Most of my time has been spent continuing to work on the new Beginner Tutorial. Notably on part three, where we are making a whole little Evennia MUD game from scratch. While still not done, I have now added detailed lessons on

  • Creating RPG dice rollers and rule systems (in our example we are using the Knave TTRPG ruleset).
  • Organizing Player Character data, and character generation.
  • In-game objects and items.
  • Handling equipment and weapons.
  • In-game rooms.
  • Non-player characters.
  • Two types of Combat systems (Twitch-based and Turn based).

TODOs are Monster/NPC AI, Dynamical generation of rooms, Questin, Shops and some more bits and bobs. And of course a separate session on building the game world and tying all these systems together into a little example game.

A truckload of new features!

As usual, the Evennia community ame through with a bunch of new useful stuff since the release of Evennia 1.0.

  • Containers - A new contrib with a typeclass and commands to make and manage all sorts of containers, from chests to crates and jars, along with commands to put things in them and take things out of them. A great place to start tweaking for your own game implementation (InspectorCaracal).
  • The ANSI color fallbacks (for use when your client does not support XTerm256) were improved to make more sense (InspectorCaracal).
  • New logger.delete_log method for deleting log files from inside the server (aMiss-aWry).
  • For those intending to override the SessionHandler, it was cleaned up and refactored to make it less prone to cause circular import issues (Volund).
  • New create_channel(attr=...) keyword, for setting channel Attributes directly on creation, especially from channels defined in settings.DEFAULT_CHANNELS (me)
  • Attributes will now properly save Python deques with maxlen=... set (me).
  • TagCategoryProperty - A new way to define tags with a particular category on a class at creation-time, without having to do so in the at_object_creation method (me).
  • A lot of bug fixes; see the CHANGELOG for all the details!


Over summer, my development usually slows down a bit, but I plan to keep pushing on getting that Beginner tutorial done. We are also seeing more people joing the evennia discord, which means more eyes on the code and more bugs and edge cases being detected (and ironed out). So a lot of maintenance work to be done in the short term.

In the longer term, there are a lot of exciting plans for Evennia in the pipe, but we'll get there when we get there. :)

Have a nice summer!