Mudlet A cross-platform, open source, and super fast MUD client with scripting in Lua

Mudlet is a quality MUD client, designed to take mudding to a new level.

It’s a new breed of a client on the MUD scene – with an intuitive user interface, a specially designed scripting framework, and a very fast text display. Add to that cross-platform capability, an open-source development model, and you have a very likable MUD client.


Latest news

Mudlet 3.4 – various improvements

August 7th, 2017

Change font size in userwindows

itsTheFae added the ability to change the font size in userwindows – and additionally miniconsoles or the main window – with setFontSize():

getFontSize() is also available to retrieve the current font size.

Case-sensitive search

You can now enable the case-sensitive search when searching in the editor thanks to the veteran Mudlet contributor SlySven.

Clicking on a search result will now actually focus on the search result itself now, be it whenever inside a script, a trigger pattern, or – new for 3.4 – the event handler the script is for. Previously, it search would just take you to the right item but not show you where exactly it was.

Additionally, a clear button has been added to unhighlight all search results:

1-50 trigger patterns per trigger

The display has been tweaked slightly and the patterns are numbered from 1-50 instead of 0-49 as you’d normally expect when counting things:

Improved timer and variables layout

SlySven has also improved the look’n’feel of the script editor, organising the timer and variables layouts:

As well as aligning trigger/alias/script/etc’s name to be consistenylu called “Name” and a plain command to send as “Command”:


Fixed a crash with installModule()

If you opened and closed the modules dialog and then called installModule() from a script, Mudlet would crash – this is now fixed thanks to SlySven.

Geyser gauges improved

demonnic brought Geyser’s gauges into alignment with createGauge() , text in set on a gauge will always stay centered now.

Linux AppImage fixed for Debian

We’ve fixed the AppImages to extract correctly on Debian OS.

Ctrl+/ to toggle commenting

You can now use the Ctrl+/ shortcut to toggle commenting in the code editor thanks to the work by gamecreature:

Normal cursor on the profiles window

When you launched Mudlet and didn’t have any profiles enabled to autoconect, the profiles window came up – but the cursor was stuck in the ‘loading’ state. This has been fixed up by vadi2.

Multiple MSDP arrays inside an array fixed

Following a tip-off on the forums, keneanung fixed a case where Mudlet wouldn’t properly multiple MSDP arrays inside another array.

Code quality improvements

Mudlet now uses the C++11 nullptr keyword all throughout the codebase and several Qt conventions are now better followed.

Compiling Mudlet on Windows

vadi2 released a video walkthrough of getting setup with developing Mudlet on Windows. Mudlet is a project made by people like you & me – and it all starts with getting the code, making Mudlet run, making a tweak and seeing what you break!

We encourage you to have a go at messing around with Mudlet – any improvements, big or small, would make this free and open project better :)

New editor

Don’t forget, the previous release introduced a new editor that has 300+ skins, allows for easier indenting, and has multi-cursor selection! If you haven’t updated to a newer Mudlet already, now’s the time to do so.





Thanks to demonnickaekeneanungSlySven, and vadi2 for making this update!

Posted in Uncategorized | No Comments »

Mudlet 3.3.1 – new code editor, new IRC, and utf8 in Lua support!

July 8th, 2017

A new Mudlet 3.3.1 is here! This release brings in a whole new editor for Lua code, a completely revamped IRC window, and utf8 in Lua!

New editor

The edbee code editor made by @gamecreature has been added to Mudlet by @tomcss! This completely replaces the old editor and offers new features like multi-caret editing, line numbers, and shortcuts:

These are the currently available shortcuts – we’ll be working on enabling more:

If you’re familiar with Sublime Text or TextMate, Mudlet now supports all 350+ themes available! edbee’s theming support has also been enabled by @vadi2, go to Profile Preferences – Editor to set them:

Remember that you can also install dark themes for Mudlet itself and also make your own!

Revamped IRC

Thanks to the work of @itsTheFae, the IRC functionality has been completely revamped and is now a lot more powerful:

It is now possible to join multiple channels, set your own default channel, /msg users and more. Check Profile Preferences – Special Settings for options:


The documentation lists out all of the new available /commands. A lot of IRC functions have been added for scripting as well: getIrcNick(), getIrcServer(), getIrcChannels(), getIrcConnectedHost(), setIrcNick(), setIrcServer(), setIrcChannels(), restartIrc().

Statusbar in the main window gone

We’ve removed the statusbar in the main window now that it has served its purpose! The original idea was to guide people towards opening the Connections dialog – that opens up automatically now, and showing descriptions for the mapper’s right-click menu – tooltips are used for those instead.

Infrastructure upgrade

@Kae and @demonnic got their hands dirty and completely upgraded Mudlets infrastructure: the wiki and forums are the latest version, and HTTPS support (green lock) has been enabled everywhere!

Thanks to this, the wiki registration is now openly available and we can spend more time improving Mudlet rather than banning spambots on the forums. Syntax highlighting on forums and wiki has also been aligned with Mudlets own so it is consistent everywhere.

Wiki improvements

@Kebap has been spending a lot of time improving Mudlets wiki recently, doing everything from formatting to documenting new – and old that we’ve missed – functionality. Appreciate all the help!

Multi-language progress

We’ve continued with the vision of making work with many languages and added a Lua utf8 library in 3.3, which allows you to work with non-English text in Lua: Spanish, Russian, Chinese, and so on. See documentation for more.

Windows – coroutines and tempKey

mudlet.supports.coroutines and the new key-related functions (tempKey, permKey) didn’t work as advertised in the last Windows release – this has been fixed.

Modern C++11

The so-called MC++ is used in developing Mudlet – if you haven’t checked up on C++ in the last decade, here are some of the highlights of what is now available: auto, lambdas, and more. C++ is the language that powers many game engines (Cryengine, Unreal Engine), browsers (Google Chrome, Firefox), and a lot of other things you’re using. If you’re curious to get started, try your hand with editing Mudlet!

Map load improvements

The map data is now loaded by default again when the profile is opened, so you don’t have to open the map to get your scripts to work. There’ll also now just be one loading messages should everything go okay.

What happened to 3.3?

You might’ve noticed we skipped from 3.2 to 3.3.1 – 3.3 didn’t work out and we had to cancel it. We’ve learnt our lesson and will ensure it doesn’t happen again in the future – sorry about that :)


Mudlet is made by people like you and me spending their free to make it better for you! Big thanks to demonnic, Fae, Ian Adkins, Kebap, keneanung, Stephen Lyons, Tom Scheper, and Vadim Peretokin for contributing bigtime to this release :)


  • added a Code of Conduct per best open-source practices
  • added getIrcNick(), getIrcServer(), getIrcChannels(), getIrcConnectedHost(), setIrcNick(), setIrcServer(), setIrcChannels(), restartIrc()
  • added indenting shortcut to editor (Ctrl+[, Ctrl+])
  • added languages / area affected by the encoding name in preferences
  • added line numbers to editor
  • added multi-caret selection (try Ctrl+click and Ctrl+Alt+Up / Down, see more)
  • added shortcut to delete a trigger/alias/etc – press ‘Del‘. You can also save with Ctrl+S and save profile with Ctrl+Shift+S
  • added theme switching to new code editor
  • added utf8.* family of functions to work with Unicode
  • fixed ‘reset map colors’ button in settings to work
  • fixed a possible off-by-one error in linewrapping
  • fixed blank command separator not to split everything by letter
  • fixed button being left behind when parent toolbar is deleted.
  • fixed buttons not to render unless they are part of a group
  • fixed change detection for location, orientation, and CSS data in toolbars
  • fixed getMapEvents() to work
  • fixed Geyser typo ‘setreleaseCallback’ causing errors
  • fixed map not loading on profile load anymore
  • fixed mudlet.supports.coroutines, mudlet.keymodifer, mudlet.keys to be present in Windows version
  • fixed multi-line comments in editor
  • fixed some MXP-related code not to run if MXP is disabled in settings
  • fixed userwindow layout to save when profiles are set to auto-save
  • fixed setTextFormat() to work with other windows than “main”
  • improved code editor, replaced with a completely new one: supports themes, multiple carets, and more
  • improved error messages in sendIrc()
  • improved Lua locale to be set to C so scripts can be consistent across computers with different languages
  • improved map load output to be less verbose in case everything is fine
  • improved massively IRC window – now has command history, many new IRC commands (list) higlights on errors, and many new Lua functions
  • improved the rest of source code formatting; all of Mudlet’s C++ code can now be easily formatted with clang-format
  • improved all Mudlet infrastructure – website, forums, and wiki to run on HTTPS
  • removed main window statusbar
  • renamed to so we can tell it apart
  • updated all sourceforge links

Posted in Release | 2 Comments »

Mudlet 3.3 – new code editor, new IRC, and utf8 in Lua support!

July 2nd, 2017

Note: we’ve pulled the 3.3 release as it has a crash issue – have a look at 3.3.1 as it’s got all the fixes!

Posted in Uncategorized | No Comments »

Mudlet 3.2

June 7th, 2017

Finally welcoming summer in the northern hemisphere, Mudlet 3.2.0 is here. Mudlet can display text in many other languages now, coroutines are available, and userwindows (stand-alone miniconsoles) have been massively improved!

Encoding in Mudlet

Veteran Mudlet developer SlySven worked to teach Mudlet to display text in Spanish, Russian, and many other Western languages!

Go to Preferences > Encoding to select the encoding you’d like to use.

This is the first baby step in enabling Mudlet to support internalisation. Choosing the encoding will help Mudlet display the letters right, but triggers will not work with non-English text and nor will some Lua string.* functions like string.len(). We’ll be adding these features incrementally and it will all be ready in Mudlet 4.0.


Lua coroutines are now available in Mudlet, opening up a lot of possibilities for writing your scripts better – check out the demo in the manual. Big thanks to the core Mudlet developer ahmedcharles for enabling this!

Script loss fixed

If you happened to insert an XML-invalid character such as 0x0 in your script, Mudlet wouldn’t be able to load it back in and lose everything that followed it. This has been fixed – credits go to to Buck in Discord for identifying the problem and SlySven for fixing the problem! 0x0 and it’s friends will now get saved and loaded just fine.

First time user experience

First impressions matter – whenever you’re getting your friend on Mudlet or someone is thinking of checking out this underrated thing called MUDs. Mudlets is now much better – on first launch, a welcome screen is now automatically shown:

We’ve also made it so the Connections window automatically opens up if you don’t have any profiles on autoload, and the last used profile is automatically selected.

There’s too much blank space in though, isn’t there? MUDs that get onto Mudlet’s default profiles list are ones that make a significant contribution to the open-source Mudlet project, or those that go the extra mile to add a great gaming experience for their players on Mudlet: mapper support and a UI package.

Userwindow improvements

Would you like to make your miniconsoles separate from the Mudlet window? Move them over to another monitor perhaps? Or make dock them inside Mudlet? You can with openUserWindow(), check it out. This release has improved a lot of things for userwindows – they’ll now remember their position when you open Mudlet, won’t inherit borders from the main window, and will close with the profile. Once you open a userwindow, you can use all the same cecho(), copy(), paste() on it just as with a miniconsole.

Thanks to the modest itsTheFae for his work in making this happen.

Floating toolbars improved

Floating toolbars – those that you can make in the Buttons view and stick buttons in – no longer spazz out when you click on the script editor.



  • added alert() function in case you need to alert the user for something
  • added getServerEncodingsList(), setServerEncoding(), and getServerEncoding() to choose encodings from script
  • added tempKey(), permKey(), and killKey() functions
  • added ability to choose encodings (UTF-8, ISO*, and many others) in preferences
  • added support for coroutines!
  • added support for the telnet BELL code to have Mudlet icon flash/blink for 3s
  • added loadWindowLayout()saveWindowLayout(), and a boolean argument to openUserWindow() for controlling the layout of userwindows
  • added mudletOlderThan()
  • fixed a possible crash if you closed Mudlet profile while it was still playing a sound
  • fixed being able to open multiple ‘About’, ‘Module Manager’, ‘Package Manager’ windows
  • fixed clicking on floating toolbars interrupting the editor when clicked on
  • fixed floating toolbars to close when the profile is closed
  • fixed floating/dockable mapper window to close when you close with its profile
  • fixed map auditing always complaining about a default area missing
  • fixed save profile dialog to ask a proper question
  • fixed userwindows inheriting borders from the main display
  • fixed white-on-yellow search highlighting to be the normal black-on-yellow again
  • fixed a crash if scripts used sysDisconnectionEvent
  • fixed script loss when special characters (like U+000B) were used in scripts
  • fixed lua-zip error when opening Linux AppImage
  • fixed labels placed under the mapper window preventing clicking on the mapper
  • improved AND/OR trigger tooltip to mention that matches go into multimatches[][] instead of matches[]
  • improved borders settings Preferences – you can now set them to negatives
  • improved first-time experience: connection dialog opens automatically and a welcome message is shown
  • improved last-used profile to be autoselected when you open the connection dialog
  • improved moved map format selection to be in map options
  • improved Mudlet to autoload profiles much quicker
  • improved performance inside code Mudlet by using multi-arg .arg() instead of chained .arg() calls
  • improved userwindows to open in their last position on the screen by default
  • improved connectToServer() to also save the parameters for the next time
  • improved a bit of MCCP-related code with a cleanup


This release was brought to you by Ahmed Charles, Florian Scheel, itsTheFae, kbasten, Mike H, Stephen Lyons, and Vadim Peretokin. Depressed by cancelled projects at work? Interesting in contributing to a project and actually seeing your work get used by people? Hop on board!

Random tip: you can use Unicode art in Mudlet! Try doing cecho(“°º¤ø,¸¸,ø¤º°`°º¤ø,¸,ø¤°º¤ø,¸¸,ø¤º°`°º¤ø,¸”) or cecho(“<green>(╯°□°)<dark_green>╯︵ ┻━┻”). You can find more examples over here.

Posted in Uncategorized | 1 Comment »

Mudlet 3.1.0

May 4th, 2017

Like clockwork, a new Mudlet release is here with a ton of improvements across the board.

Enhancement to multiplaying

A feature that’ll come in quite handy where MUDs allow you to play multiple characters at once – you can now have one profile talk to other profiles in your code. A new function raiseGlobalEvent() allows you to raise events from one profile that will be received in all other open profiles.

Show Lua errors in main display

Mudlet now gained an option to display runtime Lua errors in the main display, previously available in the Errors view only:

This would be an option familiar to MUSHclient users. To enable it, enable “Echo Lua errors to main console” in the “Main display” preferences.

Show script name in error message

If you defined your function that you used elsewhere in a trigger/alias/etc, and it had an error, you’d be met with a rather unintuitive error message like this:

This has been fixed now, and the error message will include the original script where the error comes from:

Much better.

Timestamps in logging

A new option “Add timestamps at the beginning of log lines” allows you to log with timestamps:

Additionally, timestamps will also be copied if you have the timestamps view enabled in your main window and use copy or copy to HTML.

Ctrl+click selection

You can now ctrl+click on a line to select it entirely.

Ctrl+S in the trigger editor

Ctrl+S (Cmd+S on macOS) has now been enabled as a shortcut in the trigger editor – so you don’t have to hit that ‘Save Item’ button every time.

Similarly, Ctrl+Shift+S will now save your entire profile to disk.

Pink keys

Key folders have now gotten their own colour in the trigger editor: pink.

Better mapper defaults

The mapper now has anti-aliasing, better room, and exit sizes by default so new maps look a lot more like what they should:

GMCP on by default

Having been thoroughly tested on many MUDs, GMCP is now enabled by default on new profiles – if your game supports it, Mudlet will enable and make use of it.

raiseWindow() and lowerWindow()

You can now raise a label or a miniconsole above all others with raiseWindow(), or lower it below all others with lowerWindow(). This can come in pretty handy when creating your Mudlet GUIs. Remember that the default Z-order of elements is the order they are created in, with newer labels/miniconsoles coming on top.

getMousePosition() added

getMousePosition() has been added, allowing you to know the mouse position (within Mudlet only) – this’ll help enable make dragging UI elements much easier.

Try it out for yourself on Mudlet 3.1.0.

sysInstall and sysUninstall events added

These are two very useful events for script makers: sysInstall allows you to do post-install actions and sysUninstall allows you to do pre-uninstall actions.

Useful applications of this include showing a help or a welcome menu as soon as your package is installed or removing your UI and resetting the borders back to default for your GUI package.

In addition to this, more fine-grained events are also available: sysInstallPackage, sysInstallModule, sysSyncInstallModule, sysLuaInstallModule, sysUninstallPackage, sysUninstallModule, sysSyncUninstallModule, and sysLuaUninstallModule.

sysSoundFinished event added

You can now tell when a particular sound has finished playing with the sysSoundFinished event. In addition to this, the limit on playing maximum 4 sounds simultaneously has been removed.

Behind the scenes


We’ve been modernising Mudlet heavily. The Linux continuous integration environment has been updated to Ubuntu 14.04 LTS and we’ve introduced automated macOS installer creation – this means anyone contributing to Mudlet can get a macOS Mudlet install for done for them automatically! This makes it much easier to code up a feature, submit it for inclusion to Mudlet, and get test versions of it in return for letting your friends test it.

Communi, the IRC library included with Mudlet, has also been upgraded to the latest 3.5.0 release.

Modern C++11 and Qt

We’ve put a lot of work into modernising Mudlets C++ codebase: the project is now using C++11, Qt 5.6, and clang-format automated code styling. This enables Mudlet to make use of really nice C++11 features like the auto keyword (letting the compiler deduce the type), ranged-based for statements (far more readable than iterators), and lambda functions (using a function inline – especially nice for small Qt slots). All of the code has been upgraded to use auto and range-based foralready, and most of it has been through the automated code styling – so if you’re curious about playing with Mudlets code using modern C++, have a look!

Start of automated testing

We’ve started on automated testing of Mudlet by robots – they’ll help raise the alarms should we break anything by accident. Teaching the robots doesn’t require any programming experience, so if you’re interested in helping us out, join us on Discord.

Pure Github development

We’ve now moved issue tracking to Github and setup a PR-based workflow. In addition to this, mudlet-lua – the Lua counterpart to C++ in Mudlet – has been merged back with the main repository. All of these changes reduce the overhead of developing Mudlet and make it a more pleasant experience.

Detailed changelog

A list of all the things changed in Mudlet 3.1.0 since 3.0.1, sans API changes which are detailed down below.

  • added a new option “Echo Lua errors to main console” to “Main display” preferences, enabling you to see any runtime errors with your script right in the main window
  • enabled MUDLET_VERSION_BUILD environment variable to set to set the build version information
  • fixed a crash if you tried to copy a map to a profile that didn’t have one before
  • fixed a small memory leak that would happen when you edited the regex of a trigger/alias
  • fixed hideWindow() & showWindow() to work with userwindows
  • fixed logs breaking if you changed from HTML to plain text or back while it was on
  • fixed main toolbar buttons getting enabled if you clicked ‘Cancel’ in the connection dialog
  • fixed many ‘chose’ instead of ‘choose’ typos
  • fixed memory leak when copying maps between profiles
  • fixed scrpt packages typo in settings
  • fixed userwindows not being openable again after you’ve closed them with X
  • fixed xml import/export getting map room/exit sizes wrong sometimes
  • function parameters accepting QStrings have been tightened to QString constant references
  • improved a lot of commented-out code and cruft has been cleaned in core code
  • improved default mapper room size is now 5, exits 10
  • improved errors defined in a script that’s called by an alias/trigger/etc will now also report the scipt name
  • improved log button now has an X over it when logging is enabled to disable buttons
  • improved QString handling to be more efficient with introduction of QLatin1String and QStringLiteral

API changelog

  • added closeMudlet() to save profiles and close Mudlet
  • added getCmdLine() to return the text that’s currently in the command line
  • added getMousePosition() to return the current mouse position on the main display
  • added getProfileName() to return the profile’s name
  • added raiseGlobalEvent() to raise an event in all other open profiles
  • added raiseWindow() and lowerWindow() functions to raise a label/miniconsole above all others or lower below all others
  • added saveProfile() to save the profile
  • added setHexFgColor(), setHexBgColor() which allows hexadecimal equivalents of the RGB setFgColor() and setBgColor()
  • added setLabelReleaseCallback() which allows you to run a function when the mouse was pressed and then released on a label
  • added sysInstall and sysUninstall events for when packages or modules are installed or uninstalled. In addition to this, more fine-grained events are also available: sysInstallPackage, sysInstallModule, sysSyncInstallModule, sysLuaInstallModule, sysUninstallPackage, sysUninstallModule, sysSyncUninstallModule, and sysLuaUninstallModule
  • added sysSoundFinished which is raised whenever a sound stops playing
  • fixed [c|d|d]echoLink() echoing to a specific window losing the format argument
  • fixed crash using centerview() while not map is open
  • fixed hideWindow() to close userwindows
  • fixed showColors() text luminosity being incorrect in certain cases.
  • fixed sysDisconnectionEvent from getting raised twice in certain cases
  • Geyser flyout labels have been improved and are now nestable
  • Geyser.Label:setReleaseCallback() has been added
  • improved db:create() to be more resilient – now re-opens the db connection if needed
  • improved echo(), feedTriggers(), startLogging(), setLabelClickCallback(), setLabelOnEnter(), setLabelOnLeave(), deselect(), resetFormat() to explain what the bad argument is and what it should be, instead of giving an “wrong argument type” error message or none at all
  • improved echo(), setLabelClickCallback(), setLabelOnEnter(), setLabelOnLeave(), deselect(), resetFormat(), to return true on success or nil+error otherwise (error message just if one is available)
  • improved permGroup() to allow creating a folder within a folder
  • As part of the on-going process toward Mudlet 4.0 becoming more International and supporting languages other than English: Lua commands that accept user supplied text as arguments are gradually being reworked to gain the ability to process UTF-8 text. This and related steps are only at a preliminary stage at present but form a major component of the mile-stones on the way to the next major Mudlet release version.
  • improved startLogging() to return the log filename and the logging status


Big thanks to Ahmed Charles, Florian Scheel, Ian Adkins, Jor’Mox, Kae, Nyyrazzilyss, Pavol Gono, Stephen Lyons, and Vadim Peretokin who collectively put in 980 commits to Mudlet’s foundations. Shoutout to all the helpers in our Discord channels and and everyone who’s helped improve our wiki!

Posted in Uncategorized | Comments Off on Mudlet 3.1.0

« Previous Entries