github Mudlet/Mudlet Mudlet-5.0.0-ptb-2026-10-29-2e9605a
Public Test Build

pre-release4 hours ago

Changes in this build since the previous PTB (Mudlet-5.0.0-ptb-2026-10-26-de91689)

Improved:

- Decode floods of game text on a second CPU core #12166

- Less work per trigger fire #12167

- Less time spent timestamping lines during floods of text #12161

- Less work per trigger fire during floods of text #12163

- matching triggers on several threads is off by default, with a setting and statistics to judge it #11841

- faster GMCP processing #12095

- Faster, smaller storage for game text lines #12154

- faster 2D map drawing with room borders on #12139

- Faster processing of game text that no script reacts to #12152

- faster sending of commands on games that use a non-UTF-8 encoding #12130

- Starter UI and generic mapper check for a map without reading every room #12149

- Faster trigger processing with a write barrier in Lua #12170

- Faster profile loading by building the script editor on first open #12143

- Faster text processing with the generic mapper installed #12107

- Paint the console at 30 fps during floods of text #12164

- faster substring trigger search #12159

- Faster wrapping of long lines #12157

- Faster trigger processing for packages with large trigger groups #12155

- Load profiles and packages faster #12153

- Faster map loading on big maps #12151

- Faster speedwalk routing after map changes #12150

- Faster getRooms and getAreaRooms on big maps #12148

- Faster echo of plain and multi-line text #12147

- keep the 3D map scene when scripts store room user data #12135

- faster profile open and reset #12125

- Less CPU spent redrawing the starter UI's health bars #12119

- Faster text processing with the starter UI installed #12116

- blinking text no longer redraws the whole console 30 times a second #12114

- faster text display in narrow windows #12102

- faster 2D map panning on maps with many labels #12088

- faster Chinese, Japanese and Korean text decoding #12086

Fixed:

- The MCP bridge no longer drops replies when its input closes early #12179

- MXP links only open web and email addresses #12111

- Web links in link menus open in the browser #12104

- A link that starts while another is open ends that one #12121

- Script editor shows the right on/off state for items a script toggled while it was closed #12142

- Linux screen readers read the right word when moving by word through the main window #12141

- scrolling to a line lands on that line, even when it opens the split screen #12140

- The text area resizes when a button bar is shown or hidden #12138

- stop IRC from logging a "needs fixing" warning for normal server messages #12137

- Dragging a double-click selection to the left keeps the clicked word #12136

- Text no longer stops short of the command line when something covers the top of the main window #12133

- getMousePosition() no longer offset by a button bar along the top or left #12131

- Trigger highlights work when the match reaches the end of the line #12129

- No two items in a detached window's menu answer to the same key #12126

- Clicking a room over a background map image no longer picks up the image #12123

- Viewing a running timer in the editor no longer restarts it #12117

- Room highlights are no longer drawn under the rooms around them #12106

- Room symbols from icon fonts now show on the map #12105

- Package Manager no longer gives a same-named package a repository package's links or updates #12101

- Editor sections showing an empty form when nothing is selected #12100

- Room symbol preview in room properties now matches the map #12099

- Running tests warns when a test file is missing or broken #12098

- Hiding one room's name on the map works again #12097

- Report line numbers wrapLine() can't find in the window #12094

- Rewrapping text with a wrap indent no longer indents it twice #12093

- The map opens at a usable width #12091

- Copied text keeps bold, italic, underline and see-through backgrounds #12090

- MorgenGrauen and Icesus loaders now report download and install failures #12089

- Refuse NaN in text-to-speech settings and alert durations #12087

- The generic mapper no longer changes the utf8 functions #12085

- Mapper routes and speedwalks always take the shortest way #12084

- Label font, style and color changes no longer break hecho, decho and cecho text #12083

- Mudlet starts again on macOS 27.2 #12176

Infrastructure:

- Run Windows C++ tests at twice the core count #12196

- Speed up the slowest C++ tests #12195

- Let the pathfinding benchmark run on small maps #12146

- Halve the Lua test suite's run time #12192

- Build Lua 5.1 from source on every platform #12169

- Faster debug builds by making a debug-only line color check cheap #12124

- Warn when a PR edits a file synced from another project #12175

- Fix getLuaString() answering a stale Lua stack slot #12073

- Test that the main window draws its full width once a left border is removed #12103

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

- Sounds can play from the left or right, and move as they play #12034

- Starter UI can put a picture behind the whole window #12038

- Optional Folders view in the script editor #11992

- Experiments section in profile preferences #11946

- search the whole map from the 3D mapper #11971

- stitch neighbouring areas and portal previews in the 3D mapper #11968

- route planner for the 3D mapper's world atlas #11960

- semantic zoom from rooms to world graph in the 3D mapper #11957

- Area graph with a saved world layout for the mapper #11948

- DreamLand as a default game #11899

- show a picture of each 3D map style in Preferences #12004

- diorama style for the 3D mapper #11967

- inkwash style for the 3D mapper #11959

- Hologram style for the 3D mapper #11956

- Transit style for the 3D mapper #11953

- Terminal style for the 3D mapper #11952

- Blueprint style for the 3D mapper #11950

- Map style presets for the 3D mapper #11949

- Pick, select, speedwalk and edit rooms from the 3D map #11928

- SvenskMUD support to the generic mapper #11947

- Scripts can hide the mapper's built-in right-click menu items #11620

- A pointer to the redesigned Settings for upgrading players #11872

- Allow Mudlet to be controlled by Claude / ChatGPT #8576

- Show split colors in legacy Chinese, Japanese and Korean characters #11240

- A script can cancel listening without sending what was half-said #10992

- 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:

- Decode floods of game text on a second CPU core #12166

- Less work per trigger fire #12167

- Less time spent timestamping lines during floods of text #12161

- Less work per trigger fire during floods of text #12163

- matching triggers on several threads is off by default, with a setting and statistics to judge it #11841

- faster GMCP processing #12095

- Faster, smaller storage for game text lines #12154

- faster 2D map drawing with room borders on #12139

- Faster processing of game text that no script reacts to #12152

- faster sending of commands on games that use a non-UTF-8 encoding #12130

- Starter UI and generic mapper check for a map without reading every room #12149

- Faster trigger processing with a write barrier in Lua #12170

- Faster profile loading by building the script editor on first open #12143

- Faster text processing with the generic mapper installed #12107

- Paint the console at 30 fps during floods of text #12164

- faster substring trigger search #12159

- Faster wrapping of long lines #12157

- Faster trigger processing for packages with large trigger groups #12155

- Load profiles and packages faster #12153

- Faster map loading on big maps #12151

- Faster speedwalk routing after map changes #12150

- Faster getRooms and getAreaRooms on big maps #12148

- Faster echo of plain and multi-line text #12147

- keep the 3D map scene when scripts store room user data #12135

- faster profile open and reset #12125

- Less CPU spent redrawing the starter UI's health bars #12119

- Faster text processing with the starter UI installed #12116

- blinking text no longer redraws the whole console 30 times a second #12114

- faster text display in narrow windows #12102

- faster 2D map panning on maps with many labels #12088

- faster Chinese, Japanese and Korean text decoding #12086

- Opt-in error reporting for getExitWeights, getMapLabels and setRoomWeight #12075

- Mudlet's sounds play nicely with Bluetooth headphones #12033

- Labels marked as live are read out when their text changes #12012

- The generic mapper says which rooms it merged #12037

- Buttons made from labels can be reached and pressed with the keyboard #12011

- Starter UI reads enemy health from fight messages #12031

- Screen readers can tell what a script's label is and press it #11937

- The 3D map's error links to the setting that turns the modern mapper off #11996

- The 3D map switches to the world view at a size that suits each area #12000

- The 3D map stays fast on huge maps #11954

- Starter UI shows health from Swedish LK prompts #12027

- The generic mapper can start mapping without an area name #11936

- draw terminal map exits as dim phosphor-green dots #12017

- keep diorama labels sharp, see through buildings in front of the player, and outline highlights #12014

- let the other map levels sit back quietly behind the viewed one #12010

- make room names on the 3D map readable in every style #12007

- Faster trigger matching with large trigger sets #12006

- Faster handling of large bursts of game text on Windows #12015

- Skip the wrap pass for incoming lines that already fit #12020

- Faster handling of incoming game text #12019

- f() string interpolation runs faster #11575

- getCollisionLocationsInArea is faster on large areas #11692

- close the last 3D map gaps with the 2D map #11945

- make the 3D map easier to read #11939

- Edit the map in the modern 3D view as in 2D #11933

- draw exits, doors and labels in the modern 3D map like the 2D map #11921

- modern 3D map shows room colors, symbols, highlights and player marker like the 2D map #11909

- Passwords are typed into a dedicated box instead of a masked command line #11126

- calcFontSize can report the width consoles lay text out on #11789

- Make screen reader descriptions plain text #9329

- New Crowdin updates #10350

- Skip the unpacking popup for small packages #11275

- deleting a big folder in the editor is faster and uses less memory #11601

- MXP games process plain text more than twice as fast #11607

- undoing the delete of a big folder in the editor is much faster #11600

- faster search stepping in large scrollback #11595

- decho2cecho and hecho2cecho are 19 times faster #11289

- busy games stay smooth once a profile has shown a link #11591

- recalling a command from a long history is faster #11619

- leaving a big folder in the editor no longer stalls #11618

- searching a big note stays responsive #11617

- dragging rooms around a big map stays smooth #11615

- dragging a selection box over a big map stays smooth #11614

- generic mapper speed when mapping and sending commands #11613

- creating many timers from scripts stays fast #11612

- game links that start out selected no longer slow down busy output #11610

- restyling a button no longer redraws every button bar #11609

- screen reader responsiveness with a long scrollback #11608

- status bar labels no longer restyle when their style is unchanged #11606

- installing several packages in a row #11605

- table.n_collect is fast on lists of tables #11604

- creating stopwatches stays fast when a script keeps many #11603

- undoing a delete in the editor reads each item only once #11602

- deleting many selected items in the editor is much faster #11599

- reading dates from a database is much faster #11598

- whole-word search in the script editor is much faster #11597

- Tab completion responds faster #11596

- copy2decho and copy2html are faster on long lines #11594

- deleting a large area or many rooms no longer takes seconds #11593

- killing thousands of temporary triggers no longer freezes Mudlet #11592

- typed commands are checked against aliases faster #11589

- XML maps import faster by indexing each area's rooms once #11588

- binary maps load faster by skipping a file size check for empty lists #11587

- XML maps load faster with the mapper open #11586

- dock widgets repaint faster with the Fusion style #11585

- XML map import is faster because map paint no longer copies every room id #11584

- createMapLabel() is up to 35x faster, and creating thousands of labels no longer slows down #11583

- table.n_complement() and table.n_intersection() are hundreds of times faster on big lists #11582

- Maps load faster #11287

- Copied text no longer breaks where word wrap split a line #11263

- open the editor's Variables view faster with large tables #11557

- uninstalling a package no longer slows down with folder size #11521

- New profiles load faster #11523

- Flush the log file once per event loop pass, not per line #11546

- Map load skips per-room custom line index upkeep #11503

- Speedwalk paths are ready sooner after the map changes #11482

- Faster map drawing with upper and lower levels shown #11316

- createRoomID() stays fast on large maps #11313

- generic mapper handles each line without building a table for it #11431

- adding a Geyser menu item no longer restyles the others #11463

- Geyser gauges update faster #11447

- Geyser labels echo faster by remembering named colors #11440

- Faster deleteFull(), patternEscape() and table.n_collect() #11292

- a trigger with nothing to run skips handing its captures to Lua #11469

- events cost less to raise #11453

- Scripts that echo many lines in a row run faster #11485

- Lines of plain text are laid out for painting faster #11479

- Faster display of Chinese and Korean game text #11314

- Echoing colored text to a label is twice as fast #11288

- Build each logged line in one string #11554

- Build HTML log lines without per-character lookups #11549

- ansi2decho looks each colour up as it needs it #11516

- ansi2decho looks up the 16 basic colours once per call #11512

- record a room's entrances without building a hash of its exits #11499

- maps where many rooms lead to one room load and edit faster #11494

- Profiles save faster #11488

- copy() and appendBuffer() copy each line whole instead of per character #11458

- copy() reuses the clipboard instead of building a buffer per call #11422

- Geyser getters skip the terms that are always zero #11409

- Geyser layouts resize nearly twice as fast #11291

- starter UI remembers which vitals shapes a line matched #11444

- starter UI reads prompts without building a table per reading #11415

- starter UI only tries vitals shapes a line could match #11404

- New profiles process incoming text faster #11350

- Draw each line's glyphs in one call per color #11356

- Main console redraws skip filling cells already cleared to their color #11510

- Full redraws of the main console clear the screen once #11476

- Main console paints its own background when nothing shows through #11389

- Hover and selection repaints copy only the rows they redraw #11376

- Scrolling the main console redraws faster #11365

- cecho, decho and hecho are faster #11281

- Commands go through aliases nearly twice as fast #11280

- getRoomsByPosition() is over 100 times faster #11265

- searchRoom() finds rooms by name faster on large maps #11272

- JSON maps save and load nearly three times as fast #11271

- string.trim and table.contains are faster #11270

- getEpoch() is six times faster #11269

- Killing temporary timers, aliases and keys stays fast with many of them #11268

- Geyser labels and gauges update twice as fast #11267

- f-strings run about 1.5 times as fast #11266

- Events reach their handlers three times faster #11264

- Move the color space workaround to the Compatibility settings #11058

- Draw game text twice as fast with cached glyphs #11184

- Faster triggers when scripts don't read matches or line #10846

- Faster trigger matching and game text display #10842

- Zoomed-out 2D map draws nearly twice as fast on huge areas #11036

- Stay-open triggers no longer slow down profiles with many triggers #10984

- 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:

- The MCP bridge no longer drops replies when its input closes early #12179

- MXP links only open web and email addresses #12111

- Web links in link menus open in the browser #12104

- A link that starts while another is open ends that one #12121

- Script editor shows the right on/off state for items a script toggled while it was closed #12142

- Linux screen readers read the right word when moving by word through the main window #12141

- scrolling to a line lands on that line, even when it opens the split screen #12140

- The text area resizes when a button bar is shown or hidden #12138

- stop IRC from logging a "needs fixing" warning for normal server messages #12137

- Dragging a double-click selection to the left keeps the clicked word #12136

- Text no longer stops short of the command line when something covers the top of the main window #12133

- getMousePosition() no longer offset by a button bar along the top or left #12131

- Trigger highlights work when the match reaches the end of the line #12129

- No two items in a detached window's menu answer to the same key #12126

- Clicking a room over a background map image no longer picks up the image #12123

- Viewing a running timer in the editor no longer restarts it #12117

- Room highlights are no longer drawn under the rooms around them #12106

- Room symbols from icon fonts now show on the map #12105

- Package Manager no longer gives a same-named package a repository package's links or updates #12101

- Editor sections showing an empty form when nothing is selected #12100

- Room symbol preview in room properties now matches the map #12099

- Running tests warns when a test file is missing or broken #12098

- Hiding one room's name on the map works again #12097

- Report line numbers wrapLine() can't find in the window #12094

- Rewrapping text with a wrap indent no longer indents it twice #12093

- The map opens at a usable width #12091

- Copied text keeps bold, italic, underline and see-through backgrounds #12090

- MorgenGrauen and Icesus loaders now report download and install failures #12089

- Refuse NaN in text-to-speech settings and alert durations #12087

- The generic mapper no longer changes the utf8 functions #12085

- Mapper routes and speedwalks always take the shortest way #12084

- Label font, style and color changes no longer break hecho, decho and cecho text #12083

- Mudlet starts again on macOS 27.2 #12176

- A sound played by its full path still plays after the file is moved #12042

- Stopping media by priority also stops media at that priority #12040

- denyCurrentSend() no longer swallows an unrelated later command #12078

- Generic mapper only edits the map while mapping #12077

- highlights and selectCaptureGroup() in later triggers after an earlier trigger edits the line #12057

- Labels with the default colour use the proportional font again #12065

- closeUserWindow and cut answer nil and why for a window that does not exist #12072

- saved tables keep both names for a shared table across a save #12071

- Link, popup and insertText functions say a label cannot take them #12069

- Scripts containing a NUL character are no longer cut short when saved #12068

- a module's failing script no longer runs twice as the profile opens #12067

- Scrolling over a map view while its profile closes no longer crashes #12066

- Dark app and profile stylesheets darken the Settings dialog again #12064

- Multi-line map labels fit inside their box #12063

- Match-all triggers slowing down on long lines with patterns like (\w*) #12062

- new map windows open on the player's area instead of blank #12061

- Attached container border follows set_constraints() and reposition() #12060

- match-all highlights and filters pick the wrong captures when matches differ in group count #12059

- Switching password storage says when a saved password could not be read #12058

- Say so when the keychain refuses a password and it is saved in the profile instead #12056

- Dialogs opened from a floating map stay with the map on Qt 6.12 #12055

- Geyser colors and Label:echo no longer slow down past 1000 colors #12054

- Multi-line MMCP snoop data keeps its line breaks #12052

- An exit weight filter no longer lets routes through locked rooms and exits #12051

- Cursor-forward spacing is kept on lines longer than the wrap width #12050

- matches keeps the captured text after selectCaptureGroup() and replace() #12049

- Generic mapper stops mapping when a map loads #12048

- rawget(_G, "matches") and "line" work in triggers again #12047

- CJK text no longer draws slower once over 4096 distinct characters #12046

- setBackgroundImage(label, "") clears the label's image again #12045

- addAreaName() no longer overwrites an area made with setAreaName() #12044

- an unfinished escape sequence in feedTriggers() text no longer eats the next feed's text #11826

- a prompt followed by an unfinished OSC is shown when the game pauses #11819

- a hidden Adjustable.Container gives its border back and retakes it on show #11648

- Adjustable.Container:attachToBorder("Left") works in any case #11647

- regex trigger and alias creators refuse a pattern that does not compile #11799

- a failed named timer or event re-registration keeps the working one #11793

- Saving or reading a stored password no longer takes seconds on some builds #12028

- A game toggling ECHO quickly no longer turns password hiding off #11912

- environment colors 257 to 272 are right before a map is loaded #11709

- colour triggers still match after an earlier trigger deletes a line #11800

- passwords are no longer saved with a key anyone can work out when the key file cannot be written #11813

- Generic mapper keeps up with your SvenskMUD prompt #12016

- feedTriggers() with CRLF line endings no longer adds a blank line after each line #11825

- keep a refused install's files out of a folder that was already in the profile #11663

- sysTelnetEvent hands binary option data over unchanged #11822

- selecting a profile in the connection dialog no longer writes files into it #11816

- the connection dialog says when a saved password could not be read #11814

- Lua functions report argument errors under their own name #11808

- an alias whose command expands into another alias keeps its own matches #11748

- script installs wait out a profile save instead of reporting early success #11666

- resuming from the emergency stop keeps a timer whose script does not compile #11803

- raise install events for a module whose XML stopped part-way #11661

- remember() and saveVars() document that saving is manual #11641

- 3D map stays blank or fails to start on Wayland #11995

- Sound files that share a name in different folders no longer play each other #11993

- delete every line of a range in TBuffer::deleteLines() #11837

- --mirror now copies trigger echoes, echoLink() text and commands at a prompt #11834

- a line held for server-wrap joining stays held while "Save profile?" is asked #11824

- bytes held across a server encoding change are no longer decoded in the new encoding #11821

- "Replace blank lines with a space" no longer adds a space line after each burst #11820

- the secure connection setting in Preferences is no longer undone on the next connect #11817

- a stray IRC end-of-list reply no longer cuts short the MOTD or WHOIS being shown #11812

- a Discord status update from the game without a party no longer clears the party #11811

- nine Lua errors no longer arrive split across two lines #11807

- report errors raised in a spawn() callback #11806

- report scripts whose body fails as the profile loads #11805

- a repeating tempTimer() with empty code no longer errors forever #11804

- tempButton() and tempButtonToolbar() return nil and a message on refusal #11802

- exists() and findItems() skip killed items awaiting cleanup #11801

- tempComplexRegexTrigger treats an empty sound file as no sound #11798

- showCaptureGroups() works on triggers with named capture groups #11794

- personal dictionary words are no longer silently lost #11792

- saved IRC and profile passwords are readable by their owner only #11757

- a nested feedTriggers() no longer empties the caller's matches #11747

- expandAlias(command, nil) echoes the command like expandAlias(command) #11746

- denyCurrentSend() in an alias that sends nothing no longer swallows the next command #11745

- screen readers are told the whole selection, last character included #11733

- installPackage() reports a bad argument like its sibling functions #11681

- report a package trigger or alias whose pattern does not compile #11665

- reloadModule() reports an unknown module and a failed reinstall #11658

- db:create moves a single-column UNIQUE to the column it now names #11630

- a button bar in a package uses its own stylesheet and layout #11414

- a button bar moved into another bar leaves no copy of itself behind #11413

- Games can stream media, and stop all media with an empty stop message #12024

- the starter UI leaves the map to a game interface that opens it while installing #11778

- Removing a profile says when its saved password or sign-in stays behind #11906

- Mudlet copes better when saved passwords and sign-ins can't be read #11905

- Mudlet only promises an automatic sign-in it will make #11616

- JSON map round trip keeps each area's 2D map zoom #11711

- mudlet -qv and -fh print and exit without needing a display #11754

- the generic mapper no longer sends anything when the map first opens #11773

- a map file that cannot be read leaves the loaded map alone #11744

- sort a new variable into place in the Variables view once it is named #11766

- a label link whose Lua command holds a colon runs again #11727

- JSON map round trip keeps label outline colors and fonts #11704

- Starter UI no longer leaves an empty strip on the right after a restart #11997

- the display font comes back when a package brings its font again #11787

- consume a CSI with an intermediate byte through its final byte #11782

- a label without click callbacks no longer hides the console's context menu #11738

- setBackgroundColor() and setCmdLineAction() say why they refuse, not "not found" #11724

- setFont() refuses a font name with an embedded NUL #11723

- exportAreaImage() returns false for a path it cannot write to #11712

- JSON map import keeps an area whose name is blank #11708

- JSON map export keeps the door on compass-direction exit stubs #11705

- JSON map import keeps the alpha of translucent colors #11703

- Saving the profile also writes the application-wide settings to Mudlet.ini #11765

- createCommandLine() and createTextEdit() refuse with false like the other creators #11718

- nested labels close and go away with the label they belong to #11714

- deleting a room drops it from the mapper's room selection #11696

- package exporter keeps counting items after a dialog closed early #11688

- package manager says so when a package is missing from its index #11686

- window functions answer nil and why for a window that does not exist #11680

- a carriage return in saved text survives a profile reload #11655

- Geyser HBox/VBox children tile without one pixel gaps #11651

- Adjustable.Container:lockContainer() refuses a lock style it does not have #11646

- RGB2Hex() and decho2hecho() clamp color components to 0-255 #11642

- Lua's unzip() works again and extracts archives safely #11035

- Let screen reader users reach the menu bar with Alt #9323

- feedTelnet() and feedTriggers() no longer cut their text off at a NUL #11818

- the starter UI reads health, mana and moves maxima from Char.MaxStats #11777

- Lua compile errors are plain text and only syntax errors are called so #11749

- Discord no longer shows a random known game for an empty or partial server address #11810

- emergency stop also stops offset timers #11797

- isActive() checks ancestors when given an item ID #11796

- key groups no longer store an out-of-range key code #11795

- a missing spell-check dictionary is reported, not loaded empty #11791

- a failed editor-theme update says so and stays on show #11790

- reloading a module keeps the fonts it ships #11786

- detect MXP from an ESC[#z split between two reads #11785

- leave MXP in open mode after the MXP subnegotiation #11783

- keep the attributes after an unusable SGR colour type #11781

- ignore a 256-colour index outside the palette #11780

- gui-drop keeps images dropped into user windows and stops when uninstalled #11775

- new Medievia profiles always get MedUI installed #11774

- scroll to a trigger pattern chosen from the editor's search results #11767

- setConfig() refuses IRC values the dedicated IRC setters refuse #11762

- setConfig() takes the map settings before a mapper is open #11761

- setConfig() with a table now reports whether its keys were applied #11759

- closing a profile while Mudlet waits for its save can no longer crash #11758

- saving a profile setting that fails to reach the disk is reported #11756

- mudlet --version no longer warns about Qt's own options, and warns on stderr #11753

- the first thing typed after detaching a profile tab reaches its command line #11752

- one Ctrl+Z undoes adding an editor item #11751

- Saving the map leaves area user data as scripts set it #11743

- changing the audio output device keeps media volume and mute working #11739

- a damaged command line index in profile.ini cannot overflow #11737

- a push-down button saved down no longer sends its command on every load #11736

- Copy in the editor with nothing selected no longer pops a modal box #11735

- unsaved new variables in the Variables editor no longer leak #11734

- Space activates the focused link in caret mode again #11732

- Client.Media Pause, Stop and numeric volume 0 handled as the protocol says #11730

- a label hyperlink shows the pointing hand cursor #11728

- setLinkStyle() no longer corrupts links that hold quotes #11726

- setFontSize() refuses a size too large to render #11722

- the border setters refuse negative and overflowing sizes #11720

- getTextFormat() names the main console 'main' in its refusals #11719

- getLabelFormat() refuses a name that is not a label #11717

- Geyser.Label:changeMenuIndex() reports an out-of-range index clearly #11716

- setLabelCursor() refuses an unknown cursor name instead of raising #11715

- setRoomIDbyHash() refuses a missing room or an empty hash #11713

- JSON map import warns about a room whose id is already taken #11710

- saving a map no longer adds system keys to area and room user data #11707

- JSON map import replaces the map user data instead of merging it #11706

- speedwalk events match the walk that actually happened #11702

- addCustomLine refuses a colour table with fewer than three components #11701

- room functions return nil and a message for a room that does not exist #11700

- map label and map menu functions report what they could not do #11699

- createMapImageLabel refuses an image file it cannot read #11698

- a custom exit line is no longer drawn over by the plain exit back #11697

- a refused db:create no longer breaks db:fetch on that sheet #11635

- db:add, db:update and db:set refuse a value holding a NUL byte #11634

- db:fetch sorts by a column called desc or asc #11633

- db:create warns about an unknown underscored sheet option #11632

- db:create no longer rebuilds indexes on underscored column names #11631

- db:create reports a sheet, column or index sqlite refused #11629

- do not register a package file nothing could be read out of #11660

- table.save round-trips every key and value it writes #11639

- Removing a profile also removes its saved sign-in #11880

- secondary map views follow a change of colour scheme #11695

- deleting an exit in the room exits dialog also clears its speedwalk lock #11693

- getPath reports large route weights exactly and survives extreme coordinates #11691

- closing the package exporter mid-export no longer blocks later exports #11687

- package manager keeps its package list when a refresh fails #11685

- HTTP header errors blame the name or the value, whichever is wrong #11684

- HTTP functions only fetch http and https URLs #11683

- installPackageFromUrl() installs even when another download finishes first #11682

- getUserWindowSize refuses a name no user window has #11679

- getLines reads a reversed range downward from its first line #11677

- refuse to create a mini console, scroll box, command line or text edit over a label's name #11678

- color triggers keep the game's colors after a trigger recolors and edits a line #11676

- setFontSize and getFontSize reach a label, as setFont and getFont do #11675

- setLink, setPopup, insertLink and insertPopup refuse when there is nothing to link #11674

- copy2decho and copy2html keep every character of a line with an emoji #11673

- log when the window layout file cannot be opened for saving #11671

- report the syntax error of a label or command line callback string #11670

- install nothing from an empty Client.GUI package download #11664

- refuse package and unzipAsync() archives with entries outside the destination #11662

- a refused uninstallPackage() says why #11657

- a package can no longer take over or delete the profile's own folders #11656

- a saved NaN comes back as NaN instead of 0 #11654

- saved numbers keep their exact value across a profile reload #11653

- Adjustable.Container:setPadding() refuses a negative or non-numeric padding #11645

- an invalid Geyser constraint raises an error naming the element and value #11650

- Geyser.Container:flash(time, false) flashes visible containers again #11649

- minimizing an Adjustable.Container twice no longer loses its height #11644

- string.cut() counts characters, not bytes #11643

- getRGB() reports an unknown color name clearly #11640

- shms() formats negative second counts consistently #11638

- table.deepcopy copies a table that refers to itself #11637

- datetime:parse() accepts a format with no date part #11636

- an inactive timer dragged into an inactive folder keeps its icon #11731

- setPackageInfo() and setModuleInfo() refuse what they cannot set #11729

- resetBackgroundImage() also takes away a stylesheet background image #11725

- disableScrolling() and enableScrolling() refuse the main console by any name #11721

- saveProfile() to a folder it cannot write to returns nil and a reason #11659

- text the game sends just before closing the connection is no longer lost #11827

- a large MCCP compressed burst is no longer cut short and garbled #11823

- make the MXP reset escape select open mode #11784

- ansi2string() and ansi2decho() drop non-SGR escape sequences #11779

- the update dialog forgets an answered install and a withdrawn offer #11772

- Faster and Slower rescale the wait a replay is already holding #11771

- detached windows' Show Toolbar item and menu bar follow the settings #11770

- reattaching a detached profile puts its tab back where it came from #11769

- mudlet --help says why it could not use the interface language #11755

- dragging a tab out after Qt reordered it detaches that tab #11768

- saveProfile() raises for a first argument that is not a string #11764

- setConfig() range-checks commandLineHistorySaveSize #11763

- getConfig() with no arguments includes the IRC, CHARSET and NEW-ENVIRON keys #11760

- picking the stand-in font in the preferences settles for it #11788

- 3D mapper camera, zoom and area-following in the modern view #11901

- Rendering glitches and debug clutter in the modern 3D mapper #11898

- A saved sign-in that can't be read back is no longer deleted #11883

- uninstalling the Mudlet Tutorial gives back the input, speedwalk and windows it took #11776

- expandAlias() from a timer, key or event sets "command" again, so Repeater works #11625

- Text fed with feedTriggers() shows straight away again #11862

- Secondary map views zoom with the mouse wheel again #11571

- Add install rule to src/CMakeList.txt #11590

- Limit memory a chat peer can make Mudlet use #11101

- Keep all of a long MMCP snoop frame #11093

- Command line right-click menu no longer leaks memory #11117

- Spell checking missed words next to punctuation #11116

- IRC WHOIS no longer shows a 1970 sign-on time #11105

- Each line of an IRC WHOIS or WHOWAS reply is shown on its own #11070

- IRC window no longer lets others plant markup or open non-web links #11069

- Saving a map no longer adds hidden entries to its areas' user data #11667

- a map with an invalid exit stub direction no longer aborts a later JSON export #11472

- map views list areas a script adds, renames or deletes #11420

- Uninstalling a package removes the toolbar and menu commands it added #11326

- clearWindow() puts the cursor back on the line it leaves #11402

- a detached window's mute items show what is muted #11417

- an MXP frame can no longer take over a script's window of the same name #11320

- moving, spreading or shrinking a selection whose centre room a script deleted no longer reads freed memory #11464

- A package's command no longer takes the key of a switched-off key binding #11371

- lines written out by the MXP watchdog or a disconnect run their triggers in trigger context #11425

- a cursor column near INT_MAX no longer pads a line until memory runs out #11459

- colour inserts land after non-ASCII text, and missing windows answer nil #11509

- selected text stays readable on a translucent console background #11438

- a room the map audit renumbers is no longer listed, or stood in, under its old ID #11382

- Re-selecting a capture group after replace() selects the replacement #11104

- Settings search finds the colour settings when searching for "colour" #11433

- printCmdLine() and appendCmdLine() leave the caret after all the text #11405

- an empty portable.txt gets a notice that says so #11378

- pausing a replay no longer moves the Pause button out from under the mouse #11383

- a script's right-click action gets nils, not old coordinates, when nothing is selected #11448

- a profile in a background tab reports the right width when its borders change #11426

- Settings > Shortcuts warns when a Mudlet shortcut takes a package command's key #11388

- a password in the encrypted file is found even while the keychain does not answer #11387

- MXP brings a frame's first tab to the front when a frame is nested in it #11410

- a GMCP merge key sent as a plain value no longer leaves __needMerge in gmcp #11487

- a wrap narrower than the timestamps no longer reports a huge NAWS width #11421

- a map view closed with its X button is closed, not just hidden #11442

- picking a map menu item whose map event was removed no longer crashes #11460

- asking where to install speech recognition no longer stops it being found #11373

- an MXP external frame opened in a background tab gets its width #11436

- a user window docked beside another gets a share of the area #11439

- caret keys no longer crash after deleteLine() empties or shortens a console #11536

- enableModuleSync() and disableModuleSync() keep a script's module priority #11412

- a dropped package with broken scripts says which ones #11391

- getIrcConnectedHost() forgets the server once its connection ends #11407

- getTimestamp() reads the first line of a console #11392

- getSelection() reads the line the selection is on #11394

- replace() redraws the line it changes #11406

- inserted text is rewrapped at the console's own wrap width #11424

- a buffer window keeps its wrap width and indents when recoloured #11441

- saving a key binding keeps its "already used by Mudlet" warning #11434

- clicking the category a Settings search started from ends the search #11432

- Button toolbars no longer stack copies of their buttons when rebuilt #11497

- Speech recognition after an error no longer blames a missing model #11328

- IRC /close shows the server buffer after the server renamed it #11408

- detached-window moves no longer leave a duplicate tab, and empty posts no longer mark tabs #11624

- button bar menus no longer pile up in memory each time a bar redraws #11611

- a malformed Mudlet.ini is reported at startup again #11379

- setConfig() refuses a map room size below 1 #11393

- Tabs in detached windows now show new activity #11237

- match-all triggers and aliases find no extra empty match inside an accented letter #11386

- setFont() refuses a missing font written as a list or in quotes again #11381

- a chat peer snooping you no longer sees a "?" after every prompt #11380

- half a Big5/GBK/EUC-KR character no longer swallows the game's next line ending or colour code #11515

- regex triggers and aliases starting with (*NO_JIT) fire again #11455

- editor Undo and Redo no longer leave a trigger or script switched off #11385

- switching spell check or its dictionary rechecks the input line again #11384

- Settings room size arrows can step past 7 #11430

- unticking "Use maximum lines possible" brings back the scrollback size chosen before #11429

- Esc in a Settings shortcut box closes Settings instead of becoming the shortcut #11427

- Settings keeps a picked older map and ticked copy destinations #11456

- Settings no longer applies a number while it is still being typed #11390

- table.save() taking quadratic time on tables of tables #11558

- Keep transparent-background text in one span in HTML logs #11550

- ansi2decho survives a cut-short colour and keeps it under bold #11514

- Scripts holding DLE, DC1, ETB or CAN characters survive a save #11489

- Speech recognition can use the microphone in macOS release builds #11572

- a custom line point beyond the range of room coordinates no longer aborts the 2D map #11473

- exporting after deleting an item the package exporter lists no longer touches freed memory #11466

- f() shows your variable called lookup again #11366

- crash or freeze installing a package whose config.lua errors without a message or never finishes #11346

- getLines() running out of memory on a huge line range #11312

- selectString() freezing Mudlet on an empty line with a large match count #11311

- a wrap indent close to the wrap width no longer exhausts memory #11307

- crash closing the room exits or properties dialog after its room is deleted #11306

- crash when a sysManualLocationSetEvent handler deletes the room #11302

- Mudlet freezing when a window is moved into itself #11286

- a damaged binary map no longer asks for gigabytes or hangs loading #11147

- crash when a map filter or map info script deletes rooms #11283

- crashes from game-defined MXP elements that close tags or refer to themselves #11284

- MXP no longer hoards game text in memory, and a stray VAR end tag no longer crashes #11315

- crash when a script closes or resets its own profile and then loads, closes or connects to another #11290

- destroying the main window with the map dock open no longer corrupts memory #11150

- Exporting area images in quick succession no longer crashes #11145

- crash when closing a profile that had opened a map widget #11293

- a console buffer limit worked out as zero lines no longer crashes Mudlet #11309

- pathfinding crash after loading a JSON map #11285

- a game asking to move the cursor a huge distance no longer crashes Mudlet #11308

- pasting only blank lines into a trigger pattern no longer crashes #11321

- a replay file that changes while it plays no longer crashes Mudlet #11322

- a Lua finaliser running while trigger captures are prepared no longer crashes Mudlet #11324

- a game nesting compressed data inside compressed data no longer corrupts memory #11323

- quitting while text-to-speech is still talking no longer crashes Mudlet #11331

- crash picking a right-click menu item whose mouse event was just removed #11341

- crash installing a package or loading a profile that lists an incomplete module #11343

- redrawing a window whose lines were all deleted no longer crashes Mudlet #11355

- closing a profile while its unzipAsync() is still extracting no longer crashes Mudlet #11362

- a spawn()ed program that prints after its profile closed no longer crashes Mudlet #11369

- chatting to a profile that has closed no longer crashes Mudlet #11370

- redoing the deletion of a button bar no longer crashes Mudlet #11418

- closing the script editor no longer crashes after its detached window is gone #11435

- calling closeMudlet() twice no longer crashes Mudlet #11318

- closing Mudlet no longer crashes when a profile close is still pending #11443

- right-clicking past the room colors no longer crashes or deletes the wrong one #11465

- installing from the package repository no longer reads freed list items #11467

- a second close of a profile while its save question is open no longer crashes #11468

- deleting an area while the map is exported to JSON no longer reads freed memory #11470

- Removing an exit also removes its weight, door, lock and custom line #11109

- editing a point on a custom line removed while its menu is open no longer crashes #11461

- setMapZoom() refuses a zoom that is not a finite number #11475

- triggers or aliases that feed themselves more than once no longer freeze Mudlet #11483

- a huge media loop count no longer freezes Mudlet #11490

- calling a database or directory object's method without the object no longer crashes Mudlet #11492

- accepting custom line properties after a script deleted the room no longer writes to freed memory #11493

- connectExitStub() accepts direction codes 2 to 11, and in/out no longer abort debug builds #11496

- a Big5-HKSCS character outside the BMP no longer crashes Mudlet #11500

- a package config.lua that leaves its globals in an awkward state no longer crashes Mudlet #11501

- Windows reserves enough stack to repaint thousands of sibling widgets #11504

- zooming in on a big map label runs Mudlet out of memory #11351

- a huge map image label no longer freezes Mudlet allocating its image #11533

- extending a Shift selection across a cleared window no longer crashes #11541

- dragging a line selection across a cleared window no longer crashes #11542

- choosing an editor search result after a script changed items no longer crashes #11562

- undoing a delete no longer reads the freed command after a nested save #11566

- a chat peer's name can no longer crash Mudlet #11518

- clicking into the script editor's code area lets you type there again #11449

- Mudlet no longer crashes now and then as it exits on macOS #11565

- Color triggers scan the whole line again after an earlier trigger lengthens it #11191

- keep Lua autocomplete popup from stealing editor focus #10780

- --help and --version no longer crash now and then #11357

- Opening a map view no longer crashes before the map window was ever opened #11282

- multiline triggers with a Lua function body get multimatches #11081

- multiline triggers with an expiry count keep their named captures #11077

- An MCCP stream that inflates past the cap is refused, not left desynced #11079

- Text sent instead of an MCCP stream is shown in full #11075

- A broken MCCP stream is refused as the version it used #11074

- Restarting MCCP compression no longer leaks memory #11062

- Settings explain why options are greyed out when no profile is open #11141

- Switched-off items run their scripts again after a profile reset #11107

- setConfig refusals name the right setting and what it accepts #11063

- Editor undo now fully restores color triggers, patterns and event handlers #11113

- Commit a game-wrapped line held back with no main console view #11155

- MXP frames inside a tab fit it when opened in a background profile #11232

- MXP frames inside a separate window follow it when it is resized #11200

- MXP frames nested in an external frame or a tab now appear inside it #11172

- wrapLine() on the main window uses the profile's wrap width #11192

- Deleting a group no longer reads the group after it is destroyed #11129

- A deleted user window no longer squeezes the next one to no height #11160

- A saved sign-in's own record is kept in the profile, not the keychain #11033

- An unclosed hyperlink no longer makes every later line clickable #11023

- Saved sign-in tokens follow the password storage preference #11032

- A locked keychain is no longer asked once per storage layout #11031

- Quote game text safely in MXP links #11096

- setConfig("mapExitSize") keeps sizes like 12.5 and rejects invalid ones #11071

- Pause, resume and stop a sound by the absolute path it was played from #11099

- hasExitLock() errors now say what type of direction they got #11142

- Loading a map no longer drops a room whose ID is below one #11108

- Map audit no longer empties the room list of an area it renumbers #11087

- A spoken phrase goes to the game that heard it, not the one that took the microphone #10986

- A model loaded from a speech error handler is no longer thrown away #10987

- Games with their own interface no longer get the starter UI too #11134

- Stop game text from injecting MMCP chat commands #11100

- Blank lines corrupting MMCP snoop output #11094

- Drop the stray quotes around the unknown docking area message #11092

- Removed special exits no longer leave their weight, lock or area exit behind #11089

- Importing a JSON map with an unknown door type no longer crashes #11088

- getConfig("mapRoomSize") answers in the unit setConfig takes #11064

- Broken UTF-8 from the game no longer eats line endings and colors #11068

- A saved sign-in now works on games that only offer password login #10964

- 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

457 more changes are not listed here, as GitHub limits how long release notes can be - see the pull requests merged in this period.

Don't miss a new Mudlet release

NewReleases is sending notifications on new releases.