/r/Evennia
Evennia is an open-source library and toolkit for building multi-player online text games (MUD, MUX, MUSH, MUCK and other MU*). You easily design your entire game using normal Python modules. Apart from supporting traditional clients, Evennia comes with both a game web-client and a web-server out of the box.
Welcome to /r/Evennia, a community for the Evennia MUD codebase.
If you are new to Evennia, see the Introduction.
Player Links
Developer Links
To get started developing with Evennia, see Getting Started.
Community Links
Subreddits you may like
/r/Evennia
I know that this post is probably pretty superfluous, but I felt the need to make it anyway. I just really wanted to thank the creator of Evennia for everything they have done in the development of the framework and making a wonderful free product for amateur game creators to use.
I have incredibly bad clinical anxiety and sometimes I find it hard to even want to wake up. Though Evennia has helped me start and slowly work on a project that keeps me focused and happy. However one of the ironic crux is, that I have no programming knowledge what so ever and have extreme difficulty learning new things.
However, with patience and daily tinkering with trial and error between Claude.ai, Deepseek, and CHATGPT and about a week, I now have a functioning starting character class with working character sheet, personalized stats that I created, functional basic mud combat with loot, corpses, and respawn as well as mob, armor, and weapon creation commands that can make, edit, summon, and remove everything from in game. As of today I also now have equipment by armor and weapons, both two handed and dual wield, and it works as well as correctly updates character sheet stats.
I know to most, it really doesn't mean much, and they could spin up that kind of logic in mere minutes. Though for me it is a journey of patience and tweaking multiple iteration of code snippets generated by an AI that might or might not ruin my code base by truncating or omitting when I'm not paying attention and just pasting replies.
Anyway, my main point before it gets away from me is this. For people who have a strong urge to create and grasp at the feeling of happiness they had when they played mud games in their younger days Evennia really is a gift. So thank you, for this great tool that helps me look forward to waking up some days, and thank you for opening the door to reclaiming some of those feelings of normality we all miss so much.
We really do appreciate your work.
I'm a little late in pointing this out, but like every year Hacktoberfest is going on throughout October - and Evennia is participating!
Make 4 quality PRs against an OSS repository (like Evennia) to help out the open-source community and gain internet cred!
If you want to help out Evennia, you can grab any ticket you want, but here are a few specifically suitable: https://github.com/evennia/evennia/issues?q=is%3Aissue+is%3Aopen+label%3Ahacktoberfest+
Hack on!
Hey everyone!
I’ve recently set up Evennia on an Ubuntu server, and it’s up and running smoothly. I can connect to it and play the game in the browser without any issues.
However, I’ve been struggling for the past two days trying to configure SSL for port 4001, which should be handling the secure connections. SSL is already installed and working fine on the domain, but it seems like I might have misconfigured something in `settings.py`.
When I try to run Evennia on port 4001 alongside port 443, I can access the directories, but the game itself isn’t showing up.
Any insights or suggestions on how to get SSL working correctly for port 4001 would be greatly appreciated! Thanks in advance! 😊
This is an appreciation post.
Just started my gamedev journey - I’m planning to create a relatively elaborate browser text-based RPG and stumbled upon Evennia when looking up some mechanics.
I’m a Django developer and I before I discovered this gem I thought I’ll have to figure out most of the mechanics myself. Even though I might not implement Evennia 100% (I will definitely skip telnet, for example), I will read the entire documentation from cover to cover several times because it’s just that good!
Thank you for the hard work - the documentation is absolutely amazing and sheer amount of knowledge in the HowTo section is extremely valuable!
I hope to make at least a semi-successful game just so I could tell more people about Evennia. I also hope to be able to contribute once I get properly settled in.
Thanks again!
March 17, 2024
Major release. Check out for backwards-incompatible changes below.
evennia[extra]
scipy dependency to 1.12 to support latest Python. Note that this may change which (equivalent) path is being picked when following an xyzgrid contrib pathfinding.DefaultObject.get_numbered_name
now gets object's name via .get_display_name
for better compatibility with recog systems.DefaultObject.get_display_name
, instead using new .get_extra_display_name_info
method for getting this info. The Object's display template was extended for optionally adding this information. This makes showing extra object info to admins an explicit action and opens up get_display_name
for general use.DefaultObject.get_numbered_name
used .name
instead of .get_display_name
before, which broke recog systems.ON_DEMAND_HANDLER.set_dt(key, category, dt)
and .set_stage(key, category, stage)
to allow manual tweaking of task timings, for example for a spell speeding a plant's growth (Griatch)ON_DEMAND_HANDLER.get_dt/stages(key,category, **kwargs)
, where the kwargs are passed into any stage-callable defined with the stages. (Griatch)use_assertequal
kwarg to the EvenniaCommandTestMixin
testing class; this uses django's assertEqual
over the default more lenient checker, which can be useful for testing table whitespace (Griatch)utils.group_objects_by_key_and_desc
for grouping a list of objects based on the visible key and desc. Useful for inventory listings (Griatch)DefaultObject.get_numbered_name
return_string
bool kwarg, for only returning singular/plural based on count instead of a tuple with both (Griatch)@reboot
alias to @reset
to not mislead people into thinking you can do a portal+server reboot from in-game (you cannot) (Griatch)Hi all, I'm new to Evennia, and I thought I would use the SimpleDoor contribution to create exits that include doors, gates, etc.
The problem I'm having is that I can't figure out how to use it with directional commands. I've tried a few different ways:
First I tried:
u/open east:contrib.grid.simpledoor.SimpleDoor = #115
That works for one end of the connection, but it creates an exit named "east" in the destination room (if there is already an "east" exit then it overwrites it). In other words, you can move "east" to the other room, but you can't move "west" to return to the room you were in--you have to move "east" again instead.
What I'd like it to do is to create a "west" exit, or at least allow me to define the name of the return exit.
Then I tried doing it through code. The function is long, so I won't post it all here. The end result, though, is that it manually creates a SimpleDoor with the desired exit names ("east" to move east; "west" to move west), and if you examine them then they seem like they should work:
u/examine east
------------------------------------------------------------------------------------------
Name/key: east (#182)
Aliases: east
Typeclass: SimpleDoor (evennia.contrib.grid.simpledoor.simpledoor.SimpleDoor)
Location: The Meadow (#114)
Home: Limbo (#2)
Destination: Entry Way (#115)
Locks: traverse:false()
Stored Cmdset(s):
evennia.commands.cmdset.CmdSet [ExitCmdSet] (Union, prio 101, duplicates: T)
Merged Cmdset(s):
evennia.commands.cmdset.CmdSet [ExitCmdSet] (Union, prio 101, duplicates: T)
Commands available to east (result of Merged Cmdset(s)):
east
Persistent Attributes:
door_name=a sturdy door
return_exit=west [type: <class 'evennia.contrib.grid.simpledoor.simpledoor.SimpleDoor'>]
------------------------------------------------------------------------------------------
However, when I try to move east from the room I'm in, or when I teleport to the other end of the connection and try to move west, it says the command is not available:
[ Exits: east(#182) ]
east
Command 'east' is not available. Maybe you meant "@typeclasses", "setobjalias" or "setdesc"?
Am I doing something wrong?
https://github.com/evennia/evennia/discussions/3020#discussioncomment-7912729
A lot of new features, and a truckload of nice contributions from the community!
Hello! So, we are starting up a modern nights Vampire: The Masquerade (5th edition) Mu*! The game is going to take place in Prague. For now, we are going with Vampire and Mortals classes, until we get more settled and have the proper staff for such. As of now, we are still in the building/coding stage of things. We are looking/needing coders and builders! The codebase is evennia. Currently, there are three of us and we are all neew to evennia's codebase so whatever help we can get, we will take! Feel free to log on and hit Kaos up: beckon.vineyard.haus port 6666
Like every year, Evennia - the Python MU creation framework - is taking part in Hacktoberfest. Make 4 PRs against Evennia (or any other participating OSS project) to win prices!
Click here for how to get going helping Evennia this year!
It's a great excuse to get your feet wet with OSS development while helping the MU* community all at once!
Evennia 2.2.0 is out! Mostly bug fixes, but also a new optional contrib for making your NPCs more talkative by having them use an LLM (Large Language Model).
https://github.com/evennia/evennia/discussions/3020#discussioncomment-6652965
Since Evennia uses semantic versioning, the change of the major version indicates a (potentially) backwards-incompatible change. So keep an eye out when updating to the latest. But it's worth it, because there are a lot of changes introduced over the last few months! Check out the dev blog with more details here.
If you have more questions, jump into our very active discord and join the Evennia community. :)
Hi just wondering what are peoples hosting recommendations? I am novice level familiarity with AWS EC2 which was an option Ive considered. Mainly because I do not have a computer that is running 24/7 and dont really want to leave my computer publicly accessible. As usual I am looking for the most cost effective solution that I can safely allow people to contribute to the game as it is in pre alpha developmental stages. What is everyones experience with this? I plan on using Git for updating code as well as allowing builders to just build within game using build commands. TIA
Hi, I am new to Evennia and Python in general. I am usually a Linux user but am using this Mac atm and have setup Evennia on locally to run and learn. Does anybody know why my terminal cursor keeps adding a space every few seconds after I connect to Evennia server? Even in the ipython environment, it just keeps adding spaces. Outside of Evennia, when I am not connected, using "nc localhost 4000", it behaves normally. TIA
Edit: The issue is from using "nc" (which is mac default) Solved by installing Telnet and using that instead.
I'm sure that this is possible, but I'm looking for some input on how hard an idea I have for a game would be. I'll start by saying I've probably been a beginner programmer over 15 times, but never really getting deep enough to not consider myself a beginner. I would say I could be a novice scripter, mostly in Tintin or bash. I've done some python introductions a few times in the past, but never used it consistently enough for it to stick. I've played a few different muds, and help admin one, so I have a rough idea of that side of things as well.
I'm exploring the idea of creating a game that is about my family history, where players (all relatives) play themselves and time travel around the world to visit ancestors. Each player would have a pedigree chart as a main item and try to fill in all the gaps, maybe have a quest mob that says something like "find your mother's mother's father" or something similar.
I feel like making the people isn't going to be the issue (although figuring out how to import from a GEDCOM file would speed things up quite a bit) but I'm not sure how to deal with time and people. I would rather not have to write a room for every different time period, but rather have the people load only if they were there at that time. So visiting a town in England only for example in 1900 would have different people than if I went in 1850.
So how hard would it be to do something like this in Evennia?
As of today, Evennia 1.0 develop branch merged into main!
Evennia is a Python server and framework for creating MUD/MU-style text-based multiplayer games.
1.0 was a lot of work! Thanks everyone who helped and contributed! As usual, report bugs in the issue tracker.
If you are already using Evennia, this is the key documentation to read:
This is just a brief summary. See the Changelog for the full list.
Major new features compared to 0.9.5
Contribs
Contribs are optional, more game-specific code contributed by the Evennia community - useful to build from or use as inspiration.
The `contrib` folder structure was changed from 0.9.5. All contribs are now in sub-folders and organized into categories. All import paths must be updated. See the new Contribs overview.
There's a lot more, apart from the changelog, it's summarized in the release notes.
Hello, everyone!
Hopefully, my questions are not too obvious.
I'm not a computer programmer, nor an IT professional, but I have an interest in Text Adventures and a familiarity with Python. I have a few questions about Evennia.
I'm interested in Evennia mainly for two reasons: (1) It's Python, (2) I found this quote in the inform7 cookbook that made me realize it is not the tool for me:
Story files produced by Inform tend not to contain elaborate typographical effects. They would only distract. Like a novel, a classic work of IF is best presented in an elegant but unobtrusive font.
And I don't wanna write a novel, I wanna make a text game! This attitude makes it clear to me that inform7 will not easily provide many
I want a text adventure
As we have done for the last six years or something like that, Evennia is again taking part in Hacktoberfest - make four PRs against Evennia (or another participating OSS repo) during the month of October and win a T-shirt!
Take the chance to get involved in Open source, MUD-library creation and Python, all at once!
So I'm trying to get this thing running and I'm getting an error when I run evennia --init mygame
I keep getting a traceback error talking about _getfullpathname needs to be a string, bytes, or os.pathlike, not noneType... I followed the instructions and didn't get any errors otherwise. Help?
https://www.evennia.com/devblog/
I've used Blogger/Blogspot for many years, but I wanted to write my dev blogs in Markdown like I do for other texts in Evennia land. So I wrote my own little blog platform for my own needs.
If you used RSS with the old dev blog, you need to update your feed.
I'm mostly curious if someone has implemented a combat system with the complexity/balance to put combat front and center of the experience and eventually, enable PK in a way that will feel familiar to ROM/Diku/Merc. In my mind, I currently imagine evennia in the mud space next to RPIs, but maybe I am not thinking about it right. My background in MUDs started with lambdamoo & foomoo back in the day, but have I helped build 3-4 different ROM based muds as well.
As I look to kick off my next project, I want to start hacking on something that combines an RP world with strong PK balance, but building a PK system from scratch is fairly daunting and usually requires an active playerbase to see which combinations are over or underpowered. The vast majority of PK systems I've seen were in fact ROM extensions and not completely original combat systems.
There is a ROM 2.4 to python that Davion at Mudbytes released a while back. I got both that and Evennia running last night on my local machine and have been debating pros/cons of each. I want to build in python because that's where the dev community is and I want to see if I can get a few collaborators.
My goal is not actually to run a mud but rather to put together an MVP for a PK/RP mud and then see if I can get other developers/builders interested. I want to have fully functional (if boring) areas, balanced race/class combos, functioning PK and PvP systems (arena, capture the flag, looting, etc), and a solid OLC/Prog system, which for me would be MVP.
My gut tells me that Python ROM will get me where I want faster. Its missing OLC, and I would want to write a different prog system I think, but its a functioning mud in a similar style to the one I plan to build. On the other hand, using Evennia would give my project more legs/reach with developers and a better long term runway.
I'd be very curious to hear anyone's experience trying to build ROM-like classes & combat systems into evennia and if there are any functioning muds that have done so. I didn't see any modules for things like this as well, which made me curious.
Making my own MUD has been my white whale since 1995. I've been involved in making other MUDs, but I've never successfully made my own. And since I wrote an article about making a MUD specifically targetting the visually impaired users who use a screen reader, I've once again (sigh) become obsessed with the idea.
The thing is, I have specific ideas of how I want to do things. I don't want a traditional 2 second tick real-time combat system. Instead, I want a turn-based system where all combatants have 30 seconds to decide on their action, and then the turn is resolved and the result displayed for everyone. And I also have fairly specific ideas of how levels, skills and classes should work. My point is, even if the code base I start with has support for all these things, I'd probably have to start by going all around the codebase, ripping out things, which could become a nightmare if everything depends on everything else. I'd rather not have to do that. And doing everything from scratch myself isn't appealing either.
A few years ago, I went to PyCon Sweden where the maintainer of Evennia held a very interesting talk about it, which made me aware of its existence. So now, my question is - how modular is Evennia? Would it be a pain for me to rip out a bunch of systems to make room for my own, or would it be fairly straight forward? Because if it's not, I think I'd rather go look for something smaller where there's less to rip out.
My previous MUD coding experience is mostly with LPMUDs of different kinds. And I know if I were to start with one of those, I'd have to lots of stuff to painfully rip out (they usually come with pretty much everything ready to go and hard-coded into the game, making it hard to remove).
I promise I looked through the documentation and tried to get some answers, but I've come up short either because it's simpler than I think or my unfamiliarity with python.
edit: For number four, if I do use scripts for that purpose, where can I attach every new character with the update scripts? The tutorial on scripts shows a lot of detail on how to randomly run them in game but not how or where to attach them permanently