AI is all the hype these days, so we asked what AI thought of Mudlet’s logo… apparently it is a statue of a giraffe in front of a waterfall. That’s not relevant to today’s release, but we thought you’d be interested in knowing this! Features in this update include a dark theme toggle, addition of MUME, Discord button to open the game’s server, and additional text wait time is now adjustable!

Dark theme toggle

edru2 added a dark theme to Mudlet! You can how select it in settings:

vadi2 followed the option up with a feature to follow your system setting and to also update your editor theme.


Middle Earth makes its way into Mudlet, welcome!

Multi-Users in Middle-earth (MUME) is a highly competitive world PvP DikuMUD, set in J. R. R. Tolkien’s fictional world of Middle-earth, as described in The Hobbit and The Lord of the Rings, where players may choose to join the epic war between the forces of Sauron and the armies of the Free peoples. In MUME players can explore, role-play, acquire achievements, and complete quests across many challenging locations across Middle-earth such as Lothlórien, the Shire, Bree, Rivendell, Goblin-town, Mirkwood, Dol Guldur, and the Mines of Moria. The game is completely at no cost to play and has been continually enhanced since its inception in the fall of 1991.

Discord button customisation

atari2006tim worked on the Discord button! Games can now tell Mudlet what their Discord invite is, and once they do so – Mudlet will show a button that’ll take the player to straight to the game’s Discord server 😃

Adjustable text wait timer

SlySven has done work on the text wait timer for games that lack Telnet GA or EOR signalling and made it configurable in settings. By default this timer was 0.3s, which you can now lower or increase as needed.

Why do we even need to have it? Well because not all games are telling Mudlet when they are done sending all text. That’s exactly the meaning of GA. Games that do implement GA have no timer at all. Thus the better solution is, of course, to encourage games to implement GA!

Lowering the timer runs the risk that not all text will be received from the game before showing it on screen, which could ‘break’ your triggers for that particular line. Increasing the delay reduces that risk, but then of course the experience is compromised.

Lua, Rainforest tests

Quality is an important area of Mudlet, and alongside the newly created QA team, vadi2 has worked on automating Mudlet to run our Lua tests! Now whenever an improvement is done to our Lua functions, a copy of Mudlet is launched automatically in the cloud and all existing Lua tests are run to ensure nothing breaks. This also gives a safety net to anyone working on Mudlet that should they break something on accident, it’ll get caught. That said, the safety net needs to be expanded to cover all tests – so we’d love for volunteers to help strengthen it.

That’s not all on the quality story, either! vadi2 also worked on setting up visual tests that ensure the Mudlet interface itself – one you see and play with – is tested. Similar to Lua tests, automation launches Mudlet in the cloud and follows a script to click around on buttons and observe that they do what they ought to do. It is relatively intuitive to setup these tests, and we’d also love it if we had more volunteers to help flesh them out:

📢 Vote on best improvement

We announced earlier a trial to pay a bit of money for the top 3 most popular PRs – well it’s kicking in with this release! Head over to the form to vote on your favourite improvement in this update.

Anyone who submits an improvement to Mudlet is eligible for a spot on the poll. That said, this is still an experiment we’re trying out so we might change or scrap it in the future if it doesn’t work out.


Thanks to all coders who made this release happen! atari2600tim, Damian Monogue, Kebap, Manuel Wegmann, Mike Conley, mudlet-machine-account, Nils Schimmelmann, Piotr, Slobodan Terzić, Stephen Lyons, Tim Johnson, Vadim Peretokin, and 噢哎哟喂.

Thanks to all translators dutifully carrying the flags: Alan Sneath (alsneath), ifelse, Kamil Tunkiewicz (zeddicus), Leris, Marco “M0lid3us” Tironi (wiploo), vadi2, and vingi.


There’s a lot of improvements in this Mudlet update besides the top 5 listed above, so dig into the changelog below to find goodies:

🆕 added

  • --mirror option for logging output to console
  • option to show errors view from the toolbar
  • customization of Discord button using invite URL from GMCP or Lua
  • dark theme toggle to preferences
  • events when a speedwalk() is stopped, paused, or finishes (reaches the end)
  • IDManager and named tempTimers/event handlers from script
  • option for secure IRC connections
  • resetDiscordData() function
  • what color formats are acceptable in places it is missing in Geyser ldoc comments
  • clear error console functionality
  • Custom right click menu items for command lines
  • Gmod busted tests
  • Save/Load map as .json from preferences dialog

✨ improved

  • map context item names
  • [CodeFactor] eliminate (some of) our C style casts
  • allow wait for more network packets to be adjusted
  • cleanup room_exits.ui file
  • Clear edit forms for deleted items
  • Create map / Load map dialog will be again present for empty map
  • Create room at right-click position
  • Do not trim whitespaces in tab completion
  • icons not coloured status text for normal exits in exits dialog
  • icons not coloured status text for special exits in exits dialog
  • only enable IRE driver GA bugfix for IRE games (unnnecessary newlines with GA)
  • Properly announce Discord failing on length 1 texts
  • shorten welcome message for new aliases & triggers
  • simplify dlgRoomExits() invocation
  • sync mpackage modules
  • Unregister fonts upon package/module uninstall
  • update bundled NotoColorEmoji font
  • use constants to index into special exit columns in dlgRoomExits

🔨 fixed

  • CodeQL warnings
  • copy2decho() on empty lines
  • copy2decho, copy2html to work for all international text
  • Discord logo dimensions on profiles screen
  • Export Triggers title bar to be more generic
  • Adjust height of command box when cycle through history
  • cleanup: remove some warnings in uses of QKeySequence
  • correct a missing override that showed up during CI
  • disable more controls in preferences when there is no host
  • don’t show jibberish when Adjustable Container title bar is too short + add position as option for setTitle
  • eliminate a load of warnings about missing-field-initializers
  • Lua functions for tempKey and tempAlias work again
  • modules no longer get emptied if reloaded during saveProfile()
  • only provide NAWS information from main console
  • remove spaces in initializer brackets
  • remove stray debug messages
  • repair prevent all controls from being hidden feature
  • settings button will be available again before you connect to a profile
  • try and make connectExitStub(…) work as per the API
  • update default Zombiemud port
  • update PCRE download source to one that still exists


  • add ‘Chancel’ as an allowed codespell – it’s an area in Lusternia
  • Add ‘nd’ as an allowed word
  • add knowledge for debug symbols in builds
  • added label for port in Github Codespaces
  • close out p tag in text label
  • danger checks in JS
  • disable Windows builds in GHA
  • fix Windows changelog generation now that we have quotes
  • fixed autoupdate workflows to trigger checks
  • git ignore 3rdparty boost and cocoapods
  • give a danger-friendly PR title to Crowdin updates
  • Improve ptb changelog generation
  • make sure to fail Windows builds in case the packaging step failed
  • More adjustments to the changelog styling
  • read error log correctly from Windows installer tool
  • remove unrendered emoji characters from changelog script
  • remove unused mUserDefinedName in code
  • update appveyor signing password
  • updated Lua tests documentation
  • Lua tests to run in CI automatically