Over a year in making the most advanced mud client even more powerful there have been 26 new features added, 67 improvements, 65 bug fixes and 148 behind the scenes infrastructure changes so we can keep making Mudlet your number one choice.

The Mudlet development team are proud to announce the release of Mudlet 4.18. Thanks to everyone who pitched in and made Mudlet a nicer place for everyone. Read on for a short rundown on some of our more exciting improvements.

Download here.

For Everyone

Reminder: Don’t forget to enable automatic updates in the preferences screen so you get access to the latest important bug fixes.

Note: 4.18.3 fixes all colour issues relating to the previous 4.18 releases.

Bounty Program A Continued Success

Since the last release Mudlet’s Bounty Program has shelled out $2460 to contributors and developers for tasks ranging from documentation improvements to fixing hard crashes and with $2140 of incentives still available it’s still not too late to get started and see your contributions added to the next release.

Windows 64-bit Version Now Available

A new deployment solely for 64-bit Windows users is now available. Load up those big maps players and set your scrollback buffers to huge, you are no longer limited to 4GB of memory. These versions also incorporate Qt 6 libraries for better display resolution on HiDPI monitors.

For Players

New Games

We welcome Abandoned Realms (medieval fantasy), Accursed Lands (post-cataclysmic classic medieval) and MorgenGrauen (fantasy) as new default game options in the opening connection window.

Mudlet Packages (mpackage)

Open .mpackage files with Mudlet in a variety of ways;

  • from the command-line,
  • drag and drop,
  • double-click on a .mpackage file,
  • script,
  • or through the package manager.

Language Support

Korean has been added to the list of supported languages. The Korean translation has also received a gold star meaning it will be auto-selected as the language for users on Korean computers.

Faster Loading

Mudlet now loads even faster! This partly comes from the splash-screen being disabled by default but also code optimisations such as profile loading improvements have been made.

For Developers and Scripters

New Geyser.Button Element

Geyser, the layout manager for Mudlet, receives a new button element for those looking to customise their user interface.

Buttons being one of the common use cases for labels, this new element will make your scripts simpler and more readable. They are fully theme-able, single or dual state and can send commands or call Lua functions directly. Creating a button with the default options is as simple as myButton = Geyser.Button:new()

The Geyser Layout Manager reference documentation also received a review with alphabetical sorting of functions and further descriptions added.

GMCP Authentication

Different MUDs have diverse login command formats, making it challenging for MUD clients to handle login consistently. This extension provides a standardized way to exchange authentication information through GMCP, simplifying client development and improving compatibility. Additionally, the extension supports OAuth authorization flows, allowing clients to leverage external identity providers for login.

Improved Media Support

A menu has been added to the toolbar for quick access to mute all your media, or just turn off an individual source. There’s also a hotkey to mute: Alt+K

Two new functions to query your media have also been added to the API; getPlayingSounds() and getPlayingMusic().

Mapper Improvements

The generic_mapper package received a whole host of new commands to aid in getting around your favourite MUD. From adding and removing labels to setting room features or moving rooms to different coordinates; mapping just got easier. See the full list of commands available here.

Support for special exits in the script section of a room is now fully supported.


Of course, none of this is possible without the huge amount of hours our volunteers donate to the project. Thanks to all coders, translators, wiki editors and support provided by our community on Discord.



🔨 fixed:

– Fix: revert bold/bright colour changes (#7327)

– Fix: runtime errors aren’t visible until trigger editor is opened (#7329

– Fix: correct on screen information for MacOS (#7324)

✨ improved:

– Improve: lowercase triggers and scripts in tooltips (#7322)

– Improve: New Crowdin updates (#7321)


🔨 fixed:

– Fix: don’t send GMCP auth if either character or password is not filled in (#7304)

– Fix: stop bold and faint from affecting game text if BoldIsBright option used (alternative) (#7280)

– Fix: re-enable creation of titlecase DB names (#7306)

– Fix: update main script with new version and mpackage (#7310)


🔨 fixed:

– Fix: don’t send GMCP auth if we don’t have character/password filled out (#7303)

– Fix generic_mapper typos (#7298)


🆕 added:

– getConfig & setConfig option for HTML logging (#7232)

– Steam Launch Support (#7219)

– automatically update map on all changes via API (#7187)

– GMCP authenticate spec implementation (#7152)

– Korean as a selectable language for Mudlet (#7149)

– compare function for comparing tables (and other things) (#7122)

– Accursed Lands as a default game (#7112)

– automated uploads to download page (#7062)

– open .mpackage files with Mudlet (#7065)

– means to compose raw data for Lua Telnet testing and new protocols (#7066)

– Map mouse click event (sysMapWindowMousePressEvent) (#6962)

– missing scroll functions to Geyser.MiniConsole (#6875)

– Gif tracking for profile statistics and getProfileStats() (#7019)

– AshyriaMUD to list for mudlet-mapper.xml auto download (#6993)

– Ctrl+N as a shortcut to add item in trigger editor (#6907)

– script support for special exits in generic mapper script (#6887)

– scrollingState() function to Lua API (#6888)

– clearMapSelection() function (#6894)

– Geyser.Button and tests for it (#6801)

– Abandoned Realms as a default game (#6838)

– option to disable scrolling on miniconsoles (#6848)

– functions to convert one color echo string to another (#6849)

– persistent command history (#6767)

– accessibility data for trigger list, say if active (#6778)

– html escaping to some labels containing user-defined things such as trigger names (#6807)

– deleteMultiline function to make deleting lines from a multiline trigger easier (#6779)

– a placeholder text for aliases (#6759)

– allow historical maps to be selected in settings (#6715)

– Morgengrauen connection option (#6499)

✨ improved:

– add comment for translators for GMCP auth (#7283)

– Simplify Mute Options (#7296)

– copy2html now escapes more HTML characters (#7289)

– New Crowdin updates (#7166)

– speed up opening Mudlet (#7215)

– add faint support and separate bold from colours (#7010)

– add controlCharacterHandling to Lua get- & set-config (#7176)

– add named captures to Aliases (#7175)

– simplify dlgIRC::sendMsg(…) (#7172)

– Query Playing Media with API (#7167)

– add support for a codec to support a revised Medievia custom font (#7161)

– New Crowdin updates (#7157)

– New Crowdin updates (#7078)

– Update error message in db:create() (#7073)

– New Crowdin updates (#7076)

– New Environ and MNES Support (#7058)

– New Crowdin updates (#7053)

– Add map ignore help examples. (#7057)

– Enable alphabetical module and function sorting in geyser documentation (#7056)

– add support for Telnet AreYouThere command (#7050)

– Change AdjustableContainer default look and feel (#7052)

– add findItems function (#6742)

– make splashscreen opt-in (#6846)

– New Crowdin updates (#6953)

– Support Mud Terminal Type Standard (MTTS) (#7036)

– Add default template for new package in package exporter (#7041)

– generic_mapper help files update (#7029)

– Inform user of success of map save command. (#7038)

– Add optional argument to only flash containers when visible. (#7035)

– Hold ctrl while dragging to install as module (#7022)

– add ancestors functions (#6726)

– add separate tooltip to insertPopup() and other functions (alternative) (#6946)

– Media New Finish Parameter & Fix Fadein & Stop w/ FadeAway (#7026)

– Port IRE mapping script functions to generic_mapper (#7020)

– Default packages repacked to .mpackage format. Package descriptions added. (#6902)

– Mark undesired spaces around regex with a middle dot (#7021)

– link to reference to wikipedia in README.md (#6996)

– Add Mute Capability for Media (#6961)

– remove speedWalkDir normal exit directions from translation system (#6952)

– New Crowdin updates (#6931)

– show ID number in Editor windows (#6743)

– save and restore multi-view mode between Mudlet application runs (#6923)

– Update generic_mapper.xml help to elaborate on onVision event. (#6915)

– New Crowdin updates (#6912)

– New Crowdin updates (#6890)

– Don’t spellcheck 1 or 2 letter words (#6553)

– MXP Send menus can have a custom mouse over tooltip (#6877)

– New Crowdin updates (#6883)

– MXP text effects: bold, underline, italics, strikethrough (#6802)

– enabling and disabling all but main command line (#6873)

– show script loading errors (#6868)

– error messages by making code start on first line (#6855)

– Custom MXP elements now support default values for arguments (#6853)

– MXP SEND menus can be extended with MXP entities (#6852)

– New Crowdin updates (#6839)

– Mxp entities can be set to empty string (#6824)

– New Crowdin updates (#6810)

– Trigger Editor so pressing Enter would activate and deactivate items (#6829)

– don’t show individual Lua module loading messages (#6813)

– New Crowdin updates (#6809)

– clarify that the `Command:` box can run aliases too (#6764)

– Added tutorial for splitscreen scrollback (#5964) (#6800)

– Ctrl-2 and the others to initially focus on item list (#6799)

– New Crowdin updates (#6714)

– don’t allow profiles that failed to load to overwrite good profiles (#6791)

– report errors with loading the profile (#6735)

– save files in a more reliable manner (#6738)

– Remove obsolete context menu options (#6537)

– Throw error when nonstring passed to f function (#6777)

– add new area on move room if user inputs new name (#6345)

– report failure to create profile folder (#6757)

– don’t render map info empty box (#6755)

– profile preferences window (#6737)

🔨 fixed:

– crash in setProfileStylesheet() if called before profile open (#7270)

– Geyser UIs not loading on Windows (#7242)

– update area dropdown when new area is created via API (#7246)

– “Show errors” crashing Mudlet (#7239)

– correct warnings/errors found whilst working on Windows CI (#7224)

– Update CFGUI Source (#7222)

– announce autocompleted text for a11y (#7186)

– spellchecker loading on Windows (#6740)

– Replace QMediaPlaylist for move to Qt 6 (#7210)

– edbee crash in Qt6 (#7214)

– a crash when double-clicking on a word to select it (#7123)

– map.renameArea function calls. (#7174)

– typo in previous commit omitted a space (#7182)

– correct logic error that meant dodgy codepoints were always reported (#7163)

– incorrect allocation error handling in a few files (#7130)

– hotfix for Windows PTBs (#7142)

– prevent an out of bounds crash in copy() (#7120)

– Mudlet version reporting in GMCP (#7138)

– Reorder detection of different OSes and fix a typo affecting some of them (#7104)

– Local variable stored in non-local memory for instanceCoordinator (#7107)

– Remove version from terminal type (#7103)

– Typo in generic_mapper.xml help (#7092)

– Building on MacOS without the updater (#7089)

– Error if db does not match safe name, allow numbers in db names (#7069)

– map import/export not saving room characters (#7067)

– crash using cut (#7063)

– Accept JSON int for Client.GUI.version (#7055)

– Wordwrap for MiniConsole and echo (#7039)

– enableTrigger() does not work always on groups (#7024)

– ensure that single clicks select without activating items (#7028)

– map rooms command not matching with optional area name. (#7037)

– Resolve raw telnet Client.GUI error (#7034)

– map export and import environment data (#7030)

– Remove Geyser.ScrollBox:setStyleSheet(…) from LDocs (#6975)

– LDoc comment causing automated ldoc action to fail (#6977)

– make Mudlet binary map saves with Qt6 compatible with Qt5 builds (#7007)

– generic_mapper Window Shown config not updating (#6958)

– improve symbols on map pan buttons (#6982)

– invalid grey QColor generated for grey-scale part of color triggers (#6995)

– update Windows CI build of libzip (#6983)

– Escape quote for MSDP JSON (#6974)

– crash on moving rooms (#6933)

– ensure all TConsole instances have a name (#6927)

– release memory used for statusbar regex on profile close (#6844)

– opening profile automatically or from command line misses details (#6906)

– remove bogus double read of profile’s game save data (#6905)

– Tooltip hints for MXP hints no longer forced to uppercase (#6878)

– Crash & MSP Downloads (#6885)

– newly-created profiles in PTBs not being saveable (#6857)

– data sent before Z_STREAM_END not shown to user (#6827)

– some UI messages that needs html escaping (#6859)

– Cannot delete an MXP entity which is not all lower case (#6854)

– Solve the case when two error messages are present (#6861)

– a wrong function name and a bogus error return value in setScript(…) (#6863)

– wrong description string selected for items with deactivated parents (#6850)

– package export copying files (#6828)

– undo changed ‘cannot write file’ text (#6794)

– Save new profile host info on lost focus (#2919) (#6805)

– MXP version/style for better game compatibility (#6788)

– make delete map button function better (#6789)

– get MSYS2/Mingw-w64 builds compiling (#6760)

– crash on custom exit line style change (#6754)

– ensure map loading occurs at correct point in profile initialiation (#6731)

– false bold look by removing transparency when copying as image (#6716)

– try and solve crashing when saving profile asynchronously (#6720)

– don’t specify DejaVu fonts (#6717)

– remove unwanted leading spaces in a couple of multi-line texts (#6721)

– instability when auto-loading multiple profiles (#6712)

– allow search highlighting to be undone (#6719)

– do not use the profile name, url or port in game save files (#6709)

– needed/unneeded context for lambdas (#6704)

– ability to use your own ctrl-F keybinds (#6694)

– profile tabs bolded by activity staying bold after switching to them (#6690)

– PCRE not getting bundled on macOS properly (#6693)

– buttons in menus not working (development) (#6685)

– F6 keybinding (#6670)