<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Evennia 1.0 released]]></title><description><![CDATA[<p dir="auto">As  of today, The <code>1.0-dev</code> develop branched merged into the <code>main</code> branch.  <img src="https://brandmu.day/assets/plugins/nodebb-plugin-emoji/emoji/android/1f389.png?v=ad502f21e27" class="not-responsive emoji emoji-android emoji--tada" style="height:23px;width:auto;vertical-align:middle" title=":tada:" alt="🎉" /> This was a <em>a lot</em> of work. Thanks everyone who helped and contributed! As usual, report bugs in the <a href="https://github.com/evennia/evennia/issues/new/choose" target="_blank" rel="noopener noreferrer nofollow ugc">issue tracker</a>.</p>
<p dir="auto">Key documentation to read:</p>
<ul>
<li><a href="https://www.evennia.com/docs/latest/Setup/Setup-Overview.html#installation-and-running" target="_blank" rel="noopener noreferrer nofollow ugc">New installation instructions</a> if you install from scratch</li>
<li><a href="https://www.evennia.com/docs/latest/Setup/Installation-Upgrade.html" target="_blank" rel="noopener noreferrer nofollow ugc">Upgrading your 0.9.5 game to Evennia 1.0</a></li>
</ul>
<h1><a class="anchor-offset" name="evennia-1-0-release-notes"></a>Evennia 1.0 Release Notes</h1>
<p dir="auto">This summarizes the changes. The <a href="https://www.evennia.com/docs/latest/Coding/Release-Notes-1.0" target="_blank" rel="noopener noreferrer nofollow ugc">doc release notes</a> is like this list but with more detail.  The <a href="https://www.evennia.com/docs/latest/Coding/Changelog.html" target="_blank" rel="noopener noreferrer nofollow ugc">Changelog</a> has <em>all</em> the detail.</p>
<ul>
<li>Main development now on <code>main</code> branch. <code>master</code> branch remains, but will not be updated anymore. If you follow along on GIT, switch to <code>main</code> branch; the <code>develop</code> branch will not see updates until work on the next Evennia version picks up.</li>
<li>Old documentation sources (github wiki, readthedocs) were closed. Docs are only in one place now, at <a href="https://www.evennia.com/docs/latest/index.html" target="_blank" rel="noopener noreferrer nofollow ugc">https://www.evennia.com/docs/latest/index.html</a>.</li>
</ul>
<h2><a class="anchor-offset" name="minimum-requirements"></a>Minimum requirements</h2>
<ul>
<li>Python 3.10 is now required minimum. Ubuntu LTS now installs with 3.10. Evennia 1.0 is also tested with Python 3.11 - this is the recommended version for Linux/Mac. Windows users may want to stay on Python 3.10 unless they are okay with installing a C++ compiler.</li>
<li>Twisted 22.10+</li>
<li>Django 4.1+</li>
</ul>
<h2><a class="anchor-offset" name="major-new-features"></a>Major new features</h2>
<ul>
<li>Evennia is now on PyPi and is installable as <a href="https://www.evennia.com/docs/latest/Setup/Setup-Overview.html#installation-and-running" target="_blank" rel="noopener noreferrer nofollow ugc">pip install evennia</a>.</li>
<li>A completely revamped documentation at <a href="https://www.evennia.com/docs/latest" target="_blank" rel="noopener noreferrer nofollow ugc">https://www.evennia.com/docs/latest</a>. The old wiki and readmedocs pages are closing.</li>
<li>Evennia 1.0 now has a REST API which allows you access game objects using CRUD operations GET/POST etc. See <a href="https://www.evennia.com/docs/latest/Components/Web-API.html" target="_blank" rel="noopener noreferrer nofollow ugc">The Web-API docs</a> for more information.</li>
<li><a href="https://www.evennia.com/docs/latest/Setup/Channels-to-Discord.html" target="_blank" rel="noopener noreferrer nofollow ugc">Evennia&lt;&gt;Discord Integration</a> between Evennia channels and Discord servers.</li>
<li><a href="https://www.evennia.com/docs/latest/Components/Scripts.html" target="_blank" rel="noopener noreferrer nofollow ugc">Script</a> overhaul: Scripts’ timer component independent from script object deletion; can now start/stop  timer without deleting Script. The <code>.persistent</code> flag now only controls if timer survives reload - Script has to be removed with <code>.delete()</code> like other typeclassed entities. This makes Scripts even more useful as general storage entities.</li>
<li>The <a href="https://www.evennia.com/docs/latest/Components/FuncParser.html" target="_blank" rel="noopener noreferrer nofollow ugc">FuncParser</a> centralizes and vastly improves all in-string function calls, such as <code>say the result is $eval(3 * 7)</code> and say the result <code>the result is 21</code>. The parser completely replaces the old <code>parse_inlinefunc</code>. The new parser can handle both arguments and kwargs and are also used for in-prototype parsing as well as director stance messaging, such as using <code>$You()</code> to represent yourself in a string and having the result come out differently depending on who see you.</li>
<li><a href="https://www.evennia.com/docs/latest/Components/Channels.html" target="_blank" rel="noopener noreferrer nofollow ugc">Channels</a> New Channel-System using the <code>channel</code> command and nicks. The old <code>ChannelHandler</code> was removed and the customization and operation of channels have been simplified a lot. The old command syntax commands are now available as a contrib.</li>
<li><a href="https://www.evennia.com/docs/latest/Components/Help-System.html" target="_blank" rel="noopener noreferrer nofollow ugc">Help System</a> was refactored.
<ul>
<li>A new type of <code>FileHelp</code> system allows you to add in-game help files as external Python files. This means there are three ways to add help entries in Evennia:  1) Auto-generated from Command’s code. 2) Manually added to the database from the <code>sethelp</code> command in-game and 3) Created as external Python files that Evennia loads and makes available in-game.</li>
<li>We now use  <code>lunr</code> search indexing for better <code>help</code> matching and suggestions. Also improve<br />
the main help command’s default listing output.</li>
<li>Help command now uses <code>view</code> lock to determine if cmd/entry shows in index and <code>read</code> lock to determine if it can be read. It used to be <code>view</code> in the role of the latter.</li>
<li><code>sethelp</code> command now warns if shadowing other help-types when creating a new entry.</li>
<li>Make <code>help</code> index output clickable for webclient/clients with MXP (PR by davewiththenicehat)</li>
</ul>
</li>
<li>Rework of the <a href="https://www.evennia.com/docs/latest/Components/Website.html" target="_blank" rel="noopener noreferrer nofollow ugc">Web</a> setup, into a much more consistent structure and update to latest Django. The <code>mygame/web/static_overrides</code> and <code>-template_overrides</code> were removed. The folders are now just <code>mygame/web/static</code> and <code>/templates</code> and handle the automatic copying of data behind the scenes. <code>app.css</code> to <code>website.css</code> for consistency. The old <code>prosimii-css</code> files were removed.</li>
<li><a href="https://www.evennia.com/docs/latest/Components/Attributes.html#using-attributeproperty" target="_blank" rel="noopener noreferrer nofollow ugc">AttributeProperty</a>/<a href="https://www.evennia.com/docs/latest/Components/Tags.html" target="_blank" rel="noopener noreferrer nofollow ugc">TagProperty</a> along with <code>AliasProperty</code> and <code>PermissionProperty</code> to allow managing Attributes, Tags, Aliases and Permissios on typeclasses in the same way as Django fields. This dramatically reduces the need to assign Attributes/Tags in <code>at_create_object</code> hook.</li>
<li>The old <code>MULTISESSION_MODE</code> was divided into smaller settings, for better controlling what happens when a user connects, if a character should be auto-created, and how many characters they can control at the same time. See <a href="https://www.evennia.com/docs/latest/Concepts/Connection-Styles.html" target="_blank" rel="noopener noreferrer nofollow ugc">Connection-Styles</a> for a detailed explanation.</li>
<li>Evennia now supports custom <code>evennia</code> launcher commands (e.g. <code>evennia mycmd foo bar</code>). Add new commands as callables accepting <code>*args</code>, as <code>settings.EXTRA_LAUNCHER_COMMANDS = {'mycmd': 'path.to.callable', ...}</code>.</li>
</ul>
<h2><a class="anchor-offset" name="contribs"></a>Contribs</h2>
<p dir="auto">The <code>contrib</code> 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 <a href="https://www.evennia.com/docs/latest/Contribs/Contribs-Overview.html" target="_blank" rel="noopener noreferrer nofollow ugc">Contribs overview</a>.</p>
<ul>
<li>New <a href="https://www.evennia.com/docs/latest/Contribs/Contrib-Traits.html" target="_blank" rel="noopener noreferrer nofollow ugc">Traits contrib</a>, converted and expanded from Ainneve project. (whitenoise, Griatch)</li>
<li>New <a href="https://www.evennia.com/docs/latest/Contribs/Contrib-Crafting.html" target="_blank" rel="noopener noreferrer nofollow ugc">Crafting contrib</a>, adding a full crafting subsystem (Griatch)</li>
<li>New <a href="https://www.evennia.com/docs/latest/Contribs/Contrib-XYZGrid.html" target="_blank" rel="noopener noreferrer nofollow ugc">XYZGrid contrib</a>, adding x,y,z grid coordinates with in-game map and pathfinding. Controlled outside of the game via custom evennia launcher command (Griatch)</li>
<li>New <a href="https://www.evennia.com/docs/latest/Contribs/Contrib-Cooldowns.html" target="_blank" rel="noopener noreferrer nofollow ugc">Command cooldown contrib</a> contrib for making it easier to manage commands using<br />
dynamic cooldowns between uses (owllex)</li>
<li>New <a href="https://www.evennia.com/docs/latest/Contribs/Contrib-Godotwebsocket.html" target="_blank" rel="noopener noreferrer nofollow ugc">Godot Protocol contrib</a> for connecting to Evennia from a client written in the open-source game engine <a href="https://godotengine.org/" target="_blank" rel="noopener noreferrer nofollow ugc">Godot</a> (ChrisLR).</li>
<li>New <a href="https://www.evennia.com/docs/latest/Contribs/Contrib-Name-Generator.html" target="_blank" rel="noopener noreferrer nofollow ugc">name_generator contrib</a> for building random real-world based or fantasy-names based on phonetic rules (InspectorCaracal)</li>
<li>New <a href="https://www.evennia.com/docs/latest/Contribs/Contrib-Buffs.html" target="_blank" rel="noopener noreferrer nofollow ugc">Buffs contrib</a> for managing temporary and permanent RPG status buffs effects (tegiminis)</li>
<li>The existing <a href="https://www.evennia.com/docs/latest/Contribs/Contrib-RPSystem.html" target="_blank" rel="noopener noreferrer nofollow ugc">RPSystem contrib</a> was refactored and saw a speed boost (InspectorCaracal, other contributors)</li>
</ul>
<h2><a class="anchor-offset" name="translations"></a>Translations</h2>
<ul>
<li>New Latin (la) translation (jamalainm)</li>
<li>New German (de) translation (Zhuraj)</li>
<li>Updated Italian translation (rpolve)</li>
<li>Updated Swedish translation</li>
</ul>
<h2><a class="anchor-offset" name="utils"></a>Utils</h2>
<ul>
<li>New <code>utils.format_grid</code> for easily displaying long lists of items in a block. This is now used for the default help display.</li>
<li>Add <code>utils.repeat</code> and <code>utils.unrepeat</code> as shortcuts to TickerHandler add/remove, similar<br />
to how <code>utils.delay</code> is a shortcut for TaskHandler add.</li>
<li>Add <code>utils/verb_conjugation</code> for automatic verb conjugation (English only). This<br />
is useful for implementing actor-stance emoting for sending a string to different targets.</li>
<li><code>utils.evmenu.ask_yes_no</code> is a helper function that makes it easy to ask a yes/no question<br />
to the user and respond to their input. This complements the existing <code>get_input</code> helper.</li>
<li>New <code>tasks</code> command for managing tasks started with <code>utils.delay</code> (PR by davewiththenicehat)</li>
<li>Add <code>.deserialize()</code> method to <code>_Saver*</code> structures to help completely<br />
decouple structures from database without needing separate import.</li>
<li>Add <code>run_in_main_thread</code> as a helper for those wanting to code server code<br />
from a web view.</li>
<li>Update <code>evennia.utils.logger</code> to use Twisted’s new logging API. No change in Evennia API<br />
except more standard aliases logger.error/info/exception/debug etc can now be used.</li>
<li>Made <code>utils.iter_to_str</code> format prettier strings, using Oxford comma.</li>
<li>Move <code>create_*</code> functions into db managers, leaving <code>utils.create</code> only being<br />
wrapper functions (consistent with <code>utils.search</code>). No change of api otherwise.</li>
</ul>
<h2><a class="anchor-offset" name="locks"></a>Locks</h2>
<ul>
<li>New <code>search:</code> lock type used to completely hide an object from being found by<br />
the <code>DefaultObject.search</code> (<code>caller.search</code>) method. (CloudKeeper)</li>
<li>New default for <code>holds()</code> lockfunc - changed from default of <code>True</code> to default of <code>False</code> in order to disallow dropping nonsensical things (such as things you don’t hold).</li>
</ul>
<h2><a class="anchor-offset" name="hook-changes"></a>Hook changes</h2>
<ul>
<li>Changed all <code>at_before/after_*</code> hooks to <code>at_pre/post_*</code> for consistency<br />
across Evennia (the old names still work but are deprecated)</li>
<li>New <code>at_pre_object_leave(obj, destination)</code> method on <code>Objects</code>.</li>
<li>New <code>at_server_init()</code> hook called before all other startup hooks for all<br />
startup modes. Used for more generic overriding (volund)</li>
<li>New <code>at_pre_object_receive(obj, source_location)</code> method on Objects. Called on<br />
destination, mimicking behavior of <code>at_pre_move</code> hook - returning False will abort move.</li>
<li><code>Object.normalize_name</code> and <code>.validate_name</code> added to (by default) enforce latinify<br />
on character name and avoid potential exploits using clever Unicode chars (trhr)</li>
<li>Make <code>object.search</code> support ‘stacks=0’ keyword - if <code>&gt;0</code>, the method will return<br />
N identical matches instead of triggering a multi-match error.</li>
<li>Add <code>tags.has()</code> method for checking if an object has a tag or tags (PR by ChrisLR)</li>
<li>Add <code>Msg.db_receiver_external</code> field to allowe external, string-id message-receivers.</li>
<li>Add <code>$pron()</code> and <code>$You()</code> inlinefuncs for pronoun parsing in actor-stance strings using <code>msg_contents</code>.</li>
</ul>
<h2><a class="anchor-offset" name="command-changes"></a>Command changes</h2>
<ul>
<li>Change default multi-match syntax from <code>1-obj</code>, <code>2-obj</code> to <code>obj-1</code>, <code>obj-2</code>, which seems to be what most expect.</li>
<li>Split <code>return_appearance</code> hook with helper methods and have it use a template<br />
string in order to make it easier to override.</li>
<li>Command executions now done on copies to make sure <code>yield</code> don’t cause crossovers. Add<br />
<code>Command.retain_instance</code> flag for reusing the same command instance.</li>
<li>Allow sending messages with <code>page/tell</code> without a <code>=</code> if target name contains no spaces.</li>
<li>The <code>typeclass</code> command will now correctly search the correct database-table for the target<br />
obj (avoids mistakenly assigning an AccountDB-typeclass to a Character etc).</li>
<li>Merged <code>script</code> and <code>scripts</code> commands into one, for both managing global- and<br />
on-object Scripts. Moved <code>CmdScripts</code> and <code>CmdObjects</code> to <code>commands/default/building.py</code>.</li>
<li>The <code>channel</code> commands replace all old channel-related commands, such as <code>cset</code> etc</li>
<li>Expand <code>examine</code> command’s code to much more extensible and modular. Show<br />
attribute categories and value types (when not strings).
<ul>
<li>Add ability to examine <code>/script</code> and <code>/channel</code> entities  with <code>examine</code> command.</li>
</ul>
</li>
<li>Add support for <code>$dbref()</code> and <code>$search</code> when assigning an Attribute value<br />
with the <code>set</code> command. This allows assigning real objects from in-game.</li>
<li>Have <code>type/force</code> default to <code>update</code>-mode rather than <code>reset</code>mode and add more verbose<br />
warning when using reset mode.</li>
</ul>
<h2><a class="anchor-offset" name="coding-improvement-highlights"></a>Coding improvement highlights</h2>
<ul>
<li>The db pickle-serializer now checks for methods <code>__serialize_dbobjs__</code> and <code>__deserialize_dbobjs__</code> to allow custom packing/unpacking of nested dbobjs, to allow storing in Attribute. See <a href="https://www.evennia.com/docs/latest/Components/Attributes.html" target="_blank" rel="noopener noreferrer nofollow ugc">Attributes</a> documentation.</li>
<li>Add <code>ObjectParent</code> mixin to default game folder template as an easy, ready-made<br />
way to override features on all ObjectDB-inheriting objects easily.<br />
source location, mimicking behavior of <code>at_pre_move</code> hook - returning False will abort move.</li>
<li>New Unit test parent classes, for use both in Evenia core and in mygame. Restructured unit tests to always honor default settings.</li>
</ul>
<h2><a class="anchor-offset" name="other"></a>Other</h2>
<ul>
<li>Homogenize manager search methods to always return querysets and not sometimes querysets and sometimes lists.</li>
<li>Attribute/NAttribute got a homogenous representation, using intefaces, both<br />
<code>AttributeHandler</code> and <code>NAttributeHandler</code> has same api now.</li>
<li>Added <code>content_types</code> indexing to DefaultObject’s ContentsHandler. (volund)</li>
<li>Made most of the networking classes such as Protocols and the SessionHandlers<br />
replaceable via <code>settings.py</code> for modding enthusiasts. (volund)</li>
<li>The <code>initial_setup.py</code> file can now be substituted in <code>settings.py</code> to customize<br />
initial game database state. (volund)</li>
<li>Make IP throttle use Django-based cache system for optional persistence (PR by strikaco)</li>
<li>In modules given by <code>settings.PROTOTYPE_MODULES</code>, spawner will now first look for a global<br />
list <code>PROTOTYPE_LIST</code> of dicts before loading all dicts in the module as prototypes.<br />
concept of a dynamically created <code>ChannelCmdSet</code>.</li>
<li>Prototypes now allow setting <code>prototype_parent</code> directly to a prototype-dict.<br />
This makes it easier when dynamically building in-module prototypes.</li>
<li>Make <code>@lazy_property</code> decorator create read/delete-protected properties. This is because it’s used for handlers, and e.g. self.locks=[] is a common beginner mistake.</li>
<li>Change <code>settings.COMMAND_DEFAULT_ARG_REGEX</code> default from <code>None</code> to a regex meaning that<br />
a space or <code>/</code> must separate the cmdname and args. This better fits common expectations.</li>
<li>Add <code>settings.MXP_ENABLED=True</code> and <code>settings.MXP_OUTGOING_ONLY=True</code> as sane defaults, to avoid known security issues with players entering MXP links.</li>
<li>Made <code>MonitorHandler.add/remove</code> support <code>category</code> for monitoring Attributes with a category (before only key was used, ignoring category entirely).</li>
</ul>
]]></description><link>https://brandmu.day/topic/261/evennia-1-0-released</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 11:45:58 GMT</lastBuildDate><atom:link href="https://brandmu.day/topic/261.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Dec 2022 22:35:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Evennia 1.0 released on Sun, 11 Jun 2023 05:38:32 GMT]]></title><description><![CDATA[<p dir="auto">Saw the post on r/MUD about 2.0 releasing – congrats!</p>
]]></description><link>https://brandmu.day/post/16374</link><guid isPermaLink="true">https://brandmu.day/post/16374</guid><dc:creator><![CDATA[Roz]]></dc:creator><pubDate>Sun, 11 Jun 2023 05:38:32 GMT</pubDate></item><item><title><![CDATA[Reply to Evennia 1.0 released on Thu, 08 Dec 2022 03:32:13 GMT]]></title><description><![CDATA[<p dir="auto">I can’t hit the thumbs-up button hard enough!</p>
]]></description><link>https://brandmu.day/post/9693</link><guid isPermaLink="true">https://brandmu.day/post/9693</guid><dc:creator><![CDATA[Juniper]]></dc:creator><pubDate>Thu, 08 Dec 2022 03:32:13 GMT</pubDate></item><item><title><![CDATA[Reply to Evennia 1.0 released on Wed, 07 Dec 2022 16:27:23 GMT]]></title><description><![CDATA[<p dir="auto">Thanks for the nice comments <img src="https://brandmu.day/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=ad502f21e27" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /> Yes, it’s good to get this out, finally.</p>
]]></description><link>https://brandmu.day/post/9685</link><guid isPermaLink="true">https://brandmu.day/post/9685</guid><dc:creator><![CDATA[Griatch]]></dc:creator><pubDate>Wed, 07 Dec 2022 16:27:23 GMT</pubDate></item><item><title><![CDATA[Reply to Evennia 1.0 released on Tue, 06 Dec 2022 15:11:19 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://brandmu.day/uid/158">@Griatch</a> Wow, congratulations!</p>
]]></description><link>https://brandmu.day/post/9679</link><guid isPermaLink="true">https://brandmu.day/post/9679</guid><dc:creator><![CDATA[Polk]]></dc:creator><pubDate>Tue, 06 Dec 2022 15:11:19 GMT</pubDate></item><item><title><![CDATA[Reply to Evennia 1.0 released on Sun, 04 Dec 2022 20:06:12 GMT]]></title><description><![CDATA[<p dir="auto"><img src="https://media.tenor.com/UkRbtN4XYpwAAAAC/congratulations-emma.gif" alt="congratulations" class=" img-fluid img-markdown" /></p>
]]></description><link>https://brandmu.day/post/9666</link><guid isPermaLink="true">https://brandmu.day/post/9666</guid><dc:creator><![CDATA[Tez]]></dc:creator><pubDate>Sun, 04 Dec 2022 20:06:12 GMT</pubDate></item><item><title><![CDATA[Reply to Evennia 1.0 released on Sun, 04 Dec 2022 01:15:39 GMT]]></title><description><![CDATA[<p dir="auto">OMG I am SO HAPPY FOR YOU!! CONGRATULATIONS!</p>
<p dir="auto">Thank you SO MUCH for all of your hard work and the contribution to our hobby, and thank you to your team of folks as well. Thank you thank you.</p>
]]></description><link>https://brandmu.day/post/9660</link><guid isPermaLink="true">https://brandmu.day/post/9660</guid><dc:creator><![CDATA[IoleRae]]></dc:creator><pubDate>Sun, 04 Dec 2022 01:15:39 GMT</pubDate></item><item><title><![CDATA[Reply to Evennia 1.0 released on Sun, 04 Dec 2022 01:08:13 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://brandmu.day/uid/158">@Griatch</a> I’ll post it over here too - that’s awesome! Congrats <img src="https://brandmu.day/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=ad502f21e27" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /></p>
<p dir="auto">Also the new documentation is snazzy.</p>
]]></description><link>https://brandmu.day/post/9659</link><guid isPermaLink="true">https://brandmu.day/post/9659</guid><dc:creator><![CDATA[Faraday]]></dc:creator><pubDate>Sun, 04 Dec 2022 01:08:13 GMT</pubDate></item></channel></rss>