Changes in this build since the previous PTB (Mudlet-5.0.0-ptb-2026-09-24-f273728)
Improved:
- Fix O(area count) quadratic slowdown creating many areas #10591
Fixed:
- Configure areas dialog no longer preselects the wrong area, mislinks renames, autosaves, or blanks the map #10597
- Unanswered keychain prompt no longer hangs the connect dialog #10555
- Stuck password masking now clears itself after login #10554
Infrastructure:
- Publish the Linux package signing key in the repository too #10958
- Fix intermittent Windows failure of StarterUiProtocolCatchUpTest #11028
- Update text for translation in Crowdin #11034
- Pause, resume and stop buttons for replay playback #10859
- SVG background image support with transforms for labels #8935
- More speech recognition engines, including the one built into macOS #10332
- deb and rpm packages for Ubuntu, Debian and Fedora #10822
- alpha channel support to level colors in map #10584
- Games can turn off Mudlet's starter UI with a GMCP message #10278
- Toolbar buttons and menu items for packages #9983
- Speech-to-text backend for scripts and packages #9982
- A mapperButton setting decides what the built-in map buttons do #10196
- Scripts can tell when Mudlet is not the active application #10145
- Czech (Čeština) translation #10198
- Map room symbol font settings to setConfig/getConfig #10166
- Rites of Passage MUD as a default game #10183
- Fix O(area count) quadratic slowdown creating many areas #10591
- Compact input line tip now caps at 3 shows like the split-screen tip #10982
- Faster map building and 2D map rendering on large maps #10581
- Trigger prescan hands out only regex work, and reads its knobs from Mudlet.ini #10717
- Spell check reads its dictionary as soon as it is turned on #10456
- Scan each read once for the MXP mode switch escape #10548
- Skip wrap analysis for lines too short to reach the wrap column #10508
- Move each line out of the accumulator and settle the decoder per encoding #10549
- Append received text to the buffer a run at a time #10507
- Profiles with thousands of highlight triggers no longer stall #10372
- Use 16 bytes instead of 44 for every character in the scrollback buffer #10506
- Stop building unused translated exit names during map audit #10583
- Scripts are told when mute and other settings change #10596
- Substring triggers skip lines they cannot match #10347
- Line colors are copied only when a trigger changes them #10352
- Profiles with many packages load faster #10329
- Color triggers check single-colored lines faster #10346
- Label the trigger editor's advanced options toggle #10366
- [ImgBot] Optimize images #10318
- Less bookkeeping per line of game text #10295
- Mudlet handles incoming game text faster #10293
- Color sequences reach the parser without allocating #10299
- parse SGR colour sequences without allocating #10267
- Trigger capture groups reach scripts faster #10297
- Faster trigger dispatch on every incoming line #10296
- Triggers match faster on every line #10294
- substring triggers match faster by preparing each pattern's search once #10304
- Every new profile gets the starter interface, with chat capture #10316
- include what we use in profile objects and persistence (3 of 3) #10283
- include what we use in profile objects and persistence (2 of 3) #10282
- include what we use in profile objects and persistence (1 of 3) #10281
- Redesigned settings dialog with search and instant apply #10237
- the starter UI appears at once on a game that already sent data #10266
- Fed2 logo image #10273
- New Crowdin updates #10233
- filters, pause and clear for the debug window #9688
- Fast game output no longer redraws the screen for every message #10195
- Faster still 2D map rendering when zoomed out on very large maps #10200
- Much faster 2D map rendering on very large maps #10175
- Pathfinding no longer slows down as your map grows #10174
- New Crowdin updates #9721
- Game text and color triggers are faster #10171
- shrink mpackage icons #10080
- game text is faster by not rescanning the buffer for links that were never created #10110
- db:create says how to fix a list-form sheet it refuses #10061
- Configure areas dialog no longer preselects the wrong area, mislinks renames, autosaves, or blanks the map #10597
- Unanswered keychain prompt no longer hangs the connect dialog #10555
- Stuck password masking now clears itself after login #10554
- User windows no longer crash when resized or moved after their profile closes #11025
- Say so when a key binding uses a key Mudlet has already taken #10814
- 2D mapper no longer aborts on a room at the coordinate limit #10995
- Crash when a command line is destroyed while a focus retry is pending #10486
- Speech no longer kills a macOS build that was started from a terminal #11022
- Alias, timer, script and key editor icons also coalesce Lua toggles into one tree walk #10817
- unreadable theme error, cut-off package name and artwork that breaks in silence #10939
- say when a package installs but not everything in it works #10915
- Empty personal dictionaries load with newer spell checkers #10477
- Copying a triple-clicked line no longer cuts it short #10836
- A timer set to zero seconds no longer uses 100% CPU #10835
- System messages no longer paint an opaque black background #10592
- Show the full Lucide icon license in the About dialog #10961
- createMapper() works again after the map window is closed #10886
- Triggers set to match all no longer crawl on very long lines #10892
- Show main toolbar setting now reaches windows that are already detached #10940
- extra slash in the file path saveProfile() reports back #10938
- --mirror now copies the game's text as well as the client's #10916
- saved passwords are no longer readable by other accounts on Linux and macOS #10914
- show --version and --help without needing a display #10913
- connection dialog opens with one of your games picked #10912
- Dragging a tab out of the window now takes the same effort for every tab #10902
- the interface tour keeps answering the keyboard after you click Next #10901
- IRC kicks now say why, and being kicked yourself is still readable #10900
- two containers on opposite window edges no longer leave the console without room for text #10898
- Color codes survive a game that pauses right after the escape character #10894
- creating a window element in a window that does not exist no longer drops it on the main console #10893
- MSDP group and party lists from games now reach scripts #10891
- Mudlet no longer crashes when a package removes itself as it installs #10890
- Script editor autocompletion offers clean function names again #10899
- Linux .deb and .rpm packages no longer install developer-only files #10937
- northwest stub controlling north's locked-door choice #10889
- double space in openUserWindow's bad-argument-#1 error message #10888
- broken UI-design-philosophy.md link in docs/CONTRIBUTING.md #10887
- an attached container's border follows its own edge drag #10594
- Speech errors no longer trap a script in its own handler #10790
- a negative wrap indent no longer crashes Mudlet #10392
- Crash cancelling the map label dialog after the map was cleared #10541
- Move to position takes a room's custom exit lines with it #10519
- Spread and Shrink no longer skew a room's custom exit lines #10518
- A map label dragged out upwards or to the right lands where it was drawn #10515
- Creating a new map no longer flips the mapper into viewing mode #10511
- Clicking a room while editing now ends a hands-free middle-button pan #10502
- replays from games with compression failing to load or playing slowly #10843
- Crash draining a large compressed read on Windows #10425
- Crash restyling Mudlet after a package download dialog was replaced #10435
- Text is no longer garbled when the game pauses mid-character #10815
- The 2D mapper no longer freezes on a map with a room at the coordinate limit #10784
- an attached container's border follows the window as it is dragged #10590
- A stalled password lookup no longer leaves the profiles dialog unusable #10781
- Saved sign-ins no longer get lost or left behind #10726
- Key bindings taken by packages, and profiles with no server address #10791
- a media start position now starts the track there in all cases on Linux #10464
- The trigger editor shows five pattern rows and opens on the first #10813
- Game text can no longer make Mudlet send IRC commands of its choosing #10801
- expandAlias() no longer wipes the captures of the script that called it #10799
- Console scroll bar is visible again on Windows #10574
- ttsSpeechQueued reports a position the rest of the queue API accepts #10805
- A media request Mudlet cannot play is refused instead of half-played #10811
- feedTelnet() and feedTriggers() errors arrive on one line #10807
- appendScript() says the script is missing instead of blaming your code #10804
- Crash when an IRC server sends a stray message-of-the-day line #10800
- Large stopwatch adjustments no longer flip to a negative time #10793
- Timers keep running after the emergency stop is switched off #10792
- A profile font the system resolves, like Helvetica, is used again #10787
- Mapper context menu items no longer pile up on the map widget #10540
- Trigger editor icons no longer lag after enableTrigger()/disableTrigger() #10605
- Words added to your dictionary are still there after a restart #10809
- Key bindings inside a group made by permGroup() now work #10802
- An older Mudlet still finds the saved password of a long profile name #10788
- Dismissing the settings no longer turns MMCP auto-accept calls off #10785
- Label click callbacks work again with links, and no stray Qt menu #10783
- Miniconsoles and user windows are the size they were created at #10782
- Report a profile.ini that cannot be parsed again #10786
- replace() no longer crashes Mudlet when the selection runs backwards #10389
- Adjustable containers connected to a border follow the window again #10349
- correct encoding table defects #10520
- attaching a container to a window edge no longer leaves the console without room for text #10602
- Saved sign-ins work on unencrypted games, and games learn if sign-ins are kept #10586
- Editing a room's exits redraws the map and marks it unsaved #10610
- Crash when Mudlet exits shortly after starting up #10461
- path to AI-ASSISTANTS.md #10607
- Room exits dialog no longer leaks its two column delegates #10582
- Crash after deleting the special exit being edited in the room exits dialog #10447
- Crash opening the editor when the profile's theme is missing #10417
- A map label you pick up follows the mouse again #10492
- Text no longer wraps to the wrong width after resizing or switching profiles #10490
- IRC kicks are shown, server text cannot inject markup, and scripts get the text as sent #10465
- Crash reporting no longer starts up during test runs #10462
- Placeholder text below WCAG AA in dark mode on older Qt #10238
- MSP's Off request now stops the sound it is playing #10481
- The starter interface no longer turns MSDP back on at every profile open #10500
- moving a window over the main output no longer loses text #10336
- Crash closing Mudlet while a profile is still loading #10430
- Crash from an alias that keeps expanding into itself #10424
- Match-all triggers no longer hold onto memory from their biggest line #10345
- Crash when using a scroll box or text box after its window was deleted #10364
- game text no longer vanishes behind a window moved over it #10343
- the mouse cursor stops being a hand after leaving a link #10275
- copy2decho no longer copies the wrong line's text #10274
- script editor reopens where it was left, not centred #10317
- Update window no longer offers a version that is out of date #10322
- re-land the package uninstall and download fixes lost by a stacked merge #10323
- A large burst of game text no longer stops part-way #10290
- MSDP tables keep their shape and unfinished variables stop half-arriving #10199
- an element removed from an adjustable container is no longer deleted with it #10279
- a hidden link no longer overwrites text after lines are removed #10179
- Copy from the trigger pattern right-click menu works again #10334
- Broken CFGUI Source URL #10333
- Auto-login works again on games that offer no GMCP sign-in method #10328
- macOS Lua tests job crashes because deferred package installs re-enter themselves #10321
- Typing on the connection window picks a game again, instead of renaming a profile #10310
- Code formatter no longer fails on Windows #10312
- Profile tab bar clipping and theme switching glitches #10292
- stray 'm' characters in game text on games using reserved ANSI parameter bytes #10288
- MSDP scripts that subscribe on connect work again #10277
- an install that fails now says why instead of failing silently #10005
- A frame emptied by the game no longer keeps a selection over the deleted text #10262
- Selecting a capture group no longer breaks the next selection #10301
- Re-applying a room or exit lock no longer marks the map as changed #10197
- Undefined behavior on profile load, from a flag read before it exists #10253
- The Map button no longer builds a second mapper over a scripted one #10193
- an embedded mapper keeps working after another map view closes #10191
- a pasted link no longer runs a different link's command #10178
- Missing colon on toolbar visibility label #10239
- Missing fonts fall back to the default instead of a random one #10134
- Writing to a console emptied by deleteLine() no longer crashes #10225
- undefined behaviour when the script editor's undo stack is destroyed #10232
- undefined behaviour on every profile load, from resetting the telnet session too early #10229
- trigger pattern highlighter read an uninitialised flag on every pattern row #10228
- undefined behaviour when creating or deleting any trigger, alias, timer, key, script or button #10227
- Lua UI functions no longer crash when a profile has no window #10186
- only the Next button advances the interface tour #10190
- Mudlet Tutorial's give command, hints and intro panels #10163
- MSDP values containing control codes no longer go missing #10143
- Console output no longer slows down as the window gets bigger #10173
- Long profile and character names no longer share one saved password #10147
- Dragging inside the input line no longer scrolls its text out of place #10167
- a skipped _unique no longer freezes the sheet's other constraints #10170
- Reject malformed version numbers instead of misreading them #10151
- phpTable entries holding false can now be updated and deleted #10150
- Turning off NEW-ENVIRON mid-session now stops sending data to the game #10148
- Keep the loaded map when a download is canceled or returns no map #10146
- Databases are still created when a unique constraint names a column that isn't there #10144
- Switching map areas no longer leaves rooms selected off-screen #10029
- Tab detach threshold silently stayed at 50px instead of the intended 80px #10127
- Turning a container's auto save back on saves its layout again #10138
- Variables named with quotes or spaces can now be edited #10131
- Remove two always-true size checks in MXP frame layout #10126
- Rename a shadowed loop variable in the trigger editor's script view #10125
- hidden links still reveal once older text has scrolled away #10119
- getNetworkLatency() no longer reports a busy client as network lag #10108
- Discord button works again in a detached window #10101
- Renaming a variable no longer loses it or runs its key as Lua #10114
- match-all triggers and aliases no longer lose captures after an accented character #10113
- Detached windows follow the toolbar icon size setting #10105
- Label updates got slower as their text grew #10090
- Labels and gauges no longer lose their background color #10081
- Clicking a styled web link no longer opens a mangled address #9974
- Clearer errors when using a database after closing it #10091
- Alt+W and Alt+O doing nothing in a detached profile window #10035
- Undoing the game's word wrapping no longer merges exits, objects or tells #10027
- Publish the Linux package signing key in the repository too #10958
- Fix intermittent Windows failure of StarterUiProtocolCatchUpTest #11028
- Update text for translation in Crowdin #11034
- Windows CI build now fails when compilation fails #11026
- Regression tests for past command line fixes #10999
- Regression tests for past media fixes #11013
- Regression tests for past trigger matching and tree fixes #11011
- Regression tests for past 2D map fixes #11010
- Regression tests for past mapper fixes #11009
- Regression tests for past startup and updater fixes #11008
- Regression tests for past settings dialog fixes #11007
- Regression tests for past connection dialog fixes #11006
- Regression tests for past main window fixes #11005
- Regression tests for past package and XML fixes #11004
- Regression tests for past text buffer fixes #11003
- Regression tests for past script editor fixes #11002
- Regression tests for past text display fixes #11001
- Regression tests for past telnet fixes #11000
- Regression tests for past console and window fixes #10998
- Regression tests for past Lua API fixes #10997
- Regression tests for past profile (Host) fixes #10996
- level 19 ccache compression #10977
- Stop fetching everything in github workflows #10936
- Stop CommandLineKeyHandlingTest flaking under load #11018
- Stop the trigger cost spec failing on Windows when the clock can't see the line #10993
- Stop the match-all cost spec failing on unrelated PRs #10979
- Stop committing the libmudlet Qt Widgets audit report #10866
- build sentry once and jingle keys at the cache. #10306
- Linux package images need the Qt SVG module #10953
- Toolbars build their own action menus #10575
- Core files stop reaching into console widgets #10571
- Host reaches into no console member #10570
- Host stops reaching into the command line #10569
- The console owns its map dock #10568
- The Lua interpreter stops opening file dialogs itself #10566
- The Variables view's rows are the editor's own bookkeeping #10565
- The variable move guard takes the variable, not the tree row #10564
- The profile repaints itself when the appearance changes #10562
- The map window's state is answered by the console that owns it #10560
- Text selection and highlighting live on the profile, not the console widget #10558
- Stop the keychain test crashing when the credential store answers late #10858
- Build CodeQL and the Linux clang leg with GCC 14 #10850
- Stop saving caches in PRs #10302
- Add mapper tests for the Configure areas dialog #10546
- Add mapper tests for Spread, Shrink, Move to position and Move to area #10517
- Add mapper tests for the selection list, Control-click and area-exit stubs #10516
- Add tests for the mapper's map labels under the mouse #10514
- Add tests for the mapper's wheel zoom, menu-driven Move and double-click speed walk #10513
- Add tests for the mapper's room context menu #10510
- Add tests for the mapper's custom exit lines #10503
- Add tests for the mapper's middle-button pan #10501
- Update text for translation in Crowdin #10837
- Bump signpath/github-action-submit-signing-request from 2 to 3 #10853
- Bump github/codeql-action from 4.37.9 to 4.38.0 #10852
- Bump 3rdparty/sentry-native from - The Linux package repository can be browsed in a web browser #10849
- Tests build again after the host manager accessor moved #10844
- Add tests for sending and receiving in Mudlet's own code pages #10466
- Give the host manager an accessor that does not need the main window #10387
- Move three core helpers off the main window #10469
- Tests build again after the path helpers moved #10834
- Fix the development build after the path helpers moved #10825
- Let the pipeline benchmark take a line count and a read size #10509
- Lua functions that drive the console widget move to the UI file #10556
- Triggers, timers and actions reach the console through Host #10512
- Action toolbars and MXP frame consoles are built by the main console #10475
- Move the profile data helpers into MudletPaths #10376
- Give getMudletPath() a widget-free home in MudletPaths #10365
- Check for 3rdparty updates every 6 hours #10821
- Windows PTBs build again #10819
- Tests no longer leave key files in your home directory #10810
- Add tests for the mapper's control panel, menu and save warning #10522
- Run CodeQL daily instead of on every merge #10820
- Add specs for how a console wraps its lines #10487
- Host tells its dialogs about changes through signals #10480
- Host.h no longer depends on the trigger editor dialog #10471
- Lua API reads the main console through Host and its model #10497
- Core files print through Host instead of the console widget #10493
- Debug messages reach the Central Debug Console through a sink #10494
- Document the mold linker option for local builds #10380
- Benchmark the console's cached-screen repaint path #10353
- Fix wiki links broken by the Compiling Mudlet rewrite #10624
- Host no longer builds its user-window and mapper widgets #10474
- Add tests for the notepad #10489
- Bump 3rdparty/edbee-lib from - Silence GCC 16 -Wsfinae-incomplete false positives from AUTOMOC #10612
- Update autocompletion data in Mudlet #10356
- Update text for translation in Crowdin #10613
- stop the NAWS width test failing pull requests that did not touch it #10604
- Speed up Claude Code on the web session startup #10588
- Warn when the wiki manual documents a function twice #10354
- Bump github/codeql-action from 4.37.8 to 4.37.9 #10378
- Cancel superseded CodeQL runs #10573
- Add tests for the mapper's mouse handling #10491
- Add specs for the MXP tags a game styles and links its output with #10482
- Fix the intermittent main window width spec #10444
- Add specs for the windows MXP asks for with #10479
- Add specs for replay playback and named stopwatches #10473
- Add command line tests for multi-line sends, passwords and Tab #10470
- Add settings round trip tests for the preferences dialog #10440
- Add tests for the room exits and room properties dialogs #10434
- Add specs for media playback and the media protocol #10407
- Add specs for telnet negotiation and the protocols on top of it #10406
- Add tests for the script editor's dialogs and tree #10405
- Add tests for the console's search bar #10488
- Configure CI builds from CMakePresets.json #10363
- Speed up CI by having the Intel macOS job build only the binary #10552
- Add tests for the package exporter dialog #10443
- Add specs for selections that do not fit their line #10439
- Add specs for the room and area database #10432
- Add specs for package and module import, export and install #10413
- Add tests for caret navigation, command line keys and the accessible text interface #10412
- Add specs for the mapper, map files and map user data #10398
- Give the map-audit flag a home that does not need the main window #10388
- Run the Lua tests headlessly on a Wayland desktop #10386
- Add specs for trigger kinds, alias patterns and regex captures #10409
- Give the Discord integration a home that does not need the main window #10375
- Add specs for user windows, console colours and overflow events #10420
- Add specs for text decoding and ANSI handling #10400
- Add specs for the Lua API's argument checking #10399
- Add specs for the Lua string, table, date and debug modules #10429
- Fill in pending Lua tests and fix the local test runner #10361
- Make the libmudlet progress audit fail loudly instead of miscounting #10374
- Bump 3rdparty/sentry-native from - Clear out the CodeQL code scanning alerts #10357
- Add specs for the JSON map format #10370
- Add specs for the command line widget #10371
- remove the always-true Qt version check around serialization #10285
- home the debug switch and timestamp formats in core classes #10284
- Stop the editor position test flaking on macOS CI #10358
- Fix a settings test that broke on an optimized icon #10351
- index scroll boxes, command lines and text boxes in the core window registry #10280
- index sub-consoles and user-window docks in the core window registry #10270
- look labels up in a core window registry, not the view's widget map #10264
- Update text for translation in Crowdin #10348
- Fix a settings test that flaked on macOS #10338
- Sign the Qt and other bundled libraries on Windows #10313
- split the Qt Widgets helpers out of utils.h #10263
- Add runnable QA skills for test coverage, fuzzing and performance #10251
- Add release build presets for all three platforms #10289
- stop CodeQL and a shared key evicting the build caches #10265
- Stop FramePacingTest failing CI at random #10261
- Spelling functions no longer crash without a main window #10258
- Slim down the AI assistant instructions #10252
- Route MXP frame redirects through a write-only print sink #10259
- merge release-5.0 back into development #10256
- skip the bundled-font tests when built without fonts #10254
- Bump github/codeql-action from 4.37.7 to 4.37.8 #10236
- Stop two functional tests failing CI runs at random #10247
- fuzzers for the telnet parser and the console buffer API #10221
- Update autocompletion data in Mudlet #10248
- Bump 3rdparty/sentry-native from - Update text for translation in Crowdin #10226
- Stop the CodeQL scan running out of memory #10218
- Color changes reach the buffer without a window #10185
- Stop the glibc resolver leak flaking the CI leak job #10202
- Save the profile's spell dictionary without needing a window #10154
- Test pathfinding against a full-sized game map #10182
- Match color triggers against the profile's colors without a window #10152
- Run Lua specs without rebuilding the worktree #10149
- split the OSC 8 hyperlink managers into model state and view repaint #10130
- Cover phpTable with specs #10135
- Cover the update checker's wiring with tests #10133
- move logging into the core console model so it works without a window #10132
- Catch memory leaks from Lua argument errors in CI #10124
- Fix null checks CodeQL flagged as missing in functional tests #10123
- Bump github/codeql-action from 4.37.6 to 4.37.7 #10142
- Bump 3rdparty/edbee-lib from - Bump 3rdparty/sentry-native from - Stop qtkeychain build from dirtying its submodule on macOS #10129
- Let agents open pull requests with the open-pr skill #10128
- Cover the map progress dialog and mapper indicators with tests #10097
- Test the tab indicator and hyperlink repaint wires #10093
- Cover three untested corners of the trigger engine #10096
- Test that a finished video gives its label back #10094
- keep asking for window activation so the key sequence tests stop flaking #10117
- Update text for translation in Crowdin #10120
- Update autocompletion data in Mudlet #10121
- Build Linux and macOS releases with newer compilers #10092
- extract the main console's data model out of the widget #9603
- Make the map download progress test immune to CI stalls #10104
- Remove the Windows CI unzip workaround now that libarchive is fixed #10098
- A new mpkg release no longer breaks unrelated tests #10107
- Free up CI cache space so builds stop starting from scratch #10102
- Run the C++ tests in parallel in CI #10099
- Upload Qt symbols to Sentry on Linux and macOS #10040
- Remove concurrency limit from Check lua_error strands workflow
Full changelog since last release (Mudlet-5.0.1)
Added:
Improved:
Fixed:
Infrastructure:
1c935e8 to 672b86c #10851
9a91551 to 64960cd #10614
22e1073 to 1c935e8 #10377
033a39c to 22e1073 #10235
62ca709 to 9a91551 #10141
724479b to 033a39c #10140
Other: