QMud
A modern, cross-platform, Qt based, drop-in replacement for MUSHClient, MUD (Multi-User Dungeon) client.
Install / Use
/learn @Nodens-/QMudREADME
QMud
QMud is a Qt 6 port and continuation of the original MUSHclient (by Nick Gammon), designed and written by Panagiotis Kalogiratos (Nodens) of CthulhuMUD. It is client program for connecting to MUD (Multi-User Dungeon) games. It is compatible with existing MUSHclient files and plugins, but it will migrate them to its own format in order to maintain separation. As more features are implemented, things were bound to diverge, especially in data persistence, so, as a conscious choice, QMud diverges from the get-go. The active implementation in this repository is C++20 + Qt 6.10.
Project status
The porting has been completed. Behavior aims for high compatibility with original persistence and Lua workflows while using a modern Qt implementation. There are several improvements and new features implemented already. Please use the issue tracker, with the appropriate template to report issues, request features, etc.
Features
- Cross-platform (Linux, Windows, macOS).
- Unicode, NAWS, Terminal Type, CHARSET, EOR, ECHO, MXP, MSP, MCCP, MMCP, OSC8, xterm256 color, Truecolor.
- Lua scripting.
- Copyover-style in-place reload on Linux/macOS (
File -> Reload QMud). - Split-pane scrollback buffer, persistent scrollback buffer/command history.
- Autosave, autobackup, log rotation, log compression.
- Autoupdates.
Contact / Support
For support, testing feedback, and development discussion, join:
Do NOT use the issue tracker for general support requests.
Contributions
- Bug fix PRs are welcome.
- Feature PRs have to be discussed first either on Issue tracker or Discord.
- You can also contribute with documentation or translations (once work on both is started; but you can apply to help before that)
- You can test plugins of various MUDs and see if they're working right or not. Open detailed issues if something's not working including a source for the plugin in question.
- You can also contribute with funding as funds are needed for code signing certificate, Apple registration etc. in order to bring QMud to the Apple Store/avoid issues with Windows SmartScreen/WDAC.
Supported platforms
- Linux (primary development platform)
- Windows (source/build support and packaging workflow)
- macOS (source/build support and packaging workflow)
Migration from MUSHclient data
QMud can migrate an existing MUSHclient data tree on first run. Migration is
copy-based, so source files are preserved and moved under a migrated marker
path after successful import to avoid reprocessing.
What is migrated:
- World list/database entries (including plugin list metadata)
- World files under the worlds tree (
.MCLand related world XML data) - Preference/state data required for normal startup
Path handling during migration normalizes legacy Windows-style paths (for
example C:\...) so migrated worlds resolve correctly on the active platform.
How to Migrate
- Install/Run QMud (depending on platform) to create fresh QMud home directory.
- Copy your MUSHclient's lua contents into QMud/lua directory without overwritting anything. (IF you have placed any custom lua modules there)
- Copy your MUSHclient scripts directory into QMud/ directory without overwritting anything. (IF you have placed any custom scripts there)
- Copy your MUSHclient world directory into QMud/ without overwriting anything.
- Delete QMud.conf and QMud.sqlite from QMud/ directory.
- Copy your mushclient.ini and mushclient_prefs.sqlite to QMud/ directory.
- Run QMud.
- Change Terminal Type (TTYPE) in world preferences to "QMud" unless you have a reason to keep it mushclient (e.g. Mud does some special handling on TTYPE).
- (Optional) Do a manual check on your .qdl world files with a text editor to make sure paths have migrated normally.
QMud saves paths ALWAYS as RELATIVE to the QMUD_HOME directory and with FORWARD slashes even on Windows. So all paths
in the world file should look like:
<include name="./worlds/plugins/CthulhuMUD/CthulhuMUD_Mapper.xml" plugin="y" />
Always keep a copy of your original MUSHclient directory. Extensive testing has been done but better safe than sorry.
Data directory resolution (QMUD_HOME)
QMud resolves its startup/data directory in this order:
QMUD_HOMEenvironment variable (all platforms).- If env var is missing,
QMUD_HOMEfrom config file fallback:- Linux:
~/.config/QMud/config, then/etc/QMud/config - macOS:
~/Library/Application Support/QMud/config, then/Library/Application Support/QMud/config - Windows:
%LOCALAPPDATA%/QMud/config
- Linux:
When multi-instance mode is enabled (QMUD_ALLOW_MULTI_INSTANCE env var or --multi-instance/
--allow-multi-instance), config fallback is disabled and QMUD_HOME must be set explicitly in the process environment
in order to avoid second instances writing to the same datadir.
System config lines support both:
QMUD_HOME=/path/to/direxport QMUD_HOME=/path/to/dir
Quoted values are accepted, and leading ~ is expanded.
The same config fallback files can also define any QMUD_* environment flag, and those values are used when the real
process environment does not override them.
If nothing is configured, defaults are:
- AppImage:
$HOME/QMud - macOS:
~/Library/Application Support/QMud - Windows and non-AppImage Linux: executable directory
Environment flags and CLI switches
Environment flags
Flags below can be provided either as process environment variables or in the OS config fallback files (QMUD_*
entries, used as fallback when not set in the process environment).
QMUD_HOME: Overrides startup/data directory resolution (see section above).QMUD_ALLOW_MULTI_INSTANCE: When set to1,y,yes, ortrue, bypasses single-instance enforcement. (Not safe with same datadir). In this mode,QMUD_HOMEmust be explicitly set in process environment.QMUD_DISABLE_UPDATE: When set to1,y,yes, ortrue, disables the automatic updates functionality (for distro packaging).QMUD_RELOAD_VERBOSE: When set to1,y,yes, ortrue, enables verbose per-world reload diagnostics in logs.
CLI switches
--multi-instance(alias:--allow-multi-instance): Bypass single-instance enforcement for that process. (Not safe with same datadir). In this mode,QMUD_HOMEmust be explicitly set in process environment.--dump-lua-api <output-dir>: Export Lua API inventory to the given directory and exit.
Reload QMud (Copyover-style)
File -> Reload QMud is available on Linux and macOS. It performs a reload keeping worlds connected when possible.
Current behavior/limitations:
- MCCPv1/2 enabled worlds that do not honor IAC DONT COMPRESS/2, on timeout/failure to end compression stream, downgrade to reconnect on reload.
Build requirements
- CMake 3.21+
- C++20 compiler
- Qt 6 modules:
Widgets,Network,Sql,PrintSupport - Optional Qt 6 module:
Multimedia(sound; disabled at runtime if missing) - zlib
- Lua 5.4 when
QMUD_ENABLE_LUA_SCRIPTING=ON(default) - lua-socket
- lua-json
- lua-lpeg
- lua-sec
- patchelf (for AppImage non-docker target)
Docker build images for AppImage/Windows/macOS have everything required for building already staged. The above is for building natively.
Build instructions
Linux (Ninja/Makefiles)
cmake -S . -B cmake-build-release -DCMAKE_BUILD_TYPE=Release
cmake --build cmake-build-release --target QMud -j"$(nproc)"
Linux AppImage package
cmake -S . -B cmake-build-release \
-DCMAKE_BUILD_TYPE=Release \
-DQMUD_ENABLE_APPIMAGE=ON
cmake --build cmake-build-release --target AppImage -j"$(nproc)"
The packaged AppImage is generated under cmake-build-release/appimage/.
Windows (Visual Studio 2022)
cmake -S . -B cmake-build-release -G "Visual Studio 17 2022" -A x64
cmake --build cmake-build-release --config Release --target QMud
macOS (Ninja/Makefiles)
cmake -S . -B cmake-build-release -DCMAKE_BUILD_TYPE=Release
cmake --build cmake-build-release --target QMud -j"$(sysctl -n hw.ncpu)"
Cross/Docker-build AppImage/Windows/macOS on Linux
Build the cross-build images first:
docker build -t qmud-appimage-builder:qt6.10 -f tools/docker/appimage-qt610/Dockerfile tools/docker/appimage-qt610
docker build -t qmud-macos-builder:qt6.10 -f tools/docker/macos-qt610/Dockerfile tools/docker/macos-qt610
docker build -t qmud-windows-builder:qt6.10 -f tools/docker/windows-qt610/Dockerfile tools/docker/windows-qt610
Configure once (Docker targets are Linux-host only):
cmake -S . -B cmake-build-release \
-DCMAKE_BUILD_TYPE=Release \
-DQMUD_ENABLE_APPIMAGE=OFF \
-DQMUD_ENABLE_APPIMAGE_DOCKER=ON \
-DQMUD_ENABLE_MAC_DOCKER=ON \
-DQMUD_ENABLE_WINDOCKER=ON \
-DQMUD_DOCKER_EXECUTABLE=docker
Build cross targets:
cmake --build cmake-build-release --target AppImageDocker
cmake --build cmake-build-release --target MacDocker
cmake --build cmake-build-release --target WinDocker
Artifacts are written to:
- AppImage:
cmake-build-release/appimage-docker-out - macOS:
cmake-build-release/mac-docker-out - Windows:
cmake-build-release/windows-docker-out
Running tests
Configure with tests enabled:
cmake -S . -B cmake-build-release \
-DCMAKE_BUILD_TYPE=Release \
-DQMUD_ENABLE_TESTING=ON \
-DQMUD_ENABLE_GUI_TESTS=ON
Build and run all registered tests:
cmake --build cmake-build-release -j"$(nproc)"
ctest --test-dir cmake-build-release --output-on-failure
Run the default quick suite used for pull requests:
ctest --test-dir cmake-build-release --output-on-failure --label-exclude slow
`
Related Skills
node-connect
344.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
96.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
344.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
