github Mudlet/Mudlet Mudlet-5.0.0-ptb-2026-09-25-d1a579b
Public Test Build

pre-release4 hours ago

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

Full changelog since last release (Mudlet-5.0.1)
Added:

- 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

Improved:

- 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

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

- 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

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

- 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 1c935e8 to 672b86c #10851

- 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 9a91551 to 64960cd #10614

- 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 22e1073 to 1c935e8 #10377

- 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 033a39c to 22e1073 #10235

- 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 62ca709 to 9a91551 #10141

- Bump 3rdparty/sentry-native from 724479b to 033a39c #10140

- 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

Other:

- Remove concurrency limit from Check lua_error strands workflow

Don't miss a new Mudlet release

NewReleases is sending notifications on new releases.