As  of today, The 1.0-dev develop branched merged into the main branch.  
 This was a a lot of work. Thanks everyone who helped and contributed! As usual, report bugs in the issue tracker.
Key documentation to read:
- New installation instructions if you install from scratch
 - Upgrading your 0.9.5 game to Evennia 1.0
 
Evennia 1.0 Release Notes
This summarizes the changes. The doc release notes is like this list but with more detail. The Changelog has all the detail.
- Main development now on 
mainbranch.masterbranch remains, but will not be updated anymore. If you follow along on GIT, switch tomainbranch; thedevelopbranch will not see updates until work on the next Evennia version picks up. - Old documentation sources (github wiki, readthedocs) were closed. Docs are only in one place now, at https://www.evennia.com/docs/latest/index.html.
 
Minimum requirements
- 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.
 - Twisted 22.10+
 - Django 4.1+
 
Major new features
- Evennia is now on PyPi and is installable as pip install evennia.
 - A completely revamped documentation at https://www.evennia.com/docs/latest. The old wiki and readmedocs pages are closing.
 - Evennia 1.0 now has a REST API which allows you access game objects using CRUD operations GET/POST etc. See The Web-API docs for more information.
 - Evennia<>Discord Integration between Evennia channels and Discord servers.
 - Script overhaul: Scriptsā timer component independent from script object deletion; can now start/stop  timer without deleting Script. The 
.persistentflag now only controls if timer survives reload - Script has to be removed with.delete()like other typeclassed entities. This makes Scripts even more useful as general storage entities. - The FuncParser centralizes and vastly improves all in-string function calls, such as 
say the result is $eval(3 * 7)and say the resultthe result is 21. The parser completely replaces the oldparse_inlinefunc. 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$You()to represent yourself in a string and having the result come out differently depending on who see you. - Channels New Channel-System using the 
channelcommand and nicks. The oldChannelHandlerwas removed and the customization and operation of channels have been simplified a lot. The old command syntax commands are now available as a contrib. - Help System was refactored.
- A new type of 
FileHelpsystem 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 thesethelpcommand in-game and 3) Created as external Python files that Evennia loads and makes available in-game. - We now use  
lunrsearch indexing for betterhelpmatching and suggestions. Also improve
the main help commandās default listing output. - Help command now uses 
viewlock to determine if cmd/entry shows in index andreadlock to determine if it can be read. It used to beviewin the role of the latter. sethelpcommand now warns if shadowing other help-types when creating a new entry.- Make 
helpindex output clickable for webclient/clients with MXP (PR by davewiththenicehat) 
 - A new type of 
 - Rework of the Web setup, into a much more consistent structure and update to latest Django. The 
mygame/web/static_overridesand-template_overrideswere removed. The folders are now justmygame/web/staticand/templatesand handle the automatic copying of data behind the scenes.app.csstowebsite.cssfor consistency. The oldprosimii-cssfiles were removed. - AttributeProperty/TagProperty along with 
AliasPropertyandPermissionPropertyto 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 inat_create_objecthook. - The old 
MULTISESSION_MODEwas 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 Connection-Styles for a detailed explanation. - Evennia now supports custom 
evennialauncher commands (e.g.evennia mycmd foo bar). Add new commands as callables accepting*args, assettings.EXTRA_LAUNCHER_COMMANDS = {'mycmd': 'path.to.callable', ...}. 
Contribs
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 Contribs overview.
- New Traits contrib, converted and expanded from Ainneve project. (whitenoise, Griatch)
 - New Crafting contrib, adding a full crafting subsystem (Griatch)
 - New XYZGrid contrib, adding x,y,z grid coordinates with in-game map and pathfinding. Controlled outside of the game via custom evennia launcher command (Griatch)
 - New Command cooldown contrib contrib for making it easier to manage commands using
dynamic cooldowns between uses (owllex) - New Godot Protocol contrib for connecting to Evennia from a client written in the open-source game engine Godot (ChrisLR).
 - New name_generator contrib for building random real-world based or fantasy-names based on phonetic rules (InspectorCaracal)
 - New Buffs contrib for managing temporary and permanent RPG status buffs effects (tegiminis)
 - The existing RPSystem contrib was refactored and saw a speed boost (InspectorCaracal, other contributors)
 
Translations
- New Latin (la) translation (jamalainm)
 - New German (de) translation (Zhuraj)
 - Updated Italian translation (rpolve)
 - Updated Swedish translation
 
Utils
- New 
utils.format_gridfor easily displaying long lists of items in a block. This is now used for the default help display. - Add 
utils.repeatandutils.unrepeatas shortcuts to TickerHandler add/remove, similar
to howutils.delayis a shortcut for TaskHandler add. - Add 
utils/verb_conjugationfor automatic verb conjugation (English only). This
is useful for implementing actor-stance emoting for sending a string to different targets. utils.evmenu.ask_yes_nois a helper function that makes it easy to ask a yes/no question
to the user and respond to their input. This complements the existingget_inputhelper.- New 
taskscommand for managing tasks started withutils.delay(PR by davewiththenicehat) - Add 
.deserialize()method to_Saver*structures to help completely
decouple structures from database without needing separate import. - Add 
run_in_main_threadas a helper for those wanting to code server code
from a web view. - Update 
evennia.utils.loggerto use Twistedās new logging API. No change in Evennia API
except more standard aliases logger.error/info/exception/debug etc can now be used. - Made 
utils.iter_to_strformat prettier strings, using Oxford comma. - Move 
create_*functions into db managers, leavingutils.createonly being
wrapper functions (consistent withutils.search). No change of api otherwise. 
Locks
- New 
search:lock type used to completely hide an object from being found by
theDefaultObject.search(caller.search) method. (CloudKeeper) - New default for 
holds()lockfunc - changed from default ofTrueto default ofFalsein order to disallow dropping nonsensical things (such as things you donāt hold). 
Hook changes
- Changed all 
at_before/after_*hooks toat_pre/post_*for consistency
across Evennia (the old names still work but are deprecated) - New 
at_pre_object_leave(obj, destination)method onObjects. - New 
at_server_init()hook called before all other startup hooks for all
startup modes. Used for more generic overriding (volund) - New 
at_pre_object_receive(obj, source_location)method on Objects. Called on
destination, mimicking behavior ofat_pre_movehook - returning False will abort move. Object.normalize_nameand.validate_nameadded to (by default) enforce latinify
on character name and avoid potential exploits using clever Unicode chars (trhr)- Make 
object.searchsupport āstacks=0ā keyword - if>0, the method will return
N identical matches instead of triggering a multi-match error. - Add 
tags.has()method for checking if an object has a tag or tags (PR by ChrisLR) - Add 
Msg.db_receiver_externalfield to allowe external, string-id message-receivers. - Add 
$pron()and$You()inlinefuncs for pronoun parsing in actor-stance strings usingmsg_contents. 
Command changes
- Change default multi-match syntax from 
1-obj,2-objtoobj-1,obj-2, which seems to be what most expect. - Split 
return_appearancehook with helper methods and have it use a template
string in order to make it easier to override. - Command executions now done on copies to make sure 
yielddonāt cause crossovers. Add
Command.retain_instanceflag for reusing the same command instance. - Allow sending messages with 
page/tellwithout a=if target name contains no spaces. - The 
typeclasscommand will now correctly search the correct database-table for the target
obj (avoids mistakenly assigning an AccountDB-typeclass to a Character etc). - Merged 
scriptandscriptscommands into one, for both managing global- and
on-object Scripts. MovedCmdScriptsandCmdObjectstocommands/default/building.py. - The 
channelcommands replace all old channel-related commands, such ascsetetc - Expand 
examinecommandās code to much more extensible and modular. Show
attribute categories and value types (when not strings).- Add ability to examine 
/scriptand/channelentities withexaminecommand. 
 - Add ability to examine 
 - Add support for 
$dbref()and$searchwhen assigning an Attribute value
with thesetcommand. This allows assigning real objects from in-game. - Have 
type/forcedefault toupdate-mode rather thanresetmode and add more verbose
warning when using reset mode. 
Coding improvement highlights
- The db pickle-serializer now checks for methods 
__serialize_dbobjs__and__deserialize_dbobjs__to allow custom packing/unpacking of nested dbobjs, to allow storing in Attribute. See Attributes documentation. - Add 
ObjectParentmixin to default game folder template as an easy, ready-made
way to override features on all ObjectDB-inheriting objects easily.
source location, mimicking behavior ofat_pre_movehook - returning False will abort move. - New Unit test parent classes, for use both in Evenia core and in mygame. Restructured unit tests to always honor default settings.
 
Other
- Homogenize manager search methods to always return querysets and not sometimes querysets and sometimes lists.
 - Attribute/NAttribute got a homogenous representation, using intefaces, both
AttributeHandlerandNAttributeHandlerhas same api now. - Added 
content_typesindexing to DefaultObjectās ContentsHandler. (volund) - Made most of the networking classes such as Protocols and the SessionHandlers
replaceable viasettings.pyfor modding enthusiasts. (volund) - The 
initial_setup.pyfile can now be substituted insettings.pyto customize
initial game database state. (volund) - Make IP throttle use Django-based cache system for optional persistence (PR by strikaco)
 - In modules given by 
settings.PROTOTYPE_MODULES, spawner will now first look for a global
listPROTOTYPE_LISTof dicts before loading all dicts in the module as prototypes.
concept of a dynamically createdChannelCmdSet. - Prototypes now allow setting 
prototype_parentdirectly to a prototype-dict.
This makes it easier when dynamically building in-module prototypes. - Make 
@lazy_propertydecorator create read/delete-protected properties. This is because itās used for handlers, and e.g. self.locks=[] is a common beginner mistake. - Change 
settings.COMMAND_DEFAULT_ARG_REGEXdefault fromNoneto a regex meaning that
a space or/must separate the cmdname and args. This better fits common expectations. - Add 
settings.MXP_ENABLED=Trueandsettings.MXP_OUTGOING_ONLY=Trueas sane defaults, to avoid known security issues with players entering MXP links. - Made 
MonitorHandler.add/removesupportcategoryfor monitoring Attributes with a category (before only key was used, ignoring category entirely). 
 Yes, itās good to get this out, finally.
 ). But yeah, for professional artists, I fear the future will be grim unless they find some way to go with the flow and find a new role for themselves; it will become hard for companies not using AI to compete.
 The webclient code is admittedly first written at a time when Typescript was but a glimmer in the eye of some guru somewhere; it was written to be as generic as possible. One could certainly rework it with a more modern style today. Time, time ā¦