#### Brief overview of PR changes/additions - `Geyser.Container:delete()` now defers the layout of the container it is emptying for the length of its child loop, so tearing down an `HBox`/`VBox` no longer lays the box out once per child. - The deferral is restored even if a child's delete raises, so a container that survives a failed cascade still lays itself out. - Seven busted specs, counting layout passes rather than timing them. #### Motivation for adding to Mudlet `HBox:remove`/`VBox:remove` lay the box out on every removal (#9680, right on its own) and `Container:delete()` removes children one at a time, so a cascading delete re-laid-out the whole box once per child; Mudlet is single-threaded, so a UI package unloading or rebuilding a large layout froze the main thread for seconds. Every one of those passes was laying out windows the same loop went on to destroy. Building a box is unaffected and unchanged: `HBox:add` has always organized per add, and the documented `begin_update`/`end_update` idiom already makes a bulk build linear. #### Other info (issues closed, discussion etc) Closes #9756. One RelWithDebInfo build, Lua swapped between runs, `organize` = layout passes: | case | before | after | | --- | --- | --- | | hbox100 | 0.2228 s, 100 passes | 0.0009 s, 0 | | hbox200 | 0.9851 s, 200 | 0.0017 s, 0 | | hbox400 | 4.1680 s, 400 | 0.0076 s, 0 | | vbox200 | 0.9978 s, 200 | 0.0018 s, 0 | | plain Container 200 (control) | 0.0035 s, 0 | 0.0017 s, 0 | Busted suite: 2507 successes / 0 failures / 0 errors / 41 pending. **Test case:** run `local box = Geyser.HBox:new({name = "b", x = 0, y = 0, width = 600, height = 400}) for i = 1, 400 do Geyser.Label:new({name = "l" .. i}, box) end box:delete()` - the delete is instant instead of a multi-second freeze. Assisted-by: Claude:claude-opus-5 |
||
|---|---|---|
| .claude/commands | ||
| .devcontainer | ||
| .github | ||
| .signpath | ||
| .vscode | ||
| 3rdparty | ||
| CI | ||
| cmake | ||
| docker | ||
| docs | ||
| src | ||
| templates | ||
| test | ||
| translations | ||
| .clang-format | ||
| .clang-tidy | ||
| .crowdin.yml | ||
| .cursorrules | ||
| .DirIcon | ||
| .git-blame-ignore-revs | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| .imgbotconfig | ||
| AGENTS.md | ||
| asan-suppressions.txt | ||
| CLAUDE.md | ||
| CMakeLists.txt | ||
| COMMITMENT | ||
| COMPILE | ||
| COPYING | ||
| CPPLINT.cfg | ||
| dangerfile.js | ||
| icon_1024x1204.png | ||
| icon_dev_1024x1204.png | ||
| icon_ptb_1024x1204.png | ||
| mudlet.desktop | ||
| mudlet.png | ||
| mudlet.svg | ||
| README.md | ||
| SECURITY.md | ||
| UI-design-philosophy.md | ||
Mudlet
Play immersive, multiplayer, pure-text RPGs on Mudlet.
About • Key Features • Download • How To Use • Roadmap • Credits • License
About
Mudlet is a quality MUD client, designed to take mudding to a new level.
It’s a modern breed of a client on the gaming scene – with an intuitive user interface, a specially designed scripting framework, and a very fast text display. That, along with cross-platform capability and an open-source development model result in a very likable game client.
Key Features
- Simple to use
- Very, very fast
- Active development
- Big, thriving community
- Powerful trigger engine
- Rich Lua-based coding functionality (API)
- Excellent script editor
- 2D and 3D mapper with autowalk
- Powerful and simple to use GMCP
- Discord integration
- Completely themable
- Open-source and Free
- Cross platform: runs on Windows, macOS and Linux
- Full compatibility: run same scripts on any of the above
Explain?
Easy to use client
We’re big on usability, and as such, creating an easy to use client and interface is one of the defining goals of the project. This applies to both the power users and usual gamers – everyone will feel at home with Mudlet, without having to waste too much time figuring out how to do something.
Designed for speed
Mudlet is designed and built to be very fast and efficient right from the start. Its scripting engine is designed to scale to large systems without bogging down – and the text display is designed to handle thousands of lines in under a second. All in all, we are very serious about Mudlet being quick – and take all measures to make it so.
Powerful Scripting
Mudlet features a scripting framework using Lua – a small, fast and efficient scripting language. This allows Mudlet to leverage the existing community and large ecosystem of existing packages for Lua without the many drawbacks of creating a Mudlet specific scripting language. Best of all, the Lua API is seamlessly integrated in Mudlet and shared by all aliases, triggers, scripts, keybindings, buttons and other Mudlet components.
Cross-Platform love
We believe in making Mudlet available to people on all major platforms, and we work on keeping cross-platform compatibility right from start. Mudlet is available on Linux (both 32bit and 64bit), Windows, and macOS; you may be able to run it on additional platforms as well.
Download
Download for free from mudlet.org.
How To Use
- Download and double-click on Mudlet to run
- Pick an existing game and hit
Connect - ... or play one of your choosing:
- Click
New - Enter
Server addressandPortof your game (found on the game's website, e.g.mygame.comand2003) - Pick a
Profile name - Hit
Connect
- Click
Compiling
If you'd like to compile Mudlet yourself instead of downloading, you can find instructions to do so here.
Vision
Mudlet's vision is to build the best text gaming experience possible to nurture & grow this niche scene.
Roadmap
See the project's roadmap to get an idea of where it's headed
Contribute
Join in, contributions are welcome! Find out how you can start Contributing.
Credits
Author: Mudlet Makers.
This software wouldnt've been possible without these open source packages:
- Qt
- Lua
- PCRE
- edbee
- DBLSQD
- argparse
- Boost Graph Library
- Busted
- Ccache
- Communi
- Hunspell
- lua-http
- lua-yajl
- lua-zip
- LuaFileSystem
- Luarocks
- LuaSQL
- luautf8
- pugixml
- SQLite
- yajl
Credit to Markdownify for the README inspiration.
Windows code signing provided by SignPath.io, certificate by SignPath Foundation.
License
GPL2+