Download Mudlet

There are 4 files, weighing 393.2 MiB in total.

Displaying 1 to 4 of 4 files.

Windows 64bit

  Mudlet 4.20.1 (Windows)
» 94.6 MiB - February 10, 2026
sha256: ba22a37cdbe13df58c80cea65135d093de39351e6d8cba1405351e618b67e520

macOS Intel

  Mudlet 4.20.1 (macOS - x86_64)
» 82.4 MiB - February 10, 2026
sha256: 9c2ff0c48aac437716f07a3ed0aa25753954361c794cbc9874b933302cf0e6b9

macOS Apple Silicon

  Mudlet 4.20.1 (macOS - arm64)
» 81.9 MiB - February 10, 2026
sha256: c230c66f7b31f59b975e32ebe4a2aeaf33c30ba6fe776cb125e9e5c34f675ea4

Linux

  Mudlet 4.20.1 (Linux)
» 134.2 MiB - February 10, 2026
sha256: 7c07ed62def0bb545b6508e3a62594e21f017005bcb5a410c98cc28aabcb3948

   

Download for other platforms

  Mudlet 4.20.1 (Windows) (94.6 MiB)

Send this link via E-mail?
Send the download link to yourself or a friend:

Want to test new developments?

Here you can find our Public Test Build version (PTB) for Windows – Let us know how you like it! :-)

Want to play Mudlet as a visually impaired player?

We have collected detailed instructions on how to make Mudlet more accessible, for example using screenreader software.

  Mudlet 4.20.1 (macOS - x86_64) (82.4 MiB)

  Mudlet 4.20.1 (macOS - arm64) (81.9 MiB)

Send this link via E-mail?
Send the download link to yourself or a friend:

Want to test new developments?

Here you can find our Public Test Build version (PTB) for Mac OS X – Let us know how you like it! :-)

Want to play Mudlet as a visually impaired player?

We have collected detailed instructions on how to make Mudlet more accessible, for example using screenreader software, etc.

Please use the AppImage below on Ubuntu.

  Mudlet 4.20.1 (Linux) (134.2 MiB)

Send this link via E-mail?
Send the download link to yourself or a friend:

(if Mudlet does not launch, see instructions here)

Want to test new developments?

Here you can find our Public Test Build version (PTB) for Ubuntu & Linux – Let us know how you like it! :-)

Want to play Mudlet as a visually impaired player?

We have collected detailed instructions on how to make Mudlet more accessible, for example using screenreader software, etc.

This is a portable version of Mudlet – after downloading, extract the launcher somewhere permanent and use it to launch Mudlet.

Note: the Mudlet version in Debian repositories is out of date – if you’re a Debian maintainer, we’d love your help!

  Mudlet 4.20.1 (Linux) (134.2 MiB)

Send this link via E-mail?
Send the download link to yourself or a friend:

 Want to test new developments?

Here you can find our Public Test Build version (PTB) for Linux – Let us know how you like it! :-)

Want to play Mudlet as a visually impaired player?

We have collected detailed instructions on how to make Mudlet more accessible, for example using screenreader software, etc.

Interested in installing Mudlet on ChromeOS? Instructions are available here!

Want to play Mudlet as a visually impaired player?

We have collected detailed instructions on how to make Mudlet more accessible, for example using screenreader software, etc.

Send this link via E-mail?

Send the download link to yourself or a friend:

You can compile Mudlet yourself!

Mudlet wiki has detailed information for different operating systems.

Review the source code directly!

You can browse the latest Mudlet code online via Github – it is also available via git:

git clone --recursive --branch development https://github.com/Mudlet/Mudlet.git

Want to test new developments?

Here you can find our Public Test Build version (PTB) – Let us know how you like it! :-)

Interested in older Mudlet versions?

Here you can find all previous installers for Mudlet.

 

 

 

 

Code signing policy

Free code signing for windows provided by SignPath.io, certificate by SignPath Foundation.

This program will not transfer any information to other networked systems unless specifically requested by the user or the person installing or operating it

Mudlet News

Public Test Build

Changes since last PTB (Mudlet-4.20.1-ptb-2026-05-01-11321893)
Fixed:
– connection status indicators causing tab padding issues on macOS #9231

Full changelog since last release (Mudlet-4.20.1)

##### Added:
– smart command suggestions in the tutorial for new players [#9188](https://github.com/Mudlet/Mudlet/pull/9188)

– lpeg parsing library [#9212](https://github.com/Mudlet/Mudlet/pull/9212)

– Pkuxkx as a predefined default MUD [#9161](https://github.com/Mudlet/Mudlet/pull/9161)

– Mudlet.ini option to control high DPI scale factor rounding policy [#9164](https://github.com/Mudlet/Mudlet/pull/9164)

– right-click option to hide default profiles in connection dialog [#9123](https://github.com/Mudlet/Mudlet/pull/9123)

– selectAll function with optional window support [#9166](https://github.com/Mudlet/Mudlet/pull/9166)

– telnets:// link support for secure TLS connections [#9153](https://github.com/Mudlet/Mudlet/pull/9153)

– getKeyCode function to return key code and any modifiers of a key-binding [#8435](https://github.com/Mudlet/Mudlet/pull/8435)

– `telnet://` URI scheme support for one-click MUD connections [#8601](https://github.com/Mudlet/Mudlet/pull/8601)

– separate border size control and player room marker improvements [#8975](https://github.com/Mudlet/Mudlet/pull/8975)

– OSC 8 context menu title support [#8910](https://github.com/Mudlet/Mudlet/pull/8910)

– DragonfireMUD and VoidMUD [#8783](https://github.com/Mudlet/Mudlet/pull/8783)

– 3rd party definition files for Lua [#8966](https://github.com/Mudlet/Mudlet/pull/8966)

– Starmourn and update IRE game profiles [#9076](https://github.com/Mudlet/Mudlet/pull/9076)

– embeddable TextEdit widget (Geyser.TextEdit) [#8986](https://github.com/Mudlet/Mudlet/pull/8986)

– MudMaster Chat Protocol (MMCP) [#7765](https://github.com/Mudlet/Mudlet/pull/7765)

– blinking/flashing text support [#8983](https://github.com/Mudlet/Mudlet/pull/8983)

– timeout for (Linux) Build xcb-util-cursor [#8978](https://github.com/Mudlet/Mudlet/pull/8978)

– timeout for macos (Install Dependencies) [#8977](https://github.com/Mudlet/Mudlet/pull/8977)

– data loss guard on constraint migration [#8850](https://github.com/Mudlet/Mudlet/pull/8850)

– GNOME Software-style navigation in Package Manager [#8846](https://github.com/Mudlet/Mudlet/pull/8846)

– room description matching to generic mapper [#8649](https://github.com/Mudlet/Mudlet/pull/8649)

– hidden rooms [#8443](https://github.com/Mudlet/Mudlet/pull/8443)

– Multi-file selection in import dialogs [#8796](https://github.com/Mudlet/Mudlet/pull/8796)

– Map label support in 3D mapper [#8793](https://github.com/Mudlet/Mudlet/pull/8793)

– multiple note tabs to the notepad [#8757](https://github.com/Mudlet/Mudlet/pull/8757)

– multiple map views support [#8743](https://github.com/Mudlet/Mudlet/pull/8743)

– muteMediaScript and muteMediaGame options to [getConfig](https://wiki.mudlet.org/w/Manual:Lua_Functions#getConfig)/[setConfig](https://wiki.mudlet.org/w/Manual:Lua_Functions#setConfig) [#8764](https://github.com/Mudlet/Mudlet/pull/8764)

– “Whole word” search option in the script editor [#8722](https://github.com/Mudlet/Mudlet/pull/8722)

– per-room border color and thickness [#8758](https://github.com/Mudlet/Mudlet/pull/8758)

– more safeguards against profile settings being lost [#8742](https://github.com/Mudlet/Mudlet/pull/8742)

– permExactMatchTrigger Lua API function [#8745](https://github.com/Mudlet/Mudlet/pull/8745)

– per-room border color and thickness

– NAWS protocol toggle setting [#8700](https://github.com/Mudlet/Mudlet/pull/8700)

– getBorderColor() Lua API function [#8688](https://github.com/Mudlet/Mudlet/pull/8688)

– MXP FRAME and DEST tag support for multi-window layouts [#8577](https://github.com/Mudlet/Mudlet/pull/8577)

– Optional static analysis during build [#8708](https://github.com/Mudlet/Mudlet/pull/8708)

– OSC 8 hyperlink visibility, selection, and compact syntax enhancements [#8677](https://github.com/Mudlet/Mudlet/pull/8677)

– Sentry license to about dialog [#8660](https://github.com/Mudlet/Mudlet/pull/8660)

– undo/redo for Mudlet editor [#8469](https://github.com/Mudlet/Mudlet/pull/8469)

– [getRoomsByPosition1](https://wiki.mudlet.org/w/Manual:Lua_Functions#getRoomsByPosition1)() function [#8619](https://github.com/Mudlet/Mudlet/pull/8619)

– functional GUI tests using QTest [#8572](https://github.com/Mudlet/Mudlet/pull/8572)

– Enable spellcheck in the composer window [#8447](https://github.com/Mudlet/Mudlet/pull/8447)

– setExitWeightFilter function to alter room/exits weights/locks [#8487](https://github.com/Mudlet/Mudlet/pull/8487)

##### Improved:
– show telnet protocol negotiation status in `Statistics` [#9226](https://github.com/Mudlet/Mudlet/pull/9226)

– read tooltips aloud without HTML tags in profile preferences [#9228](https://github.com/Mudlet/Mudlet/pull/9228)

– ARIA accessibility for OSC 8 hyperlinks in caret mode [#9206](https://github.com/Mudlet/Mudlet/pull/9206)

– inline map download dialog [#9204](https://github.com/Mudlet/Mudlet/pull/9204)

– 2D mapper rendering speed on single-Z-level areas [#9209](https://github.com/Mudlet/Mudlet/pull/9209)

– simplify long tooltips [#8416](https://github.com/Mudlet/Mudlet/pull/8416)

– Make spacing between widgets in the connection dialog more consistent [#9198](https://github.com/Mudlet/Mudlet/pull/9198)

– Auto-switch code editor theme with app appearance [#9167](https://github.com/Mudlet/Mudlet/pull/9167)

– handling of rooms having their hidden property changed [#8947](https://github.com/Mudlet/Mudlet/pull/8947)

– guard mudlet::self() in cTelnet destructor [#9020](https://github.com/Mudlet/Mudlet/pull/9020)

– use raw IP address if provided with one [#9066](https://github.com/Mudlet/Mudlet/pull/9066)

– Give players full control over Discord Rich Presence [#9116](https://github.com/Mudlet/Mudlet/pull/9116)

– show version scope in PTB release changelogs [#9148](https://github.com/Mudlet/Mudlet/pull/9148)

– hidden rooms – allow storage in map versions < 22 and other things [#8930](https://github.com/Mudlet/Mudlet/pull/8930)

– change label highlight from overlay to outline [#9132](https://github.com/Mudlet/Mudlet/pull/9132)

– internal code in regards to memory use [#9015](https://github.com/Mudlet/Mudlet/pull/9015)

– saving a key with no binding set shows an error [#9114](https://github.com/Mudlet/Mudlet/pull/9114)

– Add smooth pulsing effect for blinking text [#9104](https://github.com/Mudlet/Mudlet/pull/9104)

– remove AI/llamafile integration [#9108](https://github.com/Mudlet/Mudlet/pull/9108)

– error message when saving MMP-downloaded map [#9107](https://github.com/Mudlet/Mudlet/pull/9107)

– Automatic audio device switching support [#9026](https://github.com/Mudlet/Mudlet/pull/9026)

– only mark map as dirty if room hidden status is changed [#8946](https://github.com/Mudlet/Mudlet/pull/8946)

– Reduce memory usage for text decorations [#9052](https://github.com/Mudlet/Mudlet/pull/9052)

– Remove debug [print](https://wiki.mudlet.org/w/Manual:Lua_Functions#print) from deleteAll function [#9061](https://github.com/Mudlet/Mudlet/pull/9061)

– add defensive coding to internal code related to the TMediaPlayer [#9017](https://github.com/Mudlet/Mudlet/pull/9017)

– Script Editor search code quality and maintainability [#9028](https://github.com/Mudlet/Mudlet/pull/9028)

– Code quality in TBuffer.cpp [#9029](https://github.com/Mudlet/Mudlet/pull/9029)

– show feedback when manually checking for updates fails [#9004](https://github.com/Mudlet/Mudlet/pull/9004)

– add better error reporting to GMCP merge handler [#9018](https://github.com/Mudlet/Mudlet/pull/9018)

– adjust [getTime](https://wiki.mudlet.org/w/Manual:Lua_Functions#getTime)() table size hint to match 7 entries [#9019](https://github.com/Mudlet/Mudlet/pull/9019)

– Don't [echo](https://wiki.mudlet.org/w/Manual:Lua_Functions#echo) OSC 8 [send](https://wiki.mudlet.org/w/Manual:Lua_Functions#send): hyperlink commands by default [#8957](https://github.com/Mudlet/Mudlet/pull/8957)

– Detection of character-at-a-time mode in server connections [#8825](https://github.com/Mudlet/Mudlet/pull/8825)

– Add more context to media playback events [#8953](https://github.com/Mudlet/Mudlet/pull/8953)

– luarocks busted install instructions version flag [#8950](https://github.com/Mudlet/Mudlet/pull/8950)

– Add macOS clang-format path to AI instructions [#8926](https://github.com/Mudlet/Mudlet/pull/8926)

– Make MNES and NEW-ENVIRON mutually exclusive in UI [#8893](https://github.com/Mudlet/Mudlet/pull/8893)

– update Astaria banner [#8900](https://github.com/Mudlet/Mudlet/pull/8900)

– New Crowdin updates [#8253](https://github.com/Mudlet/Mudlet/pull/8253)

– macOS build instructions use absolute path [#8860](https://github.com/Mudlet/Mudlet/pull/8860)

– nixed rex_prce2 check in lua [#8848](https://github.com/Mudlet/Mudlet/pull/8848)

– Faster map rendering when zoomed in by skipping off-screen rooms [#8797](https://github.com/Mudlet/Mudlet/pull/8797)

– Allow nil to clear label callbacks [#8799](https://github.com/Mudlet/Mudlet/pull/8799)

– keep small map areas fully visible in viewport [#8766](https://github.com/Mudlet/Mudlet/pull/8766)

– Enable PCRE2 JIT compilation for triggers and aliases [#8762](https://github.com/Mudlet/Mudlet/pull/8762)

– open IRC with Lua functions not via UI anymore [#8123](https://github.com/Mudlet/Mudlet/pull/8123)

– Auto-link Lua function names in changelog [#8744](https://github.com/Mudlet/Mudlet/pull/8744)

– add error handling with clear error messages [#8736](https://github.com/Mudlet/Mudlet/pull/8736)

– error message visibility in module creation dialog [#8738](https://github.com/Mudlet/Mudlet/pull/8738)

– Memory management for console hyperlinks [#8725](https://github.com/Mudlet/Mudlet/pull/8725)

– AI assistant guidance for modern C++ loops [#8741](https://github.com/Mudlet/Mudlet/pull/8741)

– error messages for easier troubleshooting [#8721](https://github.com/Mudlet/Mudlet/pull/8721)

– highlight search terms in editor when using global search [#8687](https://github.com/Mudlet/Mudlet/pull/8687)

– Show a warning icon when map autosave fails [#8689](https://github.com/Mudlet/Mudlet/pull/8689)

– Simplify internal tree widget code [#8706](https://github.com/Mudlet/Mudlet/pull/8706)

– remove outdated comment for special exits MMP import [#8707](https://github.com/Mudlet/Mudlet/pull/8707)

– Enable OSC 8 hyperlink visibility by default [#8699](https://github.com/Mudlet/Mudlet/pull/8699)

– Fix compiler warnings about potential data loss in type conversions [#8715](https://github.com/Mudlet/Mudlet/pull/8715)

– Remove outdated FIXME comment from msleep call [#8695](https://github.com/Mudlet/Mudlet/pull/8695)

– Modernize color trigger dialog button handling [#8693](https://github.com/Mudlet/Mudlet/pull/8693)

– Reduce Windows install size by ~135MB [#8685](https://github.com/Mudlet/Mudlet/pull/8685)

– show error message when variable can't be moved in the trigger editor [#8683](https://github.com/Mudlet/Mudlet/pull/8683)

– Add error handling to unexpected scenarios [#8682](https://github.com/Mudlet/Mudlet/pull/8682)

– Auto-recover from stuck password masking during login [#8628](https://github.com/Mudlet/Mudlet/pull/8628)

– OSC 8 hyperlink styling with direct JSON parsing [#8641](https://github.com/Mudlet/Mudlet/pull/8641)

– use platform-native key names in UI text [#8591](https://github.com/Mudlet/Mudlet/pull/8591)

– add a crash reporter for Linux / macOS / Windows [#8540](https://github.com/Mudlet/Mudlet/pull/8540)

– Migrate C++ regex engine from PCRE to PCRE2 [#8533](https://github.com/Mudlet/Mudlet/pull/8533)

– Limit saved Lua table variables to 10,000 items [#8581](https://github.com/Mudlet/Mudlet/pull/8581)

– Remove directional navigation buttons from mapper [#8574](https://github.com/Mudlet/Mudlet/pull/8574)

– – two seconds is longer than you think [#8570](https://github.com/Mudlet/Mudlet/pull/8570)

– Cleanup system efficiency for triggers, aliases, and keys [#8559](https://github.com/Mudlet/Mudlet/pull/8559)

– small Style Cleanup in main.cpp [#8562](https://github.com/Mudlet/Mudlet/pull/8562)

– Remove accessible description from trigger pattern editor [#8546](https://github.com/Mudlet/Mudlet/pull/8546)

– remove navigation shortcuts widget from trigger editor [#8530](https://github.com/Mudlet/Mudlet/pull/8530)

##### Fixed:
– connection status indicators causing tab padding issues on macOS [#9231](https://github.com/Mudlet/Mudlet/pull/9231)

– Clazy warnings part 8 – sanitize-inline-keyword [#9242](https://github.com/Mudlet/Mudlet/pull/9242)

– Text wrapping incorrectly after switching profile tabs [#9227](https://github.com/Mudlet/Mudlet/pull/9227)

– improve media player stability [#9237](https://github.com/Mudlet/Mudlet/pull/9237)

– stop scripted package installs from stealing window focus [#9236](https://github.com/Mudlet/Mudlet/pull/9236)

– link to CONTRIBUTING.md in ai-instructions.md [#9225](https://github.com/Mudlet/Mudlet/pull/9225)

– low-contrast input fields in dark mode on macOS [#9233](https://github.com/Mudlet/Mudlet/pull/9233)

– make FontManager track fonts per-profile [#9238](https://github.com/Mudlet/Mudlet/pull/9238)

– stop re-prompting to set Mudlet as the telnet:// link handler after declining [#9229](https://github.com/Mudlet/Mudlet/pull/9229)

– Clazy warnings part 7 – isempty-vs-count [#9235](https://github.com/Mudlet/Mudlet/pull/9235)

– Clazy warnings part 1A (more) – range-loop-detach [#9232](https://github.com/Mudlet/Mudlet/pull/9232)

– Clazy warnings part 6 – use-static-qregularexpression [#9211](https://github.com/Mudlet/Mudlet/pull/9211)

– Clazy warnings part 5 – fully-qualified-moc-types [#9210](https://github.com/Mudlet/Mudlet/pull/9210)

– prevent use-after-free in TRoom::setArea dirty-area tracking [#9217](https://github.com/Mudlet/Mudlet/pull/9217)

– Clazy warnings part 4 – range-loop-reference [#9207](https://github.com/Mudlet/Mudlet/pull/9207)

– correct use of forward declared type items in headers [#9208](https://github.com/Mudlet/Mudlet/pull/9208)

– Clazy warnings part 3 – qstring-arg [#9197](https://github.com/Mudlet/Mudlet/pull/9197)

– unify and translate some Map Errors [#9189](https://github.com/Mudlet/Mudlet/pull/9189)

– avoid bogus "new Toolbar" and "new Menu" items creation on profile load [#9194](https://github.com/Mudlet/Mudlet/pull/9194)

– Clazy warnings part 2 – detaching-temporary [#9196](https://github.com/Mudlet/Mudlet/pull/9196)

– Clazy warnings part 1 – range-loop-detach [#9195](https://github.com/Mudlet/Mudlet/pull/9195)

– strip whitespace formatting marks when copying trigger patterns [#9149](https://github.com/Mudlet/Mudlet/pull/9149)

– several [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() bugs [#9083](https://github.com/Mudlet/Mudlet/pull/9083)

– prevent update download from being canceled when checking for updates [#9185](https://github.com/Mudlet/Mudlet/pull/9185)

– changelog rendering in PTB update dialog [#9182](https://github.com/Mudlet/Mudlet/pull/9182)

– package edit warning incorrectly showing for module items [#9168](https://github.com/Mudlet/Mudlet/pull/9168)

– Cancel on trigger highlight color picker no longer changes the color [#9013](https://github.com/Mudlet/Mudlet/pull/9013)

– Respect explicit theme choice on Linux [#8897](https://github.com/Mudlet/Mudlet/pull/8897)

– memory leaks in map info contributors, deleting labels [#9141](https://github.com/Mudlet/Mudlet/pull/9141)

– increase TelnetTextDisplayedTest timeouts for CI [#9184](https://github.com/Mudlet/Mudlet/pull/9184)

– review fixes for font handling rework [#9135](https://github.com/Mudlet/Mudlet/pull/9135)

– Better handling of package-supplied fonts during unloading/reloading of packages [#9115](https://github.com/Mudlet/Mudlet/pull/9115)

– [selectCaptureGroup](https://wiki.mudlet.org/w/Manual:Lua_Functions#selectCaptureGroup)() selecting wrong capture [#9133](https://github.com/Mudlet/Mudlet/pull/9133)

– resolve CodeQL stack-address-escape warnings [#9080](https://github.com/Mudlet/Mudlet/pull/9080)

– [insertText](https://wiki.mudlet.org/w/Manual:Lua_Functions#insertText) newline regression [#9022](https://github.com/Mudlet/Mudlet/pull/9022)

– updater to work with github releases [#9125](https://github.com/Mudlet/Mudlet/pull/9125)

– memory leaks in sound player, dialogs [#9142](https://github.com/Mudlet/Mudlet/pull/9142)

– crash when importing non-Mudlet zip with XML containing element [#9146](https://github.com/Mudlet/Mudlet/pull/9146)

– handle over/underflows in (int) TLuaInterpreter::getVerifiedInt(…) [#8924](https://github.com/Mudlet/Mudlet/pull/8924)

– crash when [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() is called while downloads are in-progress [#9138](https://github.com/Mudlet/Mudlet/pull/9138)

– scaling map image labels showing text instead of image [#9121](https://github.com/Mudlet/Mudlet/pull/9121)

– label move in 2D map [#9131](https://github.com/Mudlet/Mudlet/pull/9131)

– correct icon names for two recently added predefined MUDs [#9129](https://github.com/Mudlet/Mudlet/pull/9129)

– handle CMake aliasing problems when PCRE2::8BIT is itself an alias [#9128](https://github.com/Mudlet/Mudlet/pull/9128)

– crash when user cancels map download [#9085](https://github.com/Mudlet/Mudlet/pull/9085)

– small memory leaks in package/object management [#9111](https://github.com/Mudlet/Mudlet/pull/9111)

– small memory leaks when closing/reopening profiles [#9110](https://github.com/Mudlet/Mudlet/pull/9110)

– small leak in [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() for the Lua state, label, and scrollbox [#9109](https://github.com/Mudlet/Mudlet/pull/9109)

– stale characters during horizontal scrolling with wide fonts [#9099](https://github.com/Mudlet/Mudlet/pull/9099)

– Ctrl+End in caret mode hides the cursor [#9101](https://github.com/Mudlet/Mudlet/pull/9101)

– Toolbar visibility not persisted when toggled via right-click menu [#9053](https://github.com/Mudlet/Mudlet/pull/9053)

– typo in mPlayerRoomColorGradentStops member name [#9112](https://github.com/Mudlet/Mudlet/pull/9112)

– OSC 8 hyperlinks strip config/preset only when features are advertised [#9106](https://github.com/Mudlet/Mudlet/pull/9106)

– Miniconsole text cutoff after switching profiles [#8853](https://github.com/Mudlet/Mudlet/pull/8853)

– Refactor and fix logic handling chat name change from GUI preferences dialog [#9025](https://github.com/Mudlet/Mudlet/pull/9025)

– use correct variable for Discord starttime string parsing [#9100](https://github.com/Mudlet/Mudlet/pull/9100)

– Copy Map to inactive profiles losing player room position [#9091](https://github.com/Mudlet/Mudlet/pull/9091)

– use right format type for errors in playSoundFileAsOrderedArguments [#9086](https://github.com/Mudlet/Mudlet/pull/9086)

– Tabs not respecting dark mode [#8996](https://github.com/Mudlet/Mudlet/pull/8996) [#8999](https://github.com/Mudlet/Mudlet/pull/8999)

– map info "Short" always re-added on profile load [#8963](https://github.com/Mudlet/Mudlet/pull/8963)

– Module Manager shortcut uses wrong key sequence when menu bar hidden [#9097](https://github.com/Mudlet/Mudlet/pull/9097)

– setSaveCommandHistory inverting the boolean when a command line name is given [#9098](https://github.com/Mudlet/Mudlet/pull/9098)

– Fix QFutureWatcher memory leaks across the codebase [#9095](https://github.com/Mudlet/Mudlet/pull/9095)

– Color swatch buttons washed out on macOS and not showing at all in Light mode [#8970](https://github.com/Mudlet/Mudlet/pull/8970)

– Text with < characters disappearing on games with MXP enabled [#8918](https://github.com/Mudlet/Mudlet/pull/8918)

– [saveWindowLayout](https://wiki.mudlet.org/w/Manual:Lua_Functions#saveWindowLayout)/[loadWindowLayout](https://wiki.mudlet.org/w/Manual:Lua_Functions#loadWindowLayout) now retains user window positions [#9056](https://github.com/Mudlet/Mudlet/pull/9056)

– memory leak when deleting areas in a map [#9092](https://github.com/Mudlet/Mudlet/pull/9092)

– clickable links losing their URL query parameters [#9073](https://github.com/Mudlet/Mudlet/pull/9073)

– Garbled error messages when passing wrong argument types to popup functions [#9090](https://github.com/Mudlet/Mudlet/pull/9090)

– map exits corrupted when loading maps with invalid room IDs [#9089](https://github.com/Mudlet/Mudlet/pull/9089)

– Correct call() return value so timer error handling reads correctly [#9088](https://github.com/Mudlet/Mudlet/pull/9088)

– Show SSL error messages when secure connection fails [#9055](https://github.com/Mudlet/Mudlet/pull/9055)

– ansi_color table loading order [#9084](https://github.com/Mudlet/Mudlet/pull/9084)

– crash when keychain operation times out [#9072](https://github.com/Mudlet/Mudlet/pull/9072)

– Updater crash on Windows when download URL is unavailable [#9067](https://github.com/Mudlet/Mudlet/pull/9067)

– Changing one profile's password no longer affects others [#9049](https://github.com/Mudlet/Mudlet/pull/9049)

– custom map events not firing when placed in submenus [#8998](https://github.com/Mudlet/Mudlet/pull/8998)

– [timeframe](https://wiki.mudlet.org/w/Manual:Lua_Functions#timeframe) failing if third arg is nil [#8964](https://github.com/Mudlet/Mudlet/pull/8964)

– PasswordMigrationTest to build [#9032](https://github.com/Mudlet/Mudlet/pull/9032)

– Separate user and MXP borders so [reconnect](https://wiki.mudlet.org/w/Manual:Lua_Functions#reconnect) doesn't reset user borders [#9016](https://github.com/Mudlet/Mudlet/pull/9016)

– Restore password loading from portable file in connection dialog [#8993](https://github.com/Mudlet/Mudlet/pull/8993)

– Clear package list before repopulating in Package Exporter [#8892](https://github.com/Mudlet/Mudlet/pull/8892)

– Input bar height changes unexpectedly when switching profiles [#8958](https://github.com/Mudlet/Mudlet/pull/8958)

– Room symbols not rescaling when map is resized [#8974](https://github.com/Mudlet/Mudlet/pull/8974)

– Prevent crash when closing detached windows [#8934](https://github.com/Mudlet/Mudlet/pull/8934)

– Restore sound playback on macOS [#8949](https://github.com/Mudlet/Mudlet/pull/8949)

– Update ssh IP for Geyser upload workflow [#8995](https://github.com/Mudlet/Mudlet/pull/8995)

– Correct TestMask to exclude internal flags [#8954](https://github.com/Mudlet/Mudlet/pull/8954)

– mudlet does not close after running lua tests [#8979](https://github.com/Mudlet/Mudlet/pull/8979)

– Clang-format hash in .git-blame-ignore-revs [#8882](https://github.com/Mudlet/Mudlet/pull/8882)

– [#6964] [spairs](https://wiki.mudlet.org/w/Manual:Lua_Functions#spairs) chokes on mixed keys [#8868](https://github.com/Mudlet/Mudlet/pull/8868)

– align MSDP negotiation to specs [#8905](https://github.com/Mudlet/Mudlet/pull/8905)

– Crash when removing default MUD profiles from welcome window [#8916](https://github.com/Mudlet/Mudlet/pull/8916)

– MXP not working on some MUDs [#8915](https://github.com/Mudlet/Mudlet/pull/8915)

– clean up comments and related translation things [#8914](https://github.com/Mudlet/Mudlet/pull/8914)

– Command history not working when password masking is disabled [#8902](https://github.com/Mudlet/Mudlet/pull/8902)

– Revert default map format to 20 in PTB / `development` [#8891](https://github.com/Mudlet/Mudlet/pull/8891)

– Make main console default to opaque text background, allow user to customize [#8887](https://github.com/Mudlet/Mudlet/pull/8887)

– Delay MXP TEMP_SECURE mode reset to allow tag handling [#8889](https://github.com/Mudlet/Mudlet/pull/8889)

– PTB crash on some Linux systems due to libxcb-cursor bug [#8866](https://github.com/Mudlet/Mudlet/pull/8866)

– Player shown on far side of map when mapper window is wide [#8869](https://github.com/Mudlet/Mudlet/pull/8869)

– db:_coerce_sheet backwards compatibility [#8861](https://github.com/Mudlet/Mudlet/pull/8861)

– Map labels appearing bold after profile reload [#8865](https://github.com/Mudlet/Mudlet/pull/8865)

– macOS color buttons not showing colors in settings [#8847](https://github.com/Mudlet/Mudlet/pull/8847)

– Make update dialog release notes keyboard accessible [#8849](https://github.com/Mudlet/Mudlet/pull/8849)

– Restore desktop shortcut creation on Windows install [#8841](https://github.com/Mudlet/Mudlet/pull/8841)

– Crash when drawing map labels at small zoom levels [#8836](https://github.com/Mudlet/Mudlet/pull/8836)

– Disable AddressSanitizer for release builds [#8826](https://github.com/Mudlet/Mudlet/pull/8826)

– Remember scroll position and cursor position in script editor [#8410](https://github.com/Mudlet/Mudlet/pull/8410)

– Use custom dark theme on all Windows versions [#8819](https://github.com/Mudlet/Mudlet/pull/8819)

– Map area centering displaying areas off-screen [#8814](https://github.com/Mudlet/Mudlet/pull/8814)

– Crash when nested alias/trigger processing runs cleanup prematurely [#8818](https://github.com/Mudlet/Mudlet/pull/8818)

– table.update no longer errors when replacing non-table with table [#8694](https://github.com/Mudlet/Mudlet/pull/8694) [#8751](https://github.com/Mudlet/Mudlet/pull/8751)

– Editor actions not working on initial open [#7482](https://github.com/Mudlet/Mudlet/pull/7482) [#8753](https://github.com/Mudlet/Mudlet/pull/8753)

– Revert map rendering optimization causing issues [#8809](https://github.com/Mudlet/Mudlet/pull/8809)

– Medievia encoding showing error in preferences dropdown [#8811](https://github.com/Mudlet/Mudlet/pull/8811)

– MXP FRAME close tags appearing as literal text [#8808](https://github.com/Mudlet/Mudlet/pull/8808)

– Timer groups [display](https://wiki.mudlet.org/w/Manual:Lua_Functions#display) correct icons when drag-dropped [#8802](https://github.com/Mudlet/Mudlet/pull/8802)

– Map labels appear crisp at all zoom levels [#8795](https://github.com/Mudlet/Mudlet/pull/8795)

– honor 'disable automatic updates' setting when installer is already downloaded [#8409](https://github.com/Mudlet/Mudlet/pull/8409)

– OSC sequences with BEL terminator no longer swallow output [#3912](https://github.com/Mudlet/Mudlet/pull/3912) [#8750](https://github.com/Mudlet/Mudlet/pull/8750)

– Windows crash when saving profile config [#8427](https://github.com/Mudlet/Mudlet/pull/8427) [#8428](https://github.com/Mudlet/Mudlet/pull/8428)

– Big5 and East Asian text encodings not working on Linux [#8787](https://github.com/Mudlet/Mudlet/pull/8787)

– compile in latest development due to map update changes [#8800](https://github.com/Mudlet/Mudlet/pull/8800)

– Improve error handling in [setLabelStyleSheet](https://wiki.mudlet.org/w/Manual:Lua_Functions#setLabelStyleSheet)() [#8446](https://github.com/Mudlet/Mudlet/pull/8446)

– Add outline to area exit arrows for visibility on matching backgrounds [#8794](https://github.com/Mudlet/Mudlet/pull/8794)

– mapper not reopenable after closing via X button [#8401](https://github.com/Mudlet/Mudlet/pull/8401)

– Disable 'Activate' button in Variables view [#8441](https://github.com/Mudlet/Mudlet/pull/8441)

– Prevent crash in MXP watchdog callback [#8785](https://github.com/Mudlet/Mudlet/pull/8785)

– Memory leaks in ScriptUnit and ActionUnit (8,856 bytes) when opening/closing profile [#8781](https://github.com/Mudlet/Mudlet/pull/8781)

– Potential crash during automatic update download [#8776](https://github.com/Mudlet/Mudlet/pull/8776)

– Include full version in Sentry crash reports for PTB builds [#8779](https://github.com/Mudlet/Mudlet/pull/8779)

– Improve build documentation clarity for terminal execution [#8774](https://github.com/Mudlet/Mudlet/pull/8774)

– Regex triggers now respect 'keep' background color setting [#8402](https://github.com/Mudlet/Mudlet/pull/8402)

– Remove unnecessary allocation in filter trigger matching [#8763](https://github.com/Mudlet/Mudlet/pull/8763)

– default new profiles to UTF-8 encoding instead of ASCII [#8759](https://github.com/Mudlet/Mudlet/pull/8759)

– Accessibility crash with out-of-range offset [#8310](https://github.com/Mudlet/Mudlet/pull/8310) [#8752](https://github.com/Mudlet/Mudlet/pull/8752)

– named captures indexed incorrectly in multimatches with special line types [#8748](https://github.com/Mudlet/Mudlet/pull/8748)

– Update trigger icons immediately when dragging in editor [#8746](https://github.com/Mudlet/Mudlet/pull/8746)

– connections to MMapper [#8730](https://github.com/Mudlet/Mudlet/pull/8730)

– prevent module autosave from overwriting failed-to-load modules [#8696](https://github.com/Mudlet/Mudlet/pull/8696)

– GMCP media finish parameter not working [#8740](https://github.com/Mudlet/Mudlet/pull/8740)

– Modules not loading when reopening a profile [#8739](https://github.com/Mudlet/Mudlet/pull/8739)

– Package Exporter unable to export packages [#8629](https://github.com/Mudlet/Mudlet/pull/8629) [#8630](https://github.com/Mudlet/Mudlet/pull/8630)

– Memory leaks in core components [#8716](https://github.com/Mudlet/Mudlet/pull/8716)

– Windows installer failing after update [#8710](https://github.com/Mudlet/Mudlet/pull/8710)

– Down arrow saves typed text before clearing [#8705](https://github.com/Mudlet/Mudlet/pull/8705)

– Restore Windows application icon [#8703](https://github.com/Mudlet/Mudlet/pull/8703)

– set enableMXP when MXP is autodetected [#8701](https://github.com/Mudlet/Mudlet/pull/8701)

– 8 CodeQL 'comparison result is always the same' warnings [#8691](https://github.com/Mudlet/Mudlet/pull/8691)

– CodeQL inconsistent nullness check errors in temp trigger functions [#8690](https://github.com/Mudlet/Mudlet/pull/8690)

– restrict MXP auto-detection to ESC sequences only [#8692](https://github.com/Mudlet/Mudlet/pull/8692)

– Windows Start Menu shortcut missing after install [#8686](https://github.com/Mudlet/Mudlet/pull/8686)

– Use fixed delay instead of waiting for crashpad [#8679](https://github.com/Mudlet/Mudlet/pull/8679)

– Windows updates failing due to locked folder [#8678](https://github.com/Mudlet/Mudlet/pull/8678)

– Wait for crashpad_handler.exe to exit before running installer [#8676](https://github.com/Mudlet/Mudlet/pull/8676)

– [copy](https://wiki.mudlet.org/w/Manual:Lua_Functions#copy) downloaded installer instead of moving file on Windows [#8675](https://github.com/Mudlet/Mudlet/pull/8675)

– Create shortcuts when handling Squirrel install events [#8672](https://github.com/Mudlet/Mudlet/pull/8672)

– Wait for Mudlet to exit before running installer on Windows [#8673](https://github.com/Mudlet/Mudlet/pull/8673)

– Handle Squirrel installer startup commands on Windows to prevent Mudlet getting closed [#8666](https://github.com/Mudlet/Mudlet/pull/8666)

– Prevent crashpad_handler from getting a Windows Start Menu entry [#8659](https://github.com/Mudlet/Mudlet/pull/8659)

– Windows updater file lock issue in dblsqd (prevented updates) [#8661](https://github.com/Mudlet/Mudlet/pull/8661)

– Windows updater launch using batch file to avoid quoting issues when updating PTBs [#8663](https://github.com/Mudlet/Mudlet/pull/8663)

– Mudlet freeze when receiving large amounts of data [#8644](https://github.com/Mudlet/Mudlet/pull/8644)

– Container overflow crash when processing text [#8647](https://github.com/Mudlet/Mudlet/pull/8647)

– Build failures after dependency updates [#8645](https://github.com/Mudlet/Mudlet/pull/8645)

– package manager loses title on uninstall [#8625](https://github.com/Mudlet/Mudlet/pull/8625)

– Windows updater deleting itself during update [#8622](https://github.com/Mudlet/Mudlet/pull/8622)

– crash in bi-daily update check [#8620](https://github.com/Mudlet/Mudlet/pull/8620)

– crash in bi-daily update check

– clicking on stacked rooms selects all of them [#8616](https://github.com/Mudlet/Mudlet/pull/8616)

– use-after-free crash when calling [registerMapInfo](https://wiki.mudlet.org/w/Manual:Lua_Functions#registerMapInfo) [#8609](https://github.com/Mudlet/Mudlet/pull/8609)

– Prevent crash during Mudlet shutdown when closing profiles [#8606](https://github.com/Mudlet/Mudlet/pull/8606)

– Forward secrets.SENTRY_DSN to CMake on Windows [#8615](https://github.com/Mudlet/Mudlet/pull/8615)

– Static fonts configured in 4.19.1 continue working after upgrade [#8545](https://github.com/Mudlet/Mudlet/pull/8545)

– convert raw Qt pointers to QPointer to prevent use-after-free [#8610](https://github.com/Mudlet/Mudlet/pull/8610)

– maintain backwards compatibility when loading rex_pcre2 [#8599](https://github.com/Mudlet/Mudlet/pull/8599)

– missing encodings in dropdown for Qt6 [#8605](https://github.com/Mudlet/Mudlet/pull/8605)

– Medievia encoding error in preferences dropdown [#8608](https://github.com/Mudlet/Mudlet/pull/8608)

– load PCRE2 in LuaGlobal [#8598](https://github.com/Mudlet/Mudlet/pull/8598)

– fix inconsistent nullness checks [#8586](https://github.com/Mudlet/Mudlet/pull/8586)

– Test builds now use keychain for password storage [#8589](https://github.com/Mudlet/Mudlet/pull/8589)

– Heap-use-after-free crash when closing profiles with active triggers [#8567](https://github.com/Mudlet/Mudlet/pull/8567)

– heap-use-after-free when cleanup runs during alias/trigger/key processing [#8571](https://github.com/Mudlet/Mudlet/pull/8571)

– potential issue in area image export [#8585](https://github.com/Mudlet/Mudlet/pull/8585)

– Restore Qt5 Core5Compat for third-party dependencies [#8578](https://github.com/Mudlet/Mudlet/pull/8578)

– Reduce redundant UTF-8 conversions in trigger processing [#8560](https://github.com/Mudlet/Mudlet/pull/8560)

– Improve performance of hyperlink style parsing [#8558](https://github.com/Mudlet/Mudlet/pull/8558)

– Remove duplicate context menu on AdjustableContainer title bar [#8569](https://github.com/Mudlet/Mudlet/pull/8569)

– Copy from console now works when command line has focus [#8551](https://github.com/Mudlet/Mudlet/pull/8551)

– Remove deprecated Qt5 Core5Compat dependency [#8550](https://github.com/Mudlet/Mudlet/pull/8550)

– crash when rapidly reloading plugins due to thread-safety issue in XML export [#8542](https://github.com/Mudlet/Mudlet/pull/8542)

– switch to FFMPEG audio backend on Windows to allow playback of .ogg and .opus audio files [#8329](https://github.com/Mudlet/Mudlet/pull/8329)

– Debug console crash when host is deleted [#8549](https://github.com/Mudlet/Mudlet/pull/8549)

– Special exit text unreadable when editing [#8543](https://github.com/Mudlet/Mudlet/pull/8543)

– Comprehensive package installation crash prevention [#8541](https://github.com/Mudlet/Mudlet/pull/8541)

– Auto-activate new triggers/aliases/scripts/keys on save [#8529](https://github.com/Mudlet/Mudlet/pull/8529)

– Unicode characters [display](https://wiki.mudlet.org/w/Manual:Lua_Functions#display) correctly in unhandled MXP tags [#8532](https://github.com/Mudlet/Mudlet/pull/8532)

##### Infrastructure:
– Swap out QtConcurrent module header for sub-module ones [#9246](https://github.com/Mudlet/Mudlet/pull/9246)

– update CONTRIBUTING.md with AI coding guidelines [#9224](https://github.com/Mudlet/Mudlet/pull/9224)

– Bump lukka/get-cmake from 4.3.1 to 4.3.2 [#9221](https://github.com/Mudlet/Mudlet/pull/9221)

– Bump leafo/gh-actions-lua from 12 to 13 [#9222](https://github.com/Mudlet/Mudlet/pull/9222)

– Bump 3rdparty/sentry-native from `848fd4c` to `87f25f2` [#9220](https://github.com/Mudlet/Mudlet/pull/9220)

– apply clang-format style to tests too [#9201](https://github.com/Mudlet/Mudlet/pull/9201)

– Bump 3rdparty/sentry-native from `93c4e32` to `848fd4c` [#9202](https://github.com/Mudlet/Mudlet/pull/9202)

– Bump carlosperate/download-file-action from 2.0.2 to 2.0.3 [#9203](https://github.com/Mudlet/Mudlet/pull/9203)

– fix flaky TelnetTextDisplayedTest in CI [#9193](https://github.com/Mudlet/Mudlet/pull/9193)

– fix partial PTB releases not triggering when push build [exists](https://wiki.mudlet.org/w/Manual:Lua_Functions#exists) at same SHA [#9192](https://github.com/Mudlet/Mudlet/pull/9192)

– fix Windows SHA256 missing from PTB releases [#9191](https://github.com/Mudlet/Mudlet/pull/9191)

– allow partial PTB releases when not all platforms succeed [#9163](https://github.com/Mudlet/Mudlet/pull/9163)

– migrate undo/redo tests to QTest framework [#8867](https://github.com/Mudlet/Mudlet/pull/8867)

– stop deleting and recreating GitHub releases on every build [#9176](https://github.com/Mudlet/Mudlet/pull/9176)

– skip duplicate PTB builds when no new commits exist [#9175](https://github.com/Mudlet/Mudlet/pull/9175)

– sync edbee-lib submodule to fork master [#9183](https://github.com/Mudlet/Mudlet/pull/9183)

– Bump actions/download-artifact from 4 to 8 [#9179](https://github.com/Mudlet/Mudlet/pull/9179)

– Bump actions/github-script from 7 to 9 [#9181](https://github.com/Mudlet/Mudlet/pull/9181)

– Bump 3rdparty/sentry-native from `6ebd29b` to `93c4e32` [#9178](https://github.com/Mudlet/Mudlet/pull/9178)

– fix Windows and macOS nightly build failures [#9173](https://github.com/Mudlet/Mudlet/pull/9173)

– add missing statuses:write permission to DangerJS workflow [#9172](https://github.com/Mudlet/Mudlet/pull/9172)

– fix DangerJS workflow vulnerability to malicious PRs [#9143](https://github.com/Mudlet/Mudlet/pull/9143)

– add non-compileable files to CMake project file [#8780](https://github.com/Mudlet/Mudlet/pull/8780)

– update sentry-native to 0.13.5 [#9158](https://github.com/Mudlet/Mudlet/pull/9158)

– update edbee-lib submodule & use system oniguruma if present [#9156](https://github.com/Mudlet/Mudlet/pull/9156)

– fix PTB registration by reverting installer filename convention [#9155](https://github.com/Mudlet/Mudlet/pull/9155)

– show changelogs both from last release and last PTB [#9151](https://github.com/Mudlet/Mudlet/pull/9151)

– fix CI bugs in PTB registration, macOS updater linking, and portable ZIP upload [#9154](https://github.com/Mudlet/Mudlet/pull/9154)

– fix Windows release asset upload and appcast SCP paths [#9152](https://github.com/Mudlet/Mudlet/pull/9152)

– fix Windows PTB registration failing after installer rename [#9150](https://github.com/Mudlet/Mudlet/pull/9150)

– release workflow failing due to PR build triggers and checkout wiping assets [#9145](https://github.com/Mudlet/Mudlet/pull/9145)

– add CI workflow to create GitHub Releases for updater [#9127](https://github.com/Mudlet/Mudlet/pull/9127)

– Update text for translation in Crowdin [#9136](https://github.com/Mudlet/Mudlet/pull/9136)

– Bump lukka/get-cmake from 4.3.0 to 4.3.1 [#9139](https://github.com/Mudlet/Mudlet/pull/9139)

– Add comprehensive variable editor tests [#9103](https://github.com/Mudlet/Mudlet/pull/9103)

– add comprehensive [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() test suite [#9082](https://github.com/Mudlet/Mudlet/pull/9082)

– add cross-reference comments to duplicate build workflows [#9069](https://github.com/Mudlet/Mudlet/pull/9069)

– remove disabled clang-tidy workflows [#9113](https://github.com/Mudlet/Mudlet/pull/9113)

– Bump 3rdparty/qtkeychain from `6e90eda` to `53a8e6a` [#9126](https://github.com/Mudlet/Mudlet/pull/9126)

– Update text for translation in Crowdin [#9124](https://github.com/Mudlet/Mudlet/pull/9124)

– speed up OSC tests with data-driven approach [#9120](https://github.com/Mudlet/Mudlet/pull/9120)

– Add Copilot skill for opening pull requests [#9105](https://github.com/Mudlet/Mudlet/pull/9105)

– Bump 3rdparty/qtkeychain from `844beb4` to `6e90eda` [#8973](https://github.com/Mudlet/Mudlet/pull/8973)

– Update text for translation in Crowdin [#9077](https://github.com/Mudlet/Mudlet/pull/9077)

– disable CodeQL poorly-documented-function query [#9079](https://github.com/Mudlet/Mudlet/pull/9079)

– Bump webfactory/ssh-agent from 0.9.1 to 0.10.0 [#9047](https://github.com/Mudlet/Mudlet/pull/9047)

– restore xcb-util-cursor resiliency changes [#9074](https://github.com/Mudlet/Mudlet/pull/9074)

– Bump lukka/get-cmake from 4.2.3 to 4.3.0 [#9087](https://github.com/Mudlet/Mudlet/pull/9087)

– Fix macOS CI: use AppleClang instead of Homebrew LLVM [#9078](https://github.com/Mudlet/Mudlet/pull/9078)

– remove leftover qgridlayout ordering script [#9075](https://github.com/Mudlet/Mudlet/pull/9075)

– enable set -e in Linux CI deploy script to catch failures [#9059](https://github.com/Mudlet/Mudlet/pull/9059)

– install `libspeechd-dev` for Linux CI to fix AppImage creation [#9058](https://github.com/Mudlet/Mudlet/pull/9058)

– Migrate to clang64 msys2 environment for Windows builds [#9064](https://github.com/Mudlet/Mudlet/pull/9064)

– remove ccache mutex locks [#9043](https://github.com/Mudlet/Mudlet/pull/9043)

– add retries to brew install to handle hangs [#9045](https://github.com/Mudlet/Mudlet/pull/9045)

– remove CodeQL CI's concurrency [#9044](https://github.com/Mudlet/Mudlet/pull/9044)

– Fix windows builds in `development` [#9042](https://github.com/Mudlet/Mudlet/pull/9042)

– Bump development version to 4.20.1 [#9050](https://github.com/Mudlet/Mudlet/pull/9050)

– Update text for translation in Crowdin [#9040](https://github.com/Mudlet/Mudlet/pull/9040)

– remove qgridlayout ordering workflow [#9038](https://github.com/Mudlet/Mudlet/pull/9038)

– Update autocompletion data in Mudlet [#9041](https://github.com/Mudlet/Mudlet/pull/9041)

– update target path for file upload in geyser-docs workflow [#9030](https://github.com/Mudlet/Mudlet/pull/9030)

– Change SCP target host for file uploads [#9003](https://github.com/Mudlet/Mudlet/pull/9003)

– Dedicated workflow for prs [#9033](https://github.com/Mudlet/Mudlet/pull/9033)

– Remove unnecessary null checks after new [#9014](https://github.com/Mudlet/Mudlet/pull/9014)

– speed up compilation of Mudlet by 25% [#9021](https://github.com/Mudlet/Mudlet/pull/9021)

– Enable TTS in macOS builds [#8921](https://github.com/Mudlet/Mudlet/pull/8921)

– make xcb-util-cursor download more resilient [#9012](https://github.com/Mudlet/Mudlet/pull/9012)

– re-introduce path stripping in geyser-docs.yaml [#9023](https://github.com/Mudlet/Mudlet/pull/9023)

– ccache key should be per pr/branch [#9010](https://github.com/Mudlet/Mudlet/pull/9010)

– use release-signing for releases, test-signing for PTBs [#9007](https://github.com/Mudlet/Mudlet/pull/9007)

– always run build ci in core branches [#9008](https://github.com/Mudlet/Mudlet/pull/9008)

– Update text for translation in Crowdin [#9009](https://github.com/Mudlet/Mudlet/pull/9009)

– increase SignPath signing timeout to 1 hour [#9002](https://github.com/Mudlet/Mudlet/pull/9002)

– Refactor geyser doc upload workflow [#9001](https://github.com/Mudlet/Mudlet/pull/9001)

– run undo/redo tests in test mode [#8992](https://github.com/Mudlet/Mudlet/pull/8992)

– fix unintended ccache collisions [#8991](https://github.com/Mudlet/Mudlet/pull/8991)

– Bump actions/upload-artifact from 6 to 7 [#8989](https://github.com/Mudlet/Mudlet/pull/8989)

– CI concurrency logic [#8990](https://github.com/Mudlet/Mudlet/pull/8990)

– Bump ZedThree/clang-tidy-review from 0.23.0 to 0.23.1 [#8988](https://github.com/Mudlet/Mudlet/pull/8988)

– Update text for translation in Crowdin [#8940](https://github.com/Mudlet/Mudlet/pull/8940)

– [ImgBot] Optimize images [#8925](https://github.com/Mudlet/Mudlet/pull/8925)

– Bump development version to 4.20.0 [#8919](https://github.com/Mudlet/Mudlet/pull/8919)

– Bump 3rdparty/sentry-native from `c80e793` to `383ccad` [#8913](https://github.com/Mudlet/Mudlet/pull/8913)

– Add SignPath Foundation attribution to README [#8895](https://github.com/Mudlet/Mudlet/pull/8895)

– Update autocompletion data in Mudlet [#8903](https://github.com/Mudlet/Mudlet/pull/8903)

– Update text for translation in Crowdin [#8901](https://github.com/Mudlet/Mudlet/pull/8901)

– use pcre2grep in CI validation [#8878](https://github.com/Mudlet/Mudlet/pull/8878)

– set next-next release to be 4.21.0 [#8883](https://github.com/Mudlet/Mudlet/pull/8883)

– disable signing MudletCrashReporter.exe temporarily [#8880](https://github.com/Mudlet/Mudlet/pull/8880)

– add qtkeychain-qt6-dev to Linux workflows [#8876](https://github.com/Mudlet/Mudlet/pull/8876)

– switch qtkeychain submodule to upstream [#8870](https://github.com/Mudlet/Mudlet/pull/8870)

– detect Lua test failures on macOS CI [#8852](https://github.com/Mudlet/Mudlet/pull/8852)

– Remove x64 from Windows PTB desktop shortcut name [#8845](https://github.com/Mudlet/Mudlet/pull/8845)

– Bump lukka/get-cmake from 4.2.2 to 4.2.3 [#8844](https://github.com/Mudlet/Mudlet/pull/8844)

– Bump 3rdparty/sentry-native from `08b1374` to `c80e793` [#8843](https://github.com/Mudlet/Mudlet/pull/8843)

– Update text for translation in Crowdin [#8839](https://github.com/Mudlet/Mudlet/pull/8839)

– Fix SignPath code signing policy configuration [#8834](https://github.com/Mudlet/Mudlet/pull/8834)

– Revert uploading debug symbols to Sentry for PR builds [#8832](https://github.com/Mudlet/Mudlet/pull/8832)

– Fix Windows code signing by adding SignPath v2 policy file [#8831](https://github.com/Mudlet/Mudlet/pull/8831)

– Upload debug symbols to Sentry for PR builds [#8830](https://github.com/Mudlet/Mudlet/pull/8830)

– Remove unused QKeychain forward declarations from CredentialManager.h [#8829](https://github.com/Mudlet/Mudlet/pull/8829)

– Remove dead CMake code in Sentry configuration [#8828](https://github.com/Mudlet/Mudlet/pull/8828)

– Bump lukka/get-cmake from 3.30.3 to 4.2.2 [#8822](https://github.com/Mudlet/Mudlet/pull/8822)

– Bump actions/upload-artifact from 4 to 6 [#8823](https://github.com/Mudlet/Mudlet/pull/8823)

– Bump actions/cache from 4 to 5 [#8821](https://github.com/Mudlet/Mudlet/pull/8821)

– Bump 3rdparty/sentry-native from `bbccfad` to `08b1374` [#8820](https://github.com/Mudlet/Mudlet/pull/8820)

– Cache sentry-native builds in CI [#8807](https://github.com/Mudlet/Mudlet/pull/8807)

– Add .git-blame-ignore-revs for formatting commits [#8805](https://github.com/Mudlet/Mudlet/pull/8805)

– Update text for translation in Crowdin [#8816](https://github.com/Mudlet/Mudlet/pull/8816)

– update plural american english translations [#8478](https://github.com/Mudlet/Mudlet/pull/8478)

– add clang-format instructions to AI guidelines [#8806](https://github.com/Mudlet/Mudlet/pull/8806)

– Apply clang-format to all CPP files [#8804](https://github.com/Mudlet/Mudlet/pull/8804)

– Add SignPath code signing for Windows builds [#8786](https://github.com/Mudlet/Mudlet/pull/8786)

– update clang-format style to match Mudlets as much as possible [#8380](https://github.com/Mudlet/Mudlet/pull/8380)

– Enable Qt breadcrumbs in Sentry crash reports [#8791](https://github.com/Mudlet/Mudlet/pull/8791)

– Fix Windows nightly build failure when no new commits [#8790](https://github.com/Mudlet/Mudlet/pull/8790)

– Bump 3rdparty/sentry-native from `11832e4` to `bbccfad` [#8792](https://github.com/Mudlet/Mudlet/pull/8792)

– upload Qt module debug symbols to Sentry using cv2pdb [#8782](https://github.com/Mudlet/Mudlet/pull/8782)

– Update autocompletion data in Mudlet [#8789](https://github.com/Mudlet/Mudlet/pull/8789)

– Update text for translation in Crowdin [#8788](https://github.com/Mudlet/Mudlet/pull/8788)

– Upload Qt debug symbols to Sentry for better crash reports [#8777](https://github.com/Mudlet/Mudlet/pull/8777)

– Remove Azure trusted signing from Windows builds [#8778](https://github.com/Mudlet/Mudlet/pull/8778)

– Bump 3rdparty/edbee-lib from `cf7f0ba` to `7e7c0f6` [#8770](https://github.com/Mudlet/Mudlet/pull/8770)

– Bump 3rdparty/sentry-native from `4f983bb` to `11832e4` [#8771](https://github.com/Mudlet/Mudlet/pull/8771)

– remove `travis.` [prefix](https://wiki.mudlet.org/w/Manual:Lua_Functions#prefix) from CI files [#8375](https://github.com/Mudlet/Mudlet/pull/8375)

– Update autocompletion data in Mudlet [#8769](https://github.com/Mudlet/Mudlet/pull/8769)

– Update text for translation in Crowdin [#8767](https://github.com/Mudlet/Mudlet/pull/8767)

– Update bundled mpkg.mpackage to latest upstream [#8768](https://github.com/Mudlet/Mudlet/pull/8768)

– reduce Mudlet build times by 30s [#8403](https://github.com/Mudlet/Mudlet/pull/8403)

– Add Claude Code slash command for creating PRs [#8761](https://github.com/Mudlet/Mudlet/pull/8761)

– Guard undo/redo debug messages behind compile flag [#8760](https://github.com/Mudlet/Mudlet/pull/8760)

– Simplify profile loading code [#8756](https://github.com/Mudlet/Mudlet/pull/8756)

– Improve code readability with cleaner empty checks [#8755](https://github.com/Mudlet/Mudlet/pull/8755)

– Reduce noise in automated code review comments [#8754](https://github.com/Mudlet/Mudlet/pull/8754)

– simplify CI 3rd party update workflow [#8737](https://github.com/Mudlet/Mudlet/pull/8737)

– improve safety of internal text handling [#8724](https://github.com/Mudlet/Mudlet/pull/8724)

– uppercase settings key in config [#8246](https://github.com/Mudlet/Mudlet/pull/8246)

– Simplify build system by removing unused QMake files [#8731](https://github.com/Mudlet/Mudlet/pull/8731)

– modernize loop syntax across codebase [#8733](https://github.com/Mudlet/Mudlet/pull/8733)

– simplify cmake build configuration [#8732](https://github.com/Mudlet/Mudlet/pull/8732)

– simplify network connection handling [#8735](https://github.com/Mudlet/Mudlet/pull/8735)

– Add a security policy for reporting vulnerabilities [#8723](https://github.com/Mudlet/Mudlet/pull/8723)

– Update text for translation in Crowdin [#8728](https://github.com/Mudlet/Mudlet/pull/8728)

– Update autocompletion data in Mudlet [#8729](https://github.com/Mudlet/Mudlet/pull/8729)

– revise displayed Copyright year to 2026 [#8727](https://github.com/Mudlet/Mudlet/pull/8727)

– eliminate remains of qt-ordered-map from Mudlet [#8720](https://github.com/Mudlet/Mudlet/pull/8720)

– Clarify CI build option label [#8714](https://github.com/Mudlet/Mudlet/pull/8714)

– allow CMake `initGitSubmodule.cmake` to act recursively [#8717](https://github.com/Mudlet/Mudlet/pull/8717)

– run memory leak checks as part of CI pipeline [#8316](https://github.com/Mudlet/Mudlet/pull/8316)

– remove debug logging from undo/redo feature [#8713](https://github.com/Mudlet/Mudlet/pull/8713)

– Update text for translation in Crowdin [#8698](https://github.com/Mudlet/Mudlet/pull/8698)

– check for sentry-native submodule when Sentry enabled [#8669](https://github.com/Mudlet/Mudlet/pull/8669)

– address feedback in event handling from no-op operations [#8667](https://github.com/Mudlet/Mudlet/pull/8667)

– Add telnet processing speed benchmark [#8658](https://github.com/Mudlet/Mudlet/pull/8658)

– Replace foreach with C++17 structured bindings [#8664](https://github.com/Mudlet/Mudlet/pull/8664)

– Add ccache stats to Windows build workflow [#8671](https://github.com/Mudlet/Mudlet/pull/8671)

– Fix Windows PTB rebuild versioning for Squirrel [#8670](https://github.com/Mudlet/Mudlet/pull/8670)

– allow Windows PTB builds to be re-done on the same day [#8668](https://github.com/Mudlet/Mudlet/pull/8668)

– fix crashes in undo/redo tests [#8665](https://github.com/Mudlet/Mudlet/pull/8665)

– add proper Qt event propagation in all events [#8444](https://github.com/Mudlet/Mudlet/pull/8444)

– Bump actions/upload-artifact from 5 to 6 [#8657](https://github.com/Mudlet/Mudlet/pull/8657)

– Ignore lcf submodule in Dependabot, remove vcpkg [#8654](https://github.com/Mudlet/Mudlet/pull/8654)

– Bump ZedThree/clang-tidy-review from 0.22.2 to 0.22.3 [#8656](https://github.com/Mudlet/Mudlet/pull/8656)

– Update Lua code formatter to latest upstream branch [#8653](https://github.com/Mudlet/Mudlet/pull/8653)

– Bump 3rdparty/sentry-native from `67a9f8e` to `4f983bb` [#8637](https://github.com/Mudlet/Mudlet/pull/8637)

– Bump peter-evans/create-pull-request from 7 to 8 [#8638](https://github.com/Mudlet/Mudlet/pull/8638)

– Bump 3rdparty/lcf from `4aa2502` to `55aaf85` [#8639](https://github.com/Mudlet/Mudlet/pull/8639)

– Bump actions/cache from 4 to 5 [#8636](https://github.com/Mudlet/Mudlet/pull/8636)

– Update autocompletion data in Mudlet [#8634](https://github.com/Mudlet/Mudlet/pull/8634)

– Update text for translation in Crowdin [#8633](https://github.com/Mudlet/Mudlet/pull/8633)

– SENTRY_AUTH_TOKEN diagnostic checks environment variable [#8618](https://github.com/Mudlet/Mudlet/pull/8618)

– Bump 3rdparty/sentry-native from `c5416e6` to `67a9f8e` [#8617](https://github.com/Mudlet/Mudlet/pull/8617)

– Update text for translation in Crowdin [#8613](https://github.com/Mudlet/Mudlet/pull/8613)

– add workaround clang-tidy-review directory bug [#8597](https://github.com/Mudlet/Mudlet/pull/8597)

– update communi to qt6 [#8584](https://github.com/Mudlet/Mudlet/pull/8584)

– more fixes to clang-tidy workflow [#8596](https://github.com/Mudlet/Mudlet/pull/8596)

– fix clang-tidy workflow [#8595](https://github.com/Mudlet/Mudlet/pull/8595)

– update Qtkeychain submodule from master to main branch [#8579](https://github.com/Mudlet/Mudlet/pull/8579)

– Bump ZedThree/clang-tidy-review from 0.22.1 to 0.22.2 [#8594](https://github.com/Mudlet/Mudlet/pull/8594)

– ignore macOS keychain for telnet functional test [#8592](https://github.com/Mudlet/Mudlet/pull/8592)

– complete devcontainer setup [#8587](https://github.com/Mudlet/Mudlet/pull/8587)

– Update text for translation in Crowdin [#8590](https://github.com/Mudlet/Mudlet/pull/8590)

– remove item check in saveSelectedItem [#8583](https://github.com/Mudlet/Mudlet/pull/8583)

– Remove else-after-return anti-pattern [#8575](https://github.com/Mudlet/Mudlet/pull/8575)

– update devcontainer to work [#8321](https://github.com/Mudlet/Mudlet/pull/8321)

– Bump ZedThree/clang-tidy-review from 0.22.0 to 0.22.1 [#8564](https://github.com/Mudlet/Mudlet/pull/8564)

– Bump actions/checkout from 5 to 6 [#8565](https://github.com/Mudlet/Mudlet/pull/8565)

– Bump 3rdparty/edbee-lib from `165edc0` to `cf7f0ba` [#8563](https://github.com/Mudlet/Mudlet/pull/8563)

– Update text for translation in Crowdin [#8561](https://github.com/Mudlet/Mudlet/pull/8561)

– Update AI instructions with comments and git guidelines [#8531](https://github.com/Mudlet/Mudlet/pull/8531)

– Fix CMake CMP0167 warning for Boost [#8538](https://github.com/Mudlet/Mudlet/pull/8538)

– Add NINJA_STATUS to Windows build [#8539](https://github.com/Mudlet/Mudlet/pull/8539)

– update Noto Color Emoji font to Unicode 17.0 v2.051 [#8535](https://github.com/Mudlet/Mudlet/pull/8535)

– Add regex busted tests for PCRE library [#8537](https://github.com/Mudlet/Mudlet/pull/8537)

##### Other:
– Revert "Add per-room border color and thickness"

– Revert "Fix crash in bi-daily update check"

read more

Public Test Build

Added:
– smart command suggestions in the tutorial for new players #9188
– lpeg parsing library #9212
– Pkuxkx as a predefined default MUD #9161
– Mudlet.ini option to control high DPI scale factor rounding policy #9164
– right-click option to hide default profiles in connection dialog #9123
– selectAll function with optional window support #9166
– telnets:// link support for secure TLS connections #9153
– getKeyCode function to return key code and any modifiers of a key-binding #8435
– telnet:// URI scheme support for one-click MUD connections #8601
– separate border size control and player room marker improvements #8975
– OSC 8 context menu title support #8910
– DragonfireMUD and VoidMUD #8783
– 3rd party definition files for Lua #8966
– Starmourn and update IRE game profiles #9076
– embeddable TextEdit widget (Geyser.TextEdit) #8986
– MudMaster Chat Protocol (MMCP) #7765
– blinking/flashing text support #8983
– timeout for (Linux) Build xcb-util-cursor #8978
– timeout for macos (Install Dependencies) #8977
– data loss guard on constraint migration #8850
– GNOME Software-style navigation in Package Manager #8846
– room description matching to generic mapper #8649
– hidden rooms #8443
– Multi-file selection in import dialogs #8796
– Map label support in 3D mapper #8793
– multiple note tabs to the notepad #8757
– multiple map views support #8743
– muteMediaScript and muteMediaGame options to getConfig/setConfig #8764
– "Whole word" search option in the script editor #8722
– per-room border color and thickness #8758
– more safeguards against profile settings being lost #8742
– permExactMatchTrigger Lua API function #8745
– per-room border color and thickness
– NAWS protocol toggle setting #8700
– getBorderColor() Lua API function #8688
– MXP FRAME and DEST tag support for multi-window layouts #8577
– Optional static analysis during build #8708
– OSC 8 hyperlink visibility, selection, and compact syntax enhancements #8677
– Sentry license to about dialog #8660
– undo/redo for Mudlet editor #8469
– getRoomsByPosition1() function #8619
– functional GUI tests using QTest #8572
– Enable spellcheck in the composer window #8447
– setExitWeightFilter function to alter room/exits weights/locks #8487
Improved:
– show telnet protocol negotiation status in Statistics #9226
– read tooltips aloud without HTML tags in profile preferences #9228
– ARIA accessibility for OSC 8 hyperlinks in caret mode #9206
– inline map download dialog #9204
– 2D mapper rendering speed on single-Z-level areas #9209
– simplify long tooltips #8416
– Make spacing between widgets in the connection dialog more consistent #9198
– Auto-switch code editor theme with app appearance #9167
– handling of rooms having their hidden property changed #8947
– guard mudlet::self() in cTelnet destructor #9020
– use raw IP address if provided with one #9066
– Give players full control over Discord Rich Presence #9116
– show version scope in PTB release changelogs #9148
– hidden rooms – allow storage in map versions < 22 and other things #8930
– change label highlight from overlay to outline #9132
– internal code in regards to memory use #9015
– saving a key with no binding set shows an error #9114
– Add smooth pulsing effect for blinking text #9104
– remove AI/llamafile integration #9108
– error message when saving MMP-downloaded map #9107
– Automatic audio device switching support #9026
– only mark map as dirty if room hidden status is changed #8946
– Reduce memory usage for text decorations #9052
– Remove debug print from deleteAll function #9061
– add defensive coding to internal code related to the TMediaPlayer #9017
– Script Editor search code quality and maintainability #9028
– Code quality in TBuffer.cpp #9029
– show feedback when manually checking for updates fails #9004
– add better error reporting to GMCP merge handler #9018
– adjust getTime() table size hint to match 7 entries #9019
– Don’t echo OSC 8 send: hyperlink commands by default #8957
– Detection of character-at-a-time mode in server connections #8825
– Add more context to media playback events #8953
– luarocks busted install instructions version flag #8950
– Add macOS clang-format path to AI instructions #8926
– Make MNES and NEW-ENVIRON mutually exclusive in UI #8893
– update Astaria banner #8900
– New Crowdin updates #8253
– macOS build instructions use absolute path #8860
– nixed rex_prce2 check in lua #8848
– Faster map rendering when zoomed in by skipping off-screen rooms #8797
– Allow nil to clear label callbacks #8799
– keep small map areas fully visible in viewport #8766
– Enable PCRE2 JIT compilation for triggers and aliases #8762
– open IRC with Lua functions not via UI anymore #8123
– Auto-link Lua function names in changelog #8744
– add error handling with clear error messages #8736
– error message visibility in module creation dialog #8738
– Memory management for console hyperlinks #8725
– AI assistant guidance for modern C++ loops #8741
– error messages for easier troubleshooting #8721
– highlight search terms in editor when using global search #8687
– Show a warning icon when map autosave fails #8689
– Simplify internal tree widget code #8706
– remove outdated comment for special exits MMP import #8707
– Enable OSC 8 hyperlink visibility by default #8699
– Fix compiler warnings about potential data loss in type conversions #8715
– Remove outdated FIXME comment from msleep call #8695
– Modernize color trigger dialog button handling #8693
– Reduce Windows install size by ~135MB #8685
– show error message when variable can’t be moved in the trigger editor #8683
– Add error handling to unexpected scenarios #8682
– Auto-recover from stuck password masking during login #8628
– OSC 8 hyperlink styling with direct JSON parsing #8641
– use platform-native key names in UI text #8591
– add a crash reporter for Linux / macOS / Windows #8540
– Migrate C++ regex engine from PCRE to PCRE2 #8533
– Limit saved Lua table variables to 10,000 items #8581
– Remove directional navigation buttons from mapper #8574
– – two seconds is longer than you think #8570
– Cleanup system efficiency for triggers, aliases, and keys #8559
– small Style Cleanup in main.cpp #8562
– Remove accessible description from trigger pattern editor #8546
– remove navigation shortcuts widget from trigger editor #8530
Fixed:
– Clazy warnings part 8 – sanitize-inline-keyword #9242
– Text wrapping incorrectly after switching profile tabs #9227
– improve media player stability #9237
– stop scripted package installs from stealing window focus #9236
– link to CONTRIBUTING.md in ai-instructions.md #9225
– low-contrast input fields in dark mode on macOS #9233
– make FontManager track fonts per-profile #9238
– stop re-prompting to set Mudlet as the telnet:// link handler after declining #9229
– Clazy warnings part 7 – isempty-vs-count #9235
– Clazy warnings part 1A (more) – range-loop-detach #9232
– Clazy warnings part 6 – use-static-qregularexpression #9211
– Clazy warnings part 5 – fully-qualified-moc-types #9210
– prevent use-after-free in TRoom::setArea dirty-area tracking #9217
– Clazy warnings part 4 – range-loop-reference #9207
– correct use of forward declared type items in headers #9208
– Clazy warnings part 3 – qstring-arg #9197
– unify and translate some Map Errors #9189
– avoid bogus "new Toolbar" and "new Menu" items creation on profile load #9194
– Clazy warnings part 2 – detaching-temporary #9196
– Clazy warnings part 1 – range-loop-detach #9195
– strip whitespace formatting marks when copying trigger patterns #9149
– several resetProfile() bugs #9083
– prevent update download from being canceled when checking for updates #9185
– changelog rendering in PTB update dialog #9182
– package edit warning incorrectly showing for module items #9168
– Cancel on trigger highlight color picker no longer changes the color #9013
– Respect explicit theme choice on Linux #8897
– memory leaks in map info contributors, deleting labels #9141
– increase TelnetTextDisplayedTest timeouts for CI #9184
– review fixes for font handling rework #9135
– Better handling of package-supplied fonts during unloading/reloading of packages #9115
– selectCaptureGroup() selecting wrong capture #9133
– resolve CodeQL stack-address-escape warnings #9080
– insertText newline regression #9022
– updater to work with github releases #9125
– memory leaks in sound player, dialogs #9142
– crash when importing non-Mudlet zip with XML containing element #9146
– handle over/underflows in (int) TLuaInterpreter::getVerifiedInt(…) #8924
– crash when resetProfile() is called while downloads are in-progress #9138
– scaling map image labels showing text instead of image #9121
– label move in 2D map #9131
– correct icon names for two recently added predefined MUDs #9129
– handle CMake aliasing problems when PCRE2::8BIT is itself an alias #9128
– crash when user cancels map download #9085
– small memory leaks in package/object management #9111
– small memory leaks when closing/reopening profiles #9110
– small leak in resetProfile() for the Lua state, label, and scrollbox #9109
– stale characters during horizontal scrolling with wide fonts #9099
– Ctrl+End in caret mode hides the cursor #9101
– Toolbar visibility not persisted when toggled via right-click menu #9053
– typo in mPlayerRoomColorGradentStops member name #9112
– OSC 8 hyperlinks strip config/preset only when features are advertised #9106
– Miniconsole text cutoff after switching profiles #8853
– Refactor and fix logic handling chat name change from GUI preferences dialog #9025
– use correct variable for Discord starttime string parsing #9100
– Copy Map to inactive profiles losing player room position #9091
– use right format type for errors in playSoundFileAsOrderedArguments #9086
– Tabs not respecting dark mode #8996 #8999
– map info "Short" always re-added on profile load #8963
– Module Manager shortcut uses wrong key sequence when menu bar hidden #9097
– setSaveCommandHistory inverting the boolean when a command line name is given #9098
– Fix QFutureWatcher memory leaks across the codebase #9095
– Color swatch buttons washed out on macOS and not showing at all in Light mode #8970
– Text with < characters disappearing on games with MXP enabled #8918
– saveWindowLayout/loadWindowLayout now retains user window positions #9056
– memory leak when deleting areas in a map #9092
– clickable links losing their URL query parameters #9073
– Garbled error messages when passing wrong argument types to popup functions #9090
– map exits corrupted when loading maps with invalid room IDs #9089
– Correct call() return value so timer error handling reads correctly #9088
– Show SSL error messages when secure connection fails #9055
– ansi_color table loading order #9084
– crash when keychain operation times out #9072
– Updater crash on Windows when download URL is unavailable #9067
– Changing one profile’s password no longer affects others #9049
– custom map events not firing when placed in submenus #8998
– timeframe failing if third arg is nil #8964
– PasswordMigrationTest to build #9032
– Separate user and MXP borders so reconnect doesn’t reset user borders #9016
– Restore password loading from portable file in connection dialog #8993
– Clear package list before repopulating in Package Exporter #8892
– Input bar height changes unexpectedly when switching profiles #8958
– Room symbols not rescaling when map is resized #8974
– Prevent crash when closing detached windows #8934
– Restore sound playback on macOS #8949
– Update ssh IP for Geyser upload workflow #8995
– Correct TestMask to exclude internal flags #8954
– mudlet does not close after running lua tests #8979
– Clang-format hash in .git-blame-ignore-revs #8882
– [#6964] spairs chokes on mixed keys #8868
– align MSDP negotiation to specs #8905
– Crash when removing default MUD profiles from welcome window #8916
– MXP not working on some MUDs #8915
– clean up comments and related translation things #8914
– Command history not working when password masking is disabled #8902
– Revert default map format to 20 in PTB / development #8891
– Make main console default to opaque text background, allow user to customize #8887
– Delay MXP TEMP_SECURE mode reset to allow tag handling #8889
– PTB crash on some Linux systems due to libxcb-cursor bug #8866
– Player shown on far side of map when mapper window is wide #8869
– db:_coerce_sheet backwards compatibility #8861
– Map labels appearing bold after profile reload #8865
– macOS color buttons not showing colors in settings #8847
– Make update dialog release notes keyboard accessible #8849
– Restore desktop shortcut creation on Windows install #8841
– Crash when drawing map labels at small zoom levels #8836
– Disable AddressSanitizer for release builds #8826
– Remember scroll position and cursor position in script editor #8410
– Use custom dark theme on all Windows versions #8819
– Map area centering displaying areas off-screen #8814
– Crash when nested alias/trigger processing runs cleanup prematurely #8818
– table.update no longer errors when replacing non-table with table #8694 #8751
– Editor actions not working on initial open #7482 #8753
– Revert map rendering optimization causing issues #8809
– Medievia encoding showing error in preferences dropdown #8811
– MXP FRAME close tags appearing as literal text #8808
– Timer groups display correct icons when drag-dropped #8802
– Map labels appear crisp at all zoom levels #8795
– honor ‘disable automatic updates’ setting when installer is already downloaded #8409
– OSC sequences with BEL terminator no longer swallow output #3912 #8750
– Windows crash when saving profile config #8427 #8428
– Big5 and East Asian text encodings not working on Linux #8787
– compile in latest development due to map update changes #8800
– Improve error handling in setLabelStyleSheet() #8446
– Add outline to area exit arrows for visibility on matching backgrounds #8794
– mapper not reopenable after closing via X button #8401
– Disable ‘Activate’ button in Variables view #8441
– Prevent crash in MXP watchdog callback #8785
– Memory leaks in ScriptUnit and ActionUnit (8,856 bytes) when opening/closing profile #8781
– Potential crash during automatic update download #8776
– Include full version in Sentry crash reports for PTB builds #8779
– Improve build documentation clarity for terminal execution #8774
– Regex triggers now respect ‘keep’ background color setting #8402
– Remove unnecessary allocation in filter trigger matching #8763
– default new profiles to UTF-8 encoding instead of ASCII #8759
– Accessibility crash with out-of-range offset #8310 #8752
– named captures indexed incorrectly in multimatches with special line types #8748
– Update trigger icons immediately when dragging in editor #8746
– connections to MMapper #8730
– prevent module autosave from overwriting failed-to-load modules #8696
– GMCP media finish parameter not working #8740
– Modules not loading when reopening a profile #8739
– Package Exporter unable to export packages #8629 #8630
– Memory leaks in core components #8716
– Windows installer failing after update #8710
– Down arrow saves typed text before clearing #8705
– Restore Windows application icon #8703
– set enableMXP when MXP is autodetected #8701
– 8 CodeQL ‘comparison result is always the same’ warnings #8691
– CodeQL inconsistent nullness check errors in temp trigger functions #8690
– restrict MXP auto-detection to ESC sequences only #8692
– Windows Start Menu shortcut missing after install #8686
– Use fixed delay instead of waiting for crashpad #8679
– Windows updates failing due to locked folder #8678
– Wait for crashpad_handler.exe to exit before running installer #8676
– copy downloaded installer instead of moving file on Windows #8675
– Create shortcuts when handling Squirrel install events #8672
– Wait for Mudlet to exit before running installer on Windows #8673
– Handle Squirrel installer startup commands on Windows to prevent Mudlet getting closed #8666
– Prevent crashpad_handler from getting a Windows Start Menu entry #8659
– Windows updater file lock issue in dblsqd (prevented updates) #8661
– Windows updater launch using batch file to avoid quoting issues when updating PTBs #8663
– Mudlet freeze when receiving large amounts of data #8644
– Container overflow crash when processing text #8647
– Build failures after dependency updates #8645
– package manager loses title on uninstall #8625
– Windows updater deleting itself during update #8622
– crash in bi-daily update check #8620
– crash in bi-daily update check
– clicking on stacked rooms selects all of them #8616
– use-after-free crash when calling registerMapInfo #8609
– Prevent crash during Mudlet shutdown when closing profiles #8606
– Forward secrets.SENTRY_DSN to CMake on Windows #8615
– Static fonts configured in 4.19.1 continue working after upgrade #8545
– convert raw Qt pointers to QPointer to prevent use-after-free #8610
– maintain backwards compatibility when loading rex_pcre2 #8599
– missing encodings in dropdown for Qt6 #8605
– Medievia encoding error in preferences dropdown #8608
– load PCRE2 in LuaGlobal #8598
– fix inconsistent nullness checks #8586
– Test builds now use keychain for password storage #8589
– Heap-use-after-free crash when closing profiles with active triggers #8567
– heap-use-after-free when cleanup runs during alias/trigger/key processing #8571
– potential issue in area image export #8585
– Restore Qt5 Core5Compat for third-party dependencies #8578
– Reduce redundant UTF-8 conversions in trigger processing #8560
– Improve performance of hyperlink style parsing #8558
– Remove duplicate context menu on AdjustableContainer title bar #8569
– Copy from console now works when command line has focus #8551
– Remove deprecated Qt5 Core5Compat dependency #8550
– crash when rapidly reloading plugins due to thread-safety issue in XML export #8542
– switch to FFMPEG audio backend on Windows to allow playback of .ogg and .opus audio files #8329
– Debug console crash when host is deleted #8549
– Special exit text unreadable when editing #8543
– Comprehensive package installation crash prevention #8541
– Auto-activate new triggers/aliases/scripts/keys on save #8529
– Unicode characters display correctly in unhandled MXP tags #8532
Infrastructure:
– Swap out QtConcurrent module header for sub-module ones #9246
– update CONTRIBUTING.md with AI coding guidelines #9224
– Bump lukka/get-cmake from 4.3.1 to 4.3.2 #9221
– Bump leafo/gh-actions-lua from 12 to 13 #9222
– Bump 3rdparty/sentry-native from 848fd4c to 87f25f2 #9220
– apply clang-format style to tests too #9201
– Bump 3rdparty/sentry-native from 93c4e32 to 848fd4c #9202
– Bump carlosperate/download-file-action from 2.0.2 to 2.0.3 #9203
– fix flaky TelnetTextDisplayedTest in CI #9193
– fix partial PTB releases not triggering when push build exists at same SHA #9192
– fix Windows SHA256 missing from PTB releases #9191
– allow partial PTB releases when not all platforms succeed #9163
– migrate undo/redo tests to QTest framework #8867
– stop deleting and recreating GitHub releases on every build #9176
– skip duplicate PTB builds when no new commits exist #9175
– sync edbee-lib submodule to fork master #9183
– Bump actions/download-artifact from 4 to 8 #9179
– Bump actions/github-script from 7 to 9 #9181
– Bump 3rdparty/sentry-native from 6ebd29b to 93c4e32 #9178
– fix Windows and macOS nightly build failures #9173
– add missing statuses:write permission to DangerJS workflow #9172
– fix DangerJS workflow vulnerability to malicious PRs #9143
– add non-compileable files to CMake project file #8780
– update sentry-native to 0.13.5 #9158
– update edbee-lib submodule & use system oniguruma if present #9156
– fix PTB registration by reverting installer filename convention #9155
– show changelogs both from last release and last PTB #9151
– fix CI bugs in PTB registration, macOS updater linking, and portable ZIP upload #9154
– fix Windows release asset upload and appcast SCP paths #9152
– fix Windows PTB registration failing after installer rename #9150
– release workflow failing due to PR build triggers and checkout wiping assets #9145
– add CI workflow to create GitHub Releases for updater #9127
– Update text for translation in Crowdin #9136
– Bump lukka/get-cmake from 4.3.0 to 4.3.1 #9139
– Add comprehensive variable editor tests #9103
– add comprehensive resetProfile() test suite #9082
– add cross-reference comments to duplicate build workflows #9069
– remove disabled clang-tidy workflows #9113
– Bump 3rdparty/qtkeychain from 6e90eda to 53a8e6a #9126
– Update text for translation in Crowdin #9124
– speed up OSC tests with data-driven approach #9120
– Add Copilot skill for opening pull requests #9105
– Bump 3rdparty/qtkeychain from 844beb4 to 6e90eda #8973
– Update text for translation in Crowdin #9077
– disable CodeQL poorly-documented-function query #9079
– Bump webfactory/ssh-agent from 0.9.1 to 0.10.0 #9047
– restore xcb-util-cursor resiliency changes #9074
– Bump lukka/get-cmake from 4.2.3 to 4.3.0 #9087
– Fix macOS CI: use AppleClang instead of Homebrew LLVM #9078
– remove leftover qgridlayout ordering script #9075
– enable set -e in Linux CI deploy script to catch failures #9059
– install libspeechd-dev for Linux CI to fix AppImage creation #9058
– Migrate to clang64 msys2 environment for Windows builds #9064
– remove ccache mutex locks #9043
– add retries to brew install to handle hangs #9045
– remove CodeQL CI’s concurrency #9044
– Fix windows builds in development #9042
– Bump development version to 4.20.1 #9050
– Update text for translation in Crowdin #9040
– remove qgridlayout ordering workflow #9038
– Update autocompletion data in Mudlet #9041
– update target path for file upload in geyser-docs workflow #9030
– Change SCP target host for file uploads #9003
– Dedicated workflow for prs #9033
– Remove unnecessary null checks after new #9014
– speed up compilation of Mudlet by 25% #9021
– Enable TTS in macOS builds #8921
– make xcb-util-cursor download more resilient #9012
– re-introduce path stripping in geyser-docs.yaml #9023
– ccache key should be per pr/branch #9010
– use release-signing for releases, test-signing for PTBs #9007
– always run build ci in core branches #9008
– Update text for translation in Crowdin #9009
– increase SignPath signing timeout to 1 hour #9002
– Refactor geyser doc upload workflow #9001
– run undo/redo tests in test mode #8992
– fix unintended ccache collisions #8991
– Bump actions/upload-artifact from 6 to 7 #8989
– CI concurrency logic #8990
– Bump ZedThree/clang-tidy-review from 0.23.0 to 0.23.1 #8988
– Update text for translation in Crowdin #8940
– [ImgBot] Optimize images #8925
– Bump development version to 4.20.0 #8919
– Bump 3rdparty/sentry-native from c80e793 to 383ccad #8913
– Add SignPath Foundation attribution to README #8895
– Update autocompletion data in Mudlet #8903
– Update text for translation in Crowdin #8901
– use pcre2grep in CI validation #8878
– set next-next release to be 4.21.0 #8883
– disable signing MudletCrashReporter.exe temporarily #8880
– add qtkeychain-qt6-dev to Linux workflows #8876
– switch qtkeychain submodule to upstream #8870
– detect Lua test failures on macOS CI #8852
– Remove x64 from Windows PTB desktop shortcut name #8845
– Bump lukka/get-cmake from 4.2.2 to 4.2.3 #8844
– Bump 3rdparty/sentry-native from 08b1374 to c80e793 #8843
– Update text for translation in Crowdin #8839
– Fix SignPath code signing policy configuration #8834
– Revert uploading debug symbols to Sentry for PR builds #8832
– Fix Windows code signing by adding SignPath v2 policy file #8831
– Upload debug symbols to Sentry for PR builds #8830
– Remove unused QKeychain forward declarations from CredentialManager.h #8829
– Remove dead CMake code in Sentry configuration #8828
– Bump lukka/get-cmake from 3.30.3 to 4.2.2 #8822
– Bump actions/upload-artifact from 4 to 6 #8823
– Bump actions/cache from 4 to 5 #8821
– Bump 3rdparty/sentry-native from bbccfad to 08b1374 #8820
– Cache sentry-native builds in CI #8807
– Add .git-blame-ignore-revs for formatting commits #8805
– Update text for translation in Crowdin #8816
– update plural american english translations #8478
– add clang-format instructions to AI guidelines #8806
– Apply clang-format to all CPP files #8804
– Add SignPath code signing for Windows builds #8786
– update clang-format style to match Mudlets as much as possible #8380
– Enable Qt breadcrumbs in Sentry crash reports #8791
– Fix Windows nightly build failure when no new commits #8790
– Bump 3rdparty/sentry-native from 11832e4 to bbccfad #8792
– upload Qt module debug symbols to Sentry using cv2pdb #8782
– Update autocompletion data in Mudlet #8789
– Update text for translation in Crowdin #8788
– Upload Qt debug symbols to Sentry for better crash reports #8777
– Remove Azure trusted signing from Windows builds #8778
– Bump 3rdparty/edbee-lib from cf7f0ba to 7e7c0f6 #8770
– Bump 3rdparty/sentry-native from 4f983bb to 11832e4 #8771
– remove travis. prefix from CI files #8375
– Update autocompletion data in Mudlet #8769
– Update text for translation in Crowdin #8767
– Update bundled mpkg.mpackage to latest upstream #8768
– reduce Mudlet build times by 30s #8403
– Add Claude Code slash command for creating PRs #8761
– Guard undo/redo debug messages behind compile flag #8760
– Simplify profile loading code #8756
– Improve code readability with cleaner empty checks #8755
– Reduce noise in automated code review comments #8754
– simplify CI 3rd party update workflow #8737
– improve safety of internal text handling #8724
– uppercase settings key in config #8246
– Simplify build system by removing unused QMake files #8731
– modernize loop syntax across codebase #8733
– simplify cmake build configuration #8732
– simplify network connection handling #8735
– Add a security policy for reporting vulnerabilities #8723
– Update text for translation in Crowdin #8728
– Update autocompletion data in Mudlet #8729
– revise displayed Copyright year to 2026 #8727
– eliminate remains of qt-ordered-map from Mudlet #8720
– Clarify CI build option label #8714
– allow CMake initGitSubmodule.cmake to act recursively #8717
– run memory leak checks as part of CI pipeline #8316
– remove debug logging from undo/redo feature #8713
– Update text for translation in Crowdin #8698
– check for sentry-native submodule when Sentry enabled #8669
– address feedback in event handling from no-op operations #8667
– Add telnet processing speed benchmark #8658
– Replace foreach with C++17 structured bindings #8664
– Add ccache stats to Windows build workflow #8671
– Fix Windows PTB rebuild versioning for Squirrel #8670
– allow Windows PTB builds to be re-done on the same day #8668
– fix crashes in undo/redo tests #8665
– add proper Qt event propagation in all events #8444
– Bump actions/upload-artifact from 5 to 6 #8657
– Ignore lcf submodule in Dependabot, remove vcpkg #8654
– Bump ZedThree/clang-tidy-review from 0.22.2 to 0.22.3 #8656
– Update Lua code formatter to latest upstream branch #8653
– Bump 3rdparty/sentry-native from 67a9f8e to 4f983bb #8637
– Bump peter-evans/create-pull-request from 7 to 8 #8638
– Bump 3rdparty/lcf from 4aa2502 to 55aaf85 #8639
– Bump actions/cache from 4 to 5 #8636
– Update autocompletion data in Mudlet #8634
– Update text for translation in Crowdin #8633
– SENTRY_AUTH_TOKEN diagnostic checks environment variable #8618
– Bump 3rdparty/sentry-native from c5416e6 to 67a9f8e #8617
– Update text for translation in Crowdin #8613
– add workaround clang-tidy-review directory bug #8597
– update communi to qt6 #8584
– more fixes to clang-tidy workflow #8596
– fix clang-tidy workflow #8595
– update Qtkeychain submodule from master to main branch #8579
– Bump ZedThree/clang-tidy-review from 0.22.1 to 0.22.2 #8594
– ignore macOS keychain for telnet functional test #8592
– complete devcontainer setup #8587
– Update text for translation in Crowdin #8590
– remove item check in saveSelectedItem #8583
– Remove else-after-return anti-pattern #8575
– update devcontainer to work #8321
– Bump ZedThree/clang-tidy-review from 0.22.0 to 0.22.1 #8564
– Bump actions/checkout from 5 to 6 #8565
– Bump 3rdparty/edbee-lib from 165edc0 to cf7f0ba #8563
– Update text for translation in Crowdin #8561
– Update AI instructions with comments and git guidelines #8531
– Fix CMake CMP0167 warning for Boost #8538
– Add NINJA_STATUS to Windows build #8539
– update Noto Color Emoji font to Unicode 17.0 v2.051 #8535
– Add regex busted tests for PCRE library #8537
Other:
– Revert "Add per-room border color and thickness"
– Revert "Fix crash in bi-daily update check"

read more

Public Test Build

Changes since last PTB (Mudlet-4.20.1-ptb-2026-04-29-75ccf0e5)
Fixed:
– Clazy warnings part 8 – sanitize-inline-keyword #9242
Infrastructure:
– Swap out QtConcurrent module header for sub-module ones #9246

Full changelog since last release (Mudlet-4.20.1)

##### Added:
– smart command suggestions in the tutorial for new players [#9188](https://github.com/Mudlet/Mudlet/pull/9188)

– lpeg parsing library [#9212](https://github.com/Mudlet/Mudlet/pull/9212)

– Pkuxkx as a predefined default MUD [#9161](https://github.com/Mudlet/Mudlet/pull/9161)

– Mudlet.ini option to control high DPI scale factor rounding policy [#9164](https://github.com/Mudlet/Mudlet/pull/9164)

– right-click option to hide default profiles in connection dialog [#9123](https://github.com/Mudlet/Mudlet/pull/9123)

– selectAll function with optional window support [#9166](https://github.com/Mudlet/Mudlet/pull/9166)

– telnets:// link support for secure TLS connections [#9153](https://github.com/Mudlet/Mudlet/pull/9153)

– getKeyCode function to return key code and any modifiers of a key-binding [#8435](https://github.com/Mudlet/Mudlet/pull/8435)

– `telnet://` URI scheme support for one-click MUD connections [#8601](https://github.com/Mudlet/Mudlet/pull/8601)

– separate border size control and player room marker improvements [#8975](https://github.com/Mudlet/Mudlet/pull/8975)

– OSC 8 context menu title support [#8910](https://github.com/Mudlet/Mudlet/pull/8910)

– DragonfireMUD and VoidMUD [#8783](https://github.com/Mudlet/Mudlet/pull/8783)

– 3rd party definition files for Lua [#8966](https://github.com/Mudlet/Mudlet/pull/8966)

– Starmourn and update IRE game profiles [#9076](https://github.com/Mudlet/Mudlet/pull/9076)

– embeddable TextEdit widget (Geyser.TextEdit) [#8986](https://github.com/Mudlet/Mudlet/pull/8986)

– MudMaster Chat Protocol (MMCP) [#7765](https://github.com/Mudlet/Mudlet/pull/7765)

– blinking/flashing text support [#8983](https://github.com/Mudlet/Mudlet/pull/8983)

– timeout for (Linux) Build xcb-util-cursor [#8978](https://github.com/Mudlet/Mudlet/pull/8978)

– timeout for macos (Install Dependencies) [#8977](https://github.com/Mudlet/Mudlet/pull/8977)

– data loss guard on constraint migration [#8850](https://github.com/Mudlet/Mudlet/pull/8850)

– GNOME Software-style navigation in Package Manager [#8846](https://github.com/Mudlet/Mudlet/pull/8846)

– room description matching to generic mapper [#8649](https://github.com/Mudlet/Mudlet/pull/8649)

– hidden rooms [#8443](https://github.com/Mudlet/Mudlet/pull/8443)

– Multi-file selection in import dialogs [#8796](https://github.com/Mudlet/Mudlet/pull/8796)

– Map label support in 3D mapper [#8793](https://github.com/Mudlet/Mudlet/pull/8793)

– multiple note tabs to the notepad [#8757](https://github.com/Mudlet/Mudlet/pull/8757)

– multiple map views support [#8743](https://github.com/Mudlet/Mudlet/pull/8743)

– muteMediaScript and muteMediaGame options to [getConfig](https://wiki.mudlet.org/w/Manual:Lua_Functions#getConfig)/[setConfig](https://wiki.mudlet.org/w/Manual:Lua_Functions#setConfig) [#8764](https://github.com/Mudlet/Mudlet/pull/8764)

– “Whole word” search option in the script editor [#8722](https://github.com/Mudlet/Mudlet/pull/8722)

– per-room border color and thickness [#8758](https://github.com/Mudlet/Mudlet/pull/8758)

– more safeguards against profile settings being lost [#8742](https://github.com/Mudlet/Mudlet/pull/8742)

– permExactMatchTrigger Lua API function [#8745](https://github.com/Mudlet/Mudlet/pull/8745)

– per-room border color and thickness

– NAWS protocol toggle setting [#8700](https://github.com/Mudlet/Mudlet/pull/8700)

– getBorderColor() Lua API function [#8688](https://github.com/Mudlet/Mudlet/pull/8688)

– MXP FRAME and DEST tag support for multi-window layouts [#8577](https://github.com/Mudlet/Mudlet/pull/8577)

– Optional static analysis during build [#8708](https://github.com/Mudlet/Mudlet/pull/8708)

– OSC 8 hyperlink visibility, selection, and compact syntax enhancements [#8677](https://github.com/Mudlet/Mudlet/pull/8677)

– Sentry license to about dialog [#8660](https://github.com/Mudlet/Mudlet/pull/8660)

– undo/redo for Mudlet editor [#8469](https://github.com/Mudlet/Mudlet/pull/8469)

– [getRoomsByPosition1](https://wiki.mudlet.org/w/Manual:Lua_Functions#getRoomsByPosition1)() function [#8619](https://github.com/Mudlet/Mudlet/pull/8619)

– functional GUI tests using QTest [#8572](https://github.com/Mudlet/Mudlet/pull/8572)

– Enable spellcheck in the composer window [#8447](https://github.com/Mudlet/Mudlet/pull/8447)

– setExitWeightFilter function to alter room/exits weights/locks [#8487](https://github.com/Mudlet/Mudlet/pull/8487)

##### Improved:
– show telnet protocol negotiation status in `Statistics` [#9226](https://github.com/Mudlet/Mudlet/pull/9226)

– read tooltips aloud without HTML tags in profile preferences [#9228](https://github.com/Mudlet/Mudlet/pull/9228)

– ARIA accessibility for OSC 8 hyperlinks in caret mode [#9206](https://github.com/Mudlet/Mudlet/pull/9206)

– inline map download dialog [#9204](https://github.com/Mudlet/Mudlet/pull/9204)

– 2D mapper rendering speed on single-Z-level areas [#9209](https://github.com/Mudlet/Mudlet/pull/9209)

– simplify long tooltips [#8416](https://github.com/Mudlet/Mudlet/pull/8416)

– Make spacing between widgets in the connection dialog more consistent [#9198](https://github.com/Mudlet/Mudlet/pull/9198)

– Auto-switch code editor theme with app appearance [#9167](https://github.com/Mudlet/Mudlet/pull/9167)

– handling of rooms having their hidden property changed [#8947](https://github.com/Mudlet/Mudlet/pull/8947)

– guard mudlet::self() in cTelnet destructor [#9020](https://github.com/Mudlet/Mudlet/pull/9020)

– use raw IP address if provided with one [#9066](https://github.com/Mudlet/Mudlet/pull/9066)

– Give players full control over Discord Rich Presence [#9116](https://github.com/Mudlet/Mudlet/pull/9116)

– show version scope in PTB release changelogs [#9148](https://github.com/Mudlet/Mudlet/pull/9148)

– hidden rooms – allow storage in map versions < 22 and other things [#8930](https://github.com/Mudlet/Mudlet/pull/8930)

– change label highlight from overlay to outline [#9132](https://github.com/Mudlet/Mudlet/pull/9132)

– internal code in regards to memory use [#9015](https://github.com/Mudlet/Mudlet/pull/9015)

– saving a key with no binding set shows an error [#9114](https://github.com/Mudlet/Mudlet/pull/9114)

– Add smooth pulsing effect for blinking text [#9104](https://github.com/Mudlet/Mudlet/pull/9104)

– remove AI/llamafile integration [#9108](https://github.com/Mudlet/Mudlet/pull/9108)

– error message when saving MMP-downloaded map [#9107](https://github.com/Mudlet/Mudlet/pull/9107)

– Automatic audio device switching support [#9026](https://github.com/Mudlet/Mudlet/pull/9026)

– only mark map as dirty if room hidden status is changed [#8946](https://github.com/Mudlet/Mudlet/pull/8946)

– Reduce memory usage for text decorations [#9052](https://github.com/Mudlet/Mudlet/pull/9052)

– Remove debug [print](https://wiki.mudlet.org/w/Manual:Lua_Functions#print) from deleteAll function [#9061](https://github.com/Mudlet/Mudlet/pull/9061)

– add defensive coding to internal code related to the TMediaPlayer [#9017](https://github.com/Mudlet/Mudlet/pull/9017)

– Script Editor search code quality and maintainability [#9028](https://github.com/Mudlet/Mudlet/pull/9028)

– Code quality in TBuffer.cpp [#9029](https://github.com/Mudlet/Mudlet/pull/9029)

– show feedback when manually checking for updates fails [#9004](https://github.com/Mudlet/Mudlet/pull/9004)

– add better error reporting to GMCP merge handler [#9018](https://github.com/Mudlet/Mudlet/pull/9018)

– adjust [getTime](https://wiki.mudlet.org/w/Manual:Lua_Functions#getTime)() table size hint to match 7 entries [#9019](https://github.com/Mudlet/Mudlet/pull/9019)

– Don't [echo](https://wiki.mudlet.org/w/Manual:Lua_Functions#echo) OSC 8 [send](https://wiki.mudlet.org/w/Manual:Lua_Functions#send): hyperlink commands by default [#8957](https://github.com/Mudlet/Mudlet/pull/8957)

– Detection of character-at-a-time mode in server connections [#8825](https://github.com/Mudlet/Mudlet/pull/8825)

– Add more context to media playback events [#8953](https://github.com/Mudlet/Mudlet/pull/8953)

– luarocks busted install instructions version flag [#8950](https://github.com/Mudlet/Mudlet/pull/8950)

– Add macOS clang-format path to AI instructions [#8926](https://github.com/Mudlet/Mudlet/pull/8926)

– Make MNES and NEW-ENVIRON mutually exclusive in UI [#8893](https://github.com/Mudlet/Mudlet/pull/8893)

– update Astaria banner [#8900](https://github.com/Mudlet/Mudlet/pull/8900)

– New Crowdin updates [#8253](https://github.com/Mudlet/Mudlet/pull/8253)

– macOS build instructions use absolute path [#8860](https://github.com/Mudlet/Mudlet/pull/8860)

– nixed rex_prce2 check in lua [#8848](https://github.com/Mudlet/Mudlet/pull/8848)

– Faster map rendering when zoomed in by skipping off-screen rooms [#8797](https://github.com/Mudlet/Mudlet/pull/8797)

– Allow nil to clear label callbacks [#8799](https://github.com/Mudlet/Mudlet/pull/8799)

– keep small map areas fully visible in viewport [#8766](https://github.com/Mudlet/Mudlet/pull/8766)

– Enable PCRE2 JIT compilation for triggers and aliases [#8762](https://github.com/Mudlet/Mudlet/pull/8762)

– open IRC with Lua functions not via UI anymore [#8123](https://github.com/Mudlet/Mudlet/pull/8123)

– Auto-link Lua function names in changelog [#8744](https://github.com/Mudlet/Mudlet/pull/8744)

– add error handling with clear error messages [#8736](https://github.com/Mudlet/Mudlet/pull/8736)

– error message visibility in module creation dialog [#8738](https://github.com/Mudlet/Mudlet/pull/8738)

– Memory management for console hyperlinks [#8725](https://github.com/Mudlet/Mudlet/pull/8725)

– AI assistant guidance for modern C++ loops [#8741](https://github.com/Mudlet/Mudlet/pull/8741)

– error messages for easier troubleshooting [#8721](https://github.com/Mudlet/Mudlet/pull/8721)

– highlight search terms in editor when using global search [#8687](https://github.com/Mudlet/Mudlet/pull/8687)

– Show a warning icon when map autosave fails [#8689](https://github.com/Mudlet/Mudlet/pull/8689)

– Simplify internal tree widget code [#8706](https://github.com/Mudlet/Mudlet/pull/8706)

– remove outdated comment for special exits MMP import [#8707](https://github.com/Mudlet/Mudlet/pull/8707)

– Enable OSC 8 hyperlink visibility by default [#8699](https://github.com/Mudlet/Mudlet/pull/8699)

– Fix compiler warnings about potential data loss in type conversions [#8715](https://github.com/Mudlet/Mudlet/pull/8715)

– Remove outdated FIXME comment from msleep call [#8695](https://github.com/Mudlet/Mudlet/pull/8695)

– Modernize color trigger dialog button handling [#8693](https://github.com/Mudlet/Mudlet/pull/8693)

– Reduce Windows install size by ~135MB [#8685](https://github.com/Mudlet/Mudlet/pull/8685)

– show error message when variable can't be moved in the trigger editor [#8683](https://github.com/Mudlet/Mudlet/pull/8683)

– Add error handling to unexpected scenarios [#8682](https://github.com/Mudlet/Mudlet/pull/8682)

– Auto-recover from stuck password masking during login [#8628](https://github.com/Mudlet/Mudlet/pull/8628)

– OSC 8 hyperlink styling with direct JSON parsing [#8641](https://github.com/Mudlet/Mudlet/pull/8641)

– use platform-native key names in UI text [#8591](https://github.com/Mudlet/Mudlet/pull/8591)

– add a crash reporter for Linux / macOS / Windows [#8540](https://github.com/Mudlet/Mudlet/pull/8540)

– Migrate C++ regex engine from PCRE to PCRE2 [#8533](https://github.com/Mudlet/Mudlet/pull/8533)

– Limit saved Lua table variables to 10,000 items [#8581](https://github.com/Mudlet/Mudlet/pull/8581)

– Remove directional navigation buttons from mapper [#8574](https://github.com/Mudlet/Mudlet/pull/8574)

– – two seconds is longer than you think [#8570](https://github.com/Mudlet/Mudlet/pull/8570)

– Cleanup system efficiency for triggers, aliases, and keys [#8559](https://github.com/Mudlet/Mudlet/pull/8559)

– small Style Cleanup in main.cpp [#8562](https://github.com/Mudlet/Mudlet/pull/8562)

– Remove accessible description from trigger pattern editor [#8546](https://github.com/Mudlet/Mudlet/pull/8546)

– remove navigation shortcuts widget from trigger editor [#8530](https://github.com/Mudlet/Mudlet/pull/8530)

##### Fixed:
– Clazy warnings part 8 – sanitize-inline-keyword [#9242](https://github.com/Mudlet/Mudlet/pull/9242)

– Text wrapping incorrectly after switching profile tabs [#9227](https://github.com/Mudlet/Mudlet/pull/9227)

– improve media player stability [#9237](https://github.com/Mudlet/Mudlet/pull/9237)

– stop scripted package installs from stealing window focus [#9236](https://github.com/Mudlet/Mudlet/pull/9236)

– link to CONTRIBUTING.md in ai-instructions.md [#9225](https://github.com/Mudlet/Mudlet/pull/9225)

– low-contrast input fields in dark mode on macOS [#9233](https://github.com/Mudlet/Mudlet/pull/9233)

– make FontManager track fonts per-profile [#9238](https://github.com/Mudlet/Mudlet/pull/9238)

– stop re-prompting to set Mudlet as the telnet:// link handler after declining [#9229](https://github.com/Mudlet/Mudlet/pull/9229)

– Clazy warnings part 7 – isempty-vs-count [#9235](https://github.com/Mudlet/Mudlet/pull/9235)

– Clazy warnings part 1A (more) – range-loop-detach [#9232](https://github.com/Mudlet/Mudlet/pull/9232)

– Clazy warnings part 6 – use-static-qregularexpression [#9211](https://github.com/Mudlet/Mudlet/pull/9211)

– Clazy warnings part 5 – fully-qualified-moc-types [#9210](https://github.com/Mudlet/Mudlet/pull/9210)

– prevent use-after-free in TRoom::setArea dirty-area tracking [#9217](https://github.com/Mudlet/Mudlet/pull/9217)

– Clazy warnings part 4 – range-loop-reference [#9207](https://github.com/Mudlet/Mudlet/pull/9207)

– correct use of forward declared type items in headers [#9208](https://github.com/Mudlet/Mudlet/pull/9208)

– Clazy warnings part 3 – qstring-arg [#9197](https://github.com/Mudlet/Mudlet/pull/9197)

– unify and translate some Map Errors [#9189](https://github.com/Mudlet/Mudlet/pull/9189)

– avoid bogus "new Toolbar" and "new Menu" items creation on profile load [#9194](https://github.com/Mudlet/Mudlet/pull/9194)

– Clazy warnings part 2 – detaching-temporary [#9196](https://github.com/Mudlet/Mudlet/pull/9196)

– Clazy warnings part 1 – range-loop-detach [#9195](https://github.com/Mudlet/Mudlet/pull/9195)

– strip whitespace formatting marks when copying trigger patterns [#9149](https://github.com/Mudlet/Mudlet/pull/9149)

– several [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() bugs [#9083](https://github.com/Mudlet/Mudlet/pull/9083)

– prevent update download from being canceled when checking for updates [#9185](https://github.com/Mudlet/Mudlet/pull/9185)

– changelog rendering in PTB update dialog [#9182](https://github.com/Mudlet/Mudlet/pull/9182)

– package edit warning incorrectly showing for module items [#9168](https://github.com/Mudlet/Mudlet/pull/9168)

– Cancel on trigger highlight color picker no longer changes the color [#9013](https://github.com/Mudlet/Mudlet/pull/9013)

– Respect explicit theme choice on Linux [#8897](https://github.com/Mudlet/Mudlet/pull/8897)

– memory leaks in map info contributors, deleting labels [#9141](https://github.com/Mudlet/Mudlet/pull/9141)

– increase TelnetTextDisplayedTest timeouts for CI [#9184](https://github.com/Mudlet/Mudlet/pull/9184)

– review fixes for font handling rework [#9135](https://github.com/Mudlet/Mudlet/pull/9135)

– Better handling of package-supplied fonts during unloading/reloading of packages [#9115](https://github.com/Mudlet/Mudlet/pull/9115)

– [selectCaptureGroup](https://wiki.mudlet.org/w/Manual:Lua_Functions#selectCaptureGroup)() selecting wrong capture [#9133](https://github.com/Mudlet/Mudlet/pull/9133)

– resolve CodeQL stack-address-escape warnings [#9080](https://github.com/Mudlet/Mudlet/pull/9080)

– [insertText](https://wiki.mudlet.org/w/Manual:Lua_Functions#insertText) newline regression [#9022](https://github.com/Mudlet/Mudlet/pull/9022)

– updater to work with github releases [#9125](https://github.com/Mudlet/Mudlet/pull/9125)

– memory leaks in sound player, dialogs [#9142](https://github.com/Mudlet/Mudlet/pull/9142)

– crash when importing non-Mudlet zip with XML containing element [#9146](https://github.com/Mudlet/Mudlet/pull/9146)

– handle over/underflows in (int) TLuaInterpreter::getVerifiedInt(…) [#8924](https://github.com/Mudlet/Mudlet/pull/8924)

– crash when [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() is called while downloads are in-progress [#9138](https://github.com/Mudlet/Mudlet/pull/9138)

– scaling map image labels showing text instead of image [#9121](https://github.com/Mudlet/Mudlet/pull/9121)

– label move in 2D map [#9131](https://github.com/Mudlet/Mudlet/pull/9131)

– correct icon names for two recently added predefined MUDs [#9129](https://github.com/Mudlet/Mudlet/pull/9129)

– handle CMake aliasing problems when PCRE2::8BIT is itself an alias [#9128](https://github.com/Mudlet/Mudlet/pull/9128)

– crash when user cancels map download [#9085](https://github.com/Mudlet/Mudlet/pull/9085)

– small memory leaks in package/object management [#9111](https://github.com/Mudlet/Mudlet/pull/9111)

– small memory leaks when closing/reopening profiles [#9110](https://github.com/Mudlet/Mudlet/pull/9110)

– small leak in [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() for the Lua state, label, and scrollbox [#9109](https://github.com/Mudlet/Mudlet/pull/9109)

– stale characters during horizontal scrolling with wide fonts [#9099](https://github.com/Mudlet/Mudlet/pull/9099)

– Ctrl+End in caret mode hides the cursor [#9101](https://github.com/Mudlet/Mudlet/pull/9101)

– Toolbar visibility not persisted when toggled via right-click menu [#9053](https://github.com/Mudlet/Mudlet/pull/9053)

– typo in mPlayerRoomColorGradentStops member name [#9112](https://github.com/Mudlet/Mudlet/pull/9112)

– OSC 8 hyperlinks strip config/preset only when features are advertised [#9106](https://github.com/Mudlet/Mudlet/pull/9106)

– Miniconsole text cutoff after switching profiles [#8853](https://github.com/Mudlet/Mudlet/pull/8853)

– Refactor and fix logic handling chat name change from GUI preferences dialog [#9025](https://github.com/Mudlet/Mudlet/pull/9025)

– use correct variable for Discord starttime string parsing [#9100](https://github.com/Mudlet/Mudlet/pull/9100)

– Copy Map to inactive profiles losing player room position [#9091](https://github.com/Mudlet/Mudlet/pull/9091)

– use right format type for errors in playSoundFileAsOrderedArguments [#9086](https://github.com/Mudlet/Mudlet/pull/9086)

– Tabs not respecting dark mode [#8996](https://github.com/Mudlet/Mudlet/pull/8996) [#8999](https://github.com/Mudlet/Mudlet/pull/8999)

– map info "Short" always re-added on profile load [#8963](https://github.com/Mudlet/Mudlet/pull/8963)

– Module Manager shortcut uses wrong key sequence when menu bar hidden [#9097](https://github.com/Mudlet/Mudlet/pull/9097)

– setSaveCommandHistory inverting the boolean when a command line name is given [#9098](https://github.com/Mudlet/Mudlet/pull/9098)

– Fix QFutureWatcher memory leaks across the codebase [#9095](https://github.com/Mudlet/Mudlet/pull/9095)

– Color swatch buttons washed out on macOS and not showing at all in Light mode [#8970](https://github.com/Mudlet/Mudlet/pull/8970)

– Text with < characters disappearing on games with MXP enabled [#8918](https://github.com/Mudlet/Mudlet/pull/8918)

– [saveWindowLayout](https://wiki.mudlet.org/w/Manual:Lua_Functions#saveWindowLayout)/[loadWindowLayout](https://wiki.mudlet.org/w/Manual:Lua_Functions#loadWindowLayout) now retains user window positions [#9056](https://github.com/Mudlet/Mudlet/pull/9056)

– memory leak when deleting areas in a map [#9092](https://github.com/Mudlet/Mudlet/pull/9092)

– clickable links losing their URL query parameters [#9073](https://github.com/Mudlet/Mudlet/pull/9073)

– Garbled error messages when passing wrong argument types to popup functions [#9090](https://github.com/Mudlet/Mudlet/pull/9090)

– map exits corrupted when loading maps with invalid room IDs [#9089](https://github.com/Mudlet/Mudlet/pull/9089)

– Correct call() return value so timer error handling reads correctly [#9088](https://github.com/Mudlet/Mudlet/pull/9088)

– Show SSL error messages when secure connection fails [#9055](https://github.com/Mudlet/Mudlet/pull/9055)

– ansi_color table loading order [#9084](https://github.com/Mudlet/Mudlet/pull/9084)

– crash when keychain operation times out [#9072](https://github.com/Mudlet/Mudlet/pull/9072)

– Updater crash on Windows when download URL is unavailable [#9067](https://github.com/Mudlet/Mudlet/pull/9067)

– Changing one profile's password no longer affects others [#9049](https://github.com/Mudlet/Mudlet/pull/9049)

– custom map events not firing when placed in submenus [#8998](https://github.com/Mudlet/Mudlet/pull/8998)

– [timeframe](https://wiki.mudlet.org/w/Manual:Lua_Functions#timeframe) failing if third arg is nil [#8964](https://github.com/Mudlet/Mudlet/pull/8964)

– PasswordMigrationTest to build [#9032](https://github.com/Mudlet/Mudlet/pull/9032)

– Separate user and MXP borders so [reconnect](https://wiki.mudlet.org/w/Manual:Lua_Functions#reconnect) doesn't reset user borders [#9016](https://github.com/Mudlet/Mudlet/pull/9016)

– Restore password loading from portable file in connection dialog [#8993](https://github.com/Mudlet/Mudlet/pull/8993)

– Clear package list before repopulating in Package Exporter [#8892](https://github.com/Mudlet/Mudlet/pull/8892)

– Input bar height changes unexpectedly when switching profiles [#8958](https://github.com/Mudlet/Mudlet/pull/8958)

– Room symbols not rescaling when map is resized [#8974](https://github.com/Mudlet/Mudlet/pull/8974)

– Prevent crash when closing detached windows [#8934](https://github.com/Mudlet/Mudlet/pull/8934)

– Restore sound playback on macOS [#8949](https://github.com/Mudlet/Mudlet/pull/8949)

– Update ssh IP for Geyser upload workflow [#8995](https://github.com/Mudlet/Mudlet/pull/8995)

– Correct TestMask to exclude internal flags [#8954](https://github.com/Mudlet/Mudlet/pull/8954)

– mudlet does not close after running lua tests [#8979](https://github.com/Mudlet/Mudlet/pull/8979)

– Clang-format hash in .git-blame-ignore-revs [#8882](https://github.com/Mudlet/Mudlet/pull/8882)

– [#6964] [spairs](https://wiki.mudlet.org/w/Manual:Lua_Functions#spairs) chokes on mixed keys [#8868](https://github.com/Mudlet/Mudlet/pull/8868)

– align MSDP negotiation to specs [#8905](https://github.com/Mudlet/Mudlet/pull/8905)

– Crash when removing default MUD profiles from welcome window [#8916](https://github.com/Mudlet/Mudlet/pull/8916)

– MXP not working on some MUDs [#8915](https://github.com/Mudlet/Mudlet/pull/8915)

– clean up comments and related translation things [#8914](https://github.com/Mudlet/Mudlet/pull/8914)

– Command history not working when password masking is disabled [#8902](https://github.com/Mudlet/Mudlet/pull/8902)

– Revert default map format to 20 in PTB / `development` [#8891](https://github.com/Mudlet/Mudlet/pull/8891)

– Make main console default to opaque text background, allow user to customize [#8887](https://github.com/Mudlet/Mudlet/pull/8887)

– Delay MXP TEMP_SECURE mode reset to allow tag handling [#8889](https://github.com/Mudlet/Mudlet/pull/8889)

– PTB crash on some Linux systems due to libxcb-cursor bug [#8866](https://github.com/Mudlet/Mudlet/pull/8866)

– Player shown on far side of map when mapper window is wide [#8869](https://github.com/Mudlet/Mudlet/pull/8869)

– db:_coerce_sheet backwards compatibility [#8861](https://github.com/Mudlet/Mudlet/pull/8861)

– Map labels appearing bold after profile reload [#8865](https://github.com/Mudlet/Mudlet/pull/8865)

– macOS color buttons not showing colors in settings [#8847](https://github.com/Mudlet/Mudlet/pull/8847)

– Make update dialog release notes keyboard accessible [#8849](https://github.com/Mudlet/Mudlet/pull/8849)

– Restore desktop shortcut creation on Windows install [#8841](https://github.com/Mudlet/Mudlet/pull/8841)

– Crash when drawing map labels at small zoom levels [#8836](https://github.com/Mudlet/Mudlet/pull/8836)

– Disable AddressSanitizer for release builds [#8826](https://github.com/Mudlet/Mudlet/pull/8826)

– Remember scroll position and cursor position in script editor [#8410](https://github.com/Mudlet/Mudlet/pull/8410)

– Use custom dark theme on all Windows versions [#8819](https://github.com/Mudlet/Mudlet/pull/8819)

– Map area centering displaying areas off-screen [#8814](https://github.com/Mudlet/Mudlet/pull/8814)

– Crash when nested alias/trigger processing runs cleanup prematurely [#8818](https://github.com/Mudlet/Mudlet/pull/8818)

– table.update no longer errors when replacing non-table with table [#8694](https://github.com/Mudlet/Mudlet/pull/8694) [#8751](https://github.com/Mudlet/Mudlet/pull/8751)

– Editor actions not working on initial open [#7482](https://github.com/Mudlet/Mudlet/pull/7482) [#8753](https://github.com/Mudlet/Mudlet/pull/8753)

– Revert map rendering optimization causing issues [#8809](https://github.com/Mudlet/Mudlet/pull/8809)

– Medievia encoding showing error in preferences dropdown [#8811](https://github.com/Mudlet/Mudlet/pull/8811)

– MXP FRAME close tags appearing as literal text [#8808](https://github.com/Mudlet/Mudlet/pull/8808)

– Timer groups [display](https://wiki.mudlet.org/w/Manual:Lua_Functions#display) correct icons when drag-dropped [#8802](https://github.com/Mudlet/Mudlet/pull/8802)

– Map labels appear crisp at all zoom levels [#8795](https://github.com/Mudlet/Mudlet/pull/8795)

– honor 'disable automatic updates' setting when installer is already downloaded [#8409](https://github.com/Mudlet/Mudlet/pull/8409)

– OSC sequences with BEL terminator no longer swallow output [#3912](https://github.com/Mudlet/Mudlet/pull/3912) [#8750](https://github.com/Mudlet/Mudlet/pull/8750)

– Windows crash when saving profile config [#8427](https://github.com/Mudlet/Mudlet/pull/8427) [#8428](https://github.com/Mudlet/Mudlet/pull/8428)

– Big5 and East Asian text encodings not working on Linux [#8787](https://github.com/Mudlet/Mudlet/pull/8787)

– compile in latest development due to map update changes [#8800](https://github.com/Mudlet/Mudlet/pull/8800)

– Improve error handling in [setLabelStyleSheet](https://wiki.mudlet.org/w/Manual:Lua_Functions#setLabelStyleSheet)() [#8446](https://github.com/Mudlet/Mudlet/pull/8446)

– Add outline to area exit arrows for visibility on matching backgrounds [#8794](https://github.com/Mudlet/Mudlet/pull/8794)

– mapper not reopenable after closing via X button [#8401](https://github.com/Mudlet/Mudlet/pull/8401)

– Disable 'Activate' button in Variables view [#8441](https://github.com/Mudlet/Mudlet/pull/8441)

– Prevent crash in MXP watchdog callback [#8785](https://github.com/Mudlet/Mudlet/pull/8785)

– Memory leaks in ScriptUnit and ActionUnit (8,856 bytes) when opening/closing profile [#8781](https://github.com/Mudlet/Mudlet/pull/8781)

– Potential crash during automatic update download [#8776](https://github.com/Mudlet/Mudlet/pull/8776)

– Include full version in Sentry crash reports for PTB builds [#8779](https://github.com/Mudlet/Mudlet/pull/8779)

– Improve build documentation clarity for terminal execution [#8774](https://github.com/Mudlet/Mudlet/pull/8774)

– Regex triggers now respect 'keep' background color setting [#8402](https://github.com/Mudlet/Mudlet/pull/8402)

– Remove unnecessary allocation in filter trigger matching [#8763](https://github.com/Mudlet/Mudlet/pull/8763)

– default new profiles to UTF-8 encoding instead of ASCII [#8759](https://github.com/Mudlet/Mudlet/pull/8759)

– Accessibility crash with out-of-range offset [#8310](https://github.com/Mudlet/Mudlet/pull/8310) [#8752](https://github.com/Mudlet/Mudlet/pull/8752)

– named captures indexed incorrectly in multimatches with special line types [#8748](https://github.com/Mudlet/Mudlet/pull/8748)

– Update trigger icons immediately when dragging in editor [#8746](https://github.com/Mudlet/Mudlet/pull/8746)

– connections to MMapper [#8730](https://github.com/Mudlet/Mudlet/pull/8730)

– prevent module autosave from overwriting failed-to-load modules [#8696](https://github.com/Mudlet/Mudlet/pull/8696)

– GMCP media finish parameter not working [#8740](https://github.com/Mudlet/Mudlet/pull/8740)

– Modules not loading when reopening a profile [#8739](https://github.com/Mudlet/Mudlet/pull/8739)

– Package Exporter unable to export packages [#8629](https://github.com/Mudlet/Mudlet/pull/8629) [#8630](https://github.com/Mudlet/Mudlet/pull/8630)

– Memory leaks in core components [#8716](https://github.com/Mudlet/Mudlet/pull/8716)

– Windows installer failing after update [#8710](https://github.com/Mudlet/Mudlet/pull/8710)

– Down arrow saves typed text before clearing [#8705](https://github.com/Mudlet/Mudlet/pull/8705)

– Restore Windows application icon [#8703](https://github.com/Mudlet/Mudlet/pull/8703)

– set enableMXP when MXP is autodetected [#8701](https://github.com/Mudlet/Mudlet/pull/8701)

– 8 CodeQL 'comparison result is always the same' warnings [#8691](https://github.com/Mudlet/Mudlet/pull/8691)

– CodeQL inconsistent nullness check errors in temp trigger functions [#8690](https://github.com/Mudlet/Mudlet/pull/8690)

– restrict MXP auto-detection to ESC sequences only [#8692](https://github.com/Mudlet/Mudlet/pull/8692)

– Windows Start Menu shortcut missing after install [#8686](https://github.com/Mudlet/Mudlet/pull/8686)

– Use fixed delay instead of waiting for crashpad [#8679](https://github.com/Mudlet/Mudlet/pull/8679)

– Windows updates failing due to locked folder [#8678](https://github.com/Mudlet/Mudlet/pull/8678)

– Wait for crashpad_handler.exe to exit before running installer [#8676](https://github.com/Mudlet/Mudlet/pull/8676)

– [copy](https://wiki.mudlet.org/w/Manual:Lua_Functions#copy) downloaded installer instead of moving file on Windows [#8675](https://github.com/Mudlet/Mudlet/pull/8675)

– Create shortcuts when handling Squirrel install events [#8672](https://github.com/Mudlet/Mudlet/pull/8672)

– Wait for Mudlet to exit before running installer on Windows [#8673](https://github.com/Mudlet/Mudlet/pull/8673)

– Handle Squirrel installer startup commands on Windows to prevent Mudlet getting closed [#8666](https://github.com/Mudlet/Mudlet/pull/8666)

– Prevent crashpad_handler from getting a Windows Start Menu entry [#8659](https://github.com/Mudlet/Mudlet/pull/8659)

– Windows updater file lock issue in dblsqd (prevented updates) [#8661](https://github.com/Mudlet/Mudlet/pull/8661)

– Windows updater launch using batch file to avoid quoting issues when updating PTBs [#8663](https://github.com/Mudlet/Mudlet/pull/8663)

– Mudlet freeze when receiving large amounts of data [#8644](https://github.com/Mudlet/Mudlet/pull/8644)

– Container overflow crash when processing text [#8647](https://github.com/Mudlet/Mudlet/pull/8647)

– Build failures after dependency updates [#8645](https://github.com/Mudlet/Mudlet/pull/8645)

– package manager loses title on uninstall [#8625](https://github.com/Mudlet/Mudlet/pull/8625)

– Windows updater deleting itself during update [#8622](https://github.com/Mudlet/Mudlet/pull/8622)

– crash in bi-daily update check [#8620](https://github.com/Mudlet/Mudlet/pull/8620)

– crash in bi-daily update check

– clicking on stacked rooms selects all of them [#8616](https://github.com/Mudlet/Mudlet/pull/8616)

– use-after-free crash when calling [registerMapInfo](https://wiki.mudlet.org/w/Manual:Lua_Functions#registerMapInfo) [#8609](https://github.com/Mudlet/Mudlet/pull/8609)

– Prevent crash during Mudlet shutdown when closing profiles [#8606](https://github.com/Mudlet/Mudlet/pull/8606)

– Forward secrets.SENTRY_DSN to CMake on Windows [#8615](https://github.com/Mudlet/Mudlet/pull/8615)

– Static fonts configured in 4.19.1 continue working after upgrade [#8545](https://github.com/Mudlet/Mudlet/pull/8545)

– convert raw Qt pointers to QPointer to prevent use-after-free [#8610](https://github.com/Mudlet/Mudlet/pull/8610)

– maintain backwards compatibility when loading rex_pcre2 [#8599](https://github.com/Mudlet/Mudlet/pull/8599)

– missing encodings in dropdown for Qt6 [#8605](https://github.com/Mudlet/Mudlet/pull/8605)

– Medievia encoding error in preferences dropdown [#8608](https://github.com/Mudlet/Mudlet/pull/8608)

– load PCRE2 in LuaGlobal [#8598](https://github.com/Mudlet/Mudlet/pull/8598)

– fix inconsistent nullness checks [#8586](https://github.com/Mudlet/Mudlet/pull/8586)

– Test builds now use keychain for password storage [#8589](https://github.com/Mudlet/Mudlet/pull/8589)

– Heap-use-after-free crash when closing profiles with active triggers [#8567](https://github.com/Mudlet/Mudlet/pull/8567)

– heap-use-after-free when cleanup runs during alias/trigger/key processing [#8571](https://github.com/Mudlet/Mudlet/pull/8571)

– potential issue in area image export [#8585](https://github.com/Mudlet/Mudlet/pull/8585)

– Restore Qt5 Core5Compat for third-party dependencies [#8578](https://github.com/Mudlet/Mudlet/pull/8578)

– Reduce redundant UTF-8 conversions in trigger processing [#8560](https://github.com/Mudlet/Mudlet/pull/8560)

– Improve performance of hyperlink style parsing [#8558](https://github.com/Mudlet/Mudlet/pull/8558)

– Remove duplicate context menu on AdjustableContainer title bar [#8569](https://github.com/Mudlet/Mudlet/pull/8569)

– Copy from console now works when command line has focus [#8551](https://github.com/Mudlet/Mudlet/pull/8551)

– Remove deprecated Qt5 Core5Compat dependency [#8550](https://github.com/Mudlet/Mudlet/pull/8550)

– crash when rapidly reloading plugins due to thread-safety issue in XML export [#8542](https://github.com/Mudlet/Mudlet/pull/8542)

– switch to FFMPEG audio backend on Windows to allow playback of .ogg and .opus audio files [#8329](https://github.com/Mudlet/Mudlet/pull/8329)

– Debug console crash when host is deleted [#8549](https://github.com/Mudlet/Mudlet/pull/8549)

– Special exit text unreadable when editing [#8543](https://github.com/Mudlet/Mudlet/pull/8543)

– Comprehensive package installation crash prevention [#8541](https://github.com/Mudlet/Mudlet/pull/8541)

– Auto-activate new triggers/aliases/scripts/keys on save [#8529](https://github.com/Mudlet/Mudlet/pull/8529)

– Unicode characters [display](https://wiki.mudlet.org/w/Manual:Lua_Functions#display) correctly in unhandled MXP tags [#8532](https://github.com/Mudlet/Mudlet/pull/8532)

##### Infrastructure:
– Swap out QtConcurrent module header for sub-module ones [#9246](https://github.com/Mudlet/Mudlet/pull/9246)

– update CONTRIBUTING.md with AI coding guidelines [#9224](https://github.com/Mudlet/Mudlet/pull/9224)

– Bump lukka/get-cmake from 4.3.1 to 4.3.2 [#9221](https://github.com/Mudlet/Mudlet/pull/9221)

– Bump leafo/gh-actions-lua from 12 to 13 [#9222](https://github.com/Mudlet/Mudlet/pull/9222)

– Bump 3rdparty/sentry-native from `848fd4c` to `87f25f2` [#9220](https://github.com/Mudlet/Mudlet/pull/9220)

– apply clang-format style to tests too [#9201](https://github.com/Mudlet/Mudlet/pull/9201)

– Bump 3rdparty/sentry-native from `93c4e32` to `848fd4c` [#9202](https://github.com/Mudlet/Mudlet/pull/9202)

– Bump carlosperate/download-file-action from 2.0.2 to 2.0.3 [#9203](https://github.com/Mudlet/Mudlet/pull/9203)

– fix flaky TelnetTextDisplayedTest in CI [#9193](https://github.com/Mudlet/Mudlet/pull/9193)

– fix partial PTB releases not triggering when push build [exists](https://wiki.mudlet.org/w/Manual:Lua_Functions#exists) at same SHA [#9192](https://github.com/Mudlet/Mudlet/pull/9192)

– fix Windows SHA256 missing from PTB releases [#9191](https://github.com/Mudlet/Mudlet/pull/9191)

– allow partial PTB releases when not all platforms succeed [#9163](https://github.com/Mudlet/Mudlet/pull/9163)

– migrate undo/redo tests to QTest framework [#8867](https://github.com/Mudlet/Mudlet/pull/8867)

– stop deleting and recreating GitHub releases on every build [#9176](https://github.com/Mudlet/Mudlet/pull/9176)

– skip duplicate PTB builds when no new commits exist [#9175](https://github.com/Mudlet/Mudlet/pull/9175)

– sync edbee-lib submodule to fork master [#9183](https://github.com/Mudlet/Mudlet/pull/9183)

– Bump actions/download-artifact from 4 to 8 [#9179](https://github.com/Mudlet/Mudlet/pull/9179)

– Bump actions/github-script from 7 to 9 [#9181](https://github.com/Mudlet/Mudlet/pull/9181)

– Bump 3rdparty/sentry-native from `6ebd29b` to `93c4e32` [#9178](https://github.com/Mudlet/Mudlet/pull/9178)

– fix Windows and macOS nightly build failures [#9173](https://github.com/Mudlet/Mudlet/pull/9173)

– add missing statuses:write permission to DangerJS workflow [#9172](https://github.com/Mudlet/Mudlet/pull/9172)

– fix DangerJS workflow vulnerability to malicious PRs [#9143](https://github.com/Mudlet/Mudlet/pull/9143)

– add non-compileable files to CMake project file [#8780](https://github.com/Mudlet/Mudlet/pull/8780)

– update sentry-native to 0.13.5 [#9158](https://github.com/Mudlet/Mudlet/pull/9158)

– update edbee-lib submodule & use system oniguruma if present [#9156](https://github.com/Mudlet/Mudlet/pull/9156)

– fix PTB registration by reverting installer filename convention [#9155](https://github.com/Mudlet/Mudlet/pull/9155)

– show changelogs both from last release and last PTB [#9151](https://github.com/Mudlet/Mudlet/pull/9151)

– fix CI bugs in PTB registration, macOS updater linking, and portable ZIP upload [#9154](https://github.com/Mudlet/Mudlet/pull/9154)

– fix Windows release asset upload and appcast SCP paths [#9152](https://github.com/Mudlet/Mudlet/pull/9152)

– fix Windows PTB registration failing after installer rename [#9150](https://github.com/Mudlet/Mudlet/pull/9150)

– release workflow failing due to PR build triggers and checkout wiping assets [#9145](https://github.com/Mudlet/Mudlet/pull/9145)

– add CI workflow to create GitHub Releases for updater [#9127](https://github.com/Mudlet/Mudlet/pull/9127)

– Update text for translation in Crowdin [#9136](https://github.com/Mudlet/Mudlet/pull/9136)

– Bump lukka/get-cmake from 4.3.0 to 4.3.1 [#9139](https://github.com/Mudlet/Mudlet/pull/9139)

– Add comprehensive variable editor tests [#9103](https://github.com/Mudlet/Mudlet/pull/9103)

– add comprehensive [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() test suite [#9082](https://github.com/Mudlet/Mudlet/pull/9082)

– add cross-reference comments to duplicate build workflows [#9069](https://github.com/Mudlet/Mudlet/pull/9069)

– remove disabled clang-tidy workflows [#9113](https://github.com/Mudlet/Mudlet/pull/9113)

– Bump 3rdparty/qtkeychain from `6e90eda` to `53a8e6a` [#9126](https://github.com/Mudlet/Mudlet/pull/9126)

– Update text for translation in Crowdin [#9124](https://github.com/Mudlet/Mudlet/pull/9124)

– speed up OSC tests with data-driven approach [#9120](https://github.com/Mudlet/Mudlet/pull/9120)

– Add Copilot skill for opening pull requests [#9105](https://github.com/Mudlet/Mudlet/pull/9105)

– Bump 3rdparty/qtkeychain from `844beb4` to `6e90eda` [#8973](https://github.com/Mudlet/Mudlet/pull/8973)

– Update text for translation in Crowdin [#9077](https://github.com/Mudlet/Mudlet/pull/9077)

– disable CodeQL poorly-documented-function query [#9079](https://github.com/Mudlet/Mudlet/pull/9079)

– Bump webfactory/ssh-agent from 0.9.1 to 0.10.0 [#9047](https://github.com/Mudlet/Mudlet/pull/9047)

– restore xcb-util-cursor resiliency changes [#9074](https://github.com/Mudlet/Mudlet/pull/9074)

– Bump lukka/get-cmake from 4.2.3 to 4.3.0 [#9087](https://github.com/Mudlet/Mudlet/pull/9087)

– Fix macOS CI: use AppleClang instead of Homebrew LLVM [#9078](https://github.com/Mudlet/Mudlet/pull/9078)

– remove leftover qgridlayout ordering script [#9075](https://github.com/Mudlet/Mudlet/pull/9075)

– enable set -e in Linux CI deploy script to catch failures [#9059](https://github.com/Mudlet/Mudlet/pull/9059)

– install `libspeechd-dev` for Linux CI to fix AppImage creation [#9058](https://github.com/Mudlet/Mudlet/pull/9058)

– Migrate to clang64 msys2 environment for Windows builds [#9064](https://github.com/Mudlet/Mudlet/pull/9064)

– remove ccache mutex locks [#9043](https://github.com/Mudlet/Mudlet/pull/9043)

– add retries to brew install to handle hangs [#9045](https://github.com/Mudlet/Mudlet/pull/9045)

– remove CodeQL CI's concurrency [#9044](https://github.com/Mudlet/Mudlet/pull/9044)

– Fix windows builds in `development` [#9042](https://github.com/Mudlet/Mudlet/pull/9042)

– Bump development version to 4.20.1 [#9050](https://github.com/Mudlet/Mudlet/pull/9050)

– Update text for translation in Crowdin [#9040](https://github.com/Mudlet/Mudlet/pull/9040)

– remove qgridlayout ordering workflow [#9038](https://github.com/Mudlet/Mudlet/pull/9038)

– Update autocompletion data in Mudlet [#9041](https://github.com/Mudlet/Mudlet/pull/9041)

– update target path for file upload in geyser-docs workflow [#9030](https://github.com/Mudlet/Mudlet/pull/9030)

– Change SCP target host for file uploads [#9003](https://github.com/Mudlet/Mudlet/pull/9003)

– Dedicated workflow for prs [#9033](https://github.com/Mudlet/Mudlet/pull/9033)

– Remove unnecessary null checks after new [#9014](https://github.com/Mudlet/Mudlet/pull/9014)

– speed up compilation of Mudlet by 25% [#9021](https://github.com/Mudlet/Mudlet/pull/9021)

– Enable TTS in macOS builds [#8921](https://github.com/Mudlet/Mudlet/pull/8921)

– make xcb-util-cursor download more resilient [#9012](https://github.com/Mudlet/Mudlet/pull/9012)

– re-introduce path stripping in geyser-docs.yaml [#9023](https://github.com/Mudlet/Mudlet/pull/9023)

– ccache key should be per pr/branch [#9010](https://github.com/Mudlet/Mudlet/pull/9010)

– use release-signing for releases, test-signing for PTBs [#9007](https://github.com/Mudlet/Mudlet/pull/9007)

– always run build ci in core branches [#9008](https://github.com/Mudlet/Mudlet/pull/9008)

– Update text for translation in Crowdin [#9009](https://github.com/Mudlet/Mudlet/pull/9009)

– increase SignPath signing timeout to 1 hour [#9002](https://github.com/Mudlet/Mudlet/pull/9002)

– Refactor geyser doc upload workflow [#9001](https://github.com/Mudlet/Mudlet/pull/9001)

– run undo/redo tests in test mode [#8992](https://github.com/Mudlet/Mudlet/pull/8992)

– fix unintended ccache collisions [#8991](https://github.com/Mudlet/Mudlet/pull/8991)

– Bump actions/upload-artifact from 6 to 7 [#8989](https://github.com/Mudlet/Mudlet/pull/8989)

– CI concurrency logic [#8990](https://github.com/Mudlet/Mudlet/pull/8990)

– Bump ZedThree/clang-tidy-review from 0.23.0 to 0.23.1 [#8988](https://github.com/Mudlet/Mudlet/pull/8988)

– Update text for translation in Crowdin [#8940](https://github.com/Mudlet/Mudlet/pull/8940)

– [ImgBot] Optimize images [#8925](https://github.com/Mudlet/Mudlet/pull/8925)

– Bump development version to 4.20.0 [#8919](https://github.com/Mudlet/Mudlet/pull/8919)

– Bump 3rdparty/sentry-native from `c80e793` to `383ccad` [#8913](https://github.com/Mudlet/Mudlet/pull/8913)

– Add SignPath Foundation attribution to README [#8895](https://github.com/Mudlet/Mudlet/pull/8895)

– Update autocompletion data in Mudlet [#8903](https://github.com/Mudlet/Mudlet/pull/8903)

– Update text for translation in Crowdin [#8901](https://github.com/Mudlet/Mudlet/pull/8901)

– use pcre2grep in CI validation [#8878](https://github.com/Mudlet/Mudlet/pull/8878)

– set next-next release to be 4.21.0 [#8883](https://github.com/Mudlet/Mudlet/pull/8883)

– disable signing MudletCrashReporter.exe temporarily [#8880](https://github.com/Mudlet/Mudlet/pull/8880)

– add qtkeychain-qt6-dev to Linux workflows [#8876](https://github.com/Mudlet/Mudlet/pull/8876)

– switch qtkeychain submodule to upstream [#8870](https://github.com/Mudlet/Mudlet/pull/8870)

– detect Lua test failures on macOS CI [#8852](https://github.com/Mudlet/Mudlet/pull/8852)

– Remove x64 from Windows PTB desktop shortcut name [#8845](https://github.com/Mudlet/Mudlet/pull/8845)

– Bump lukka/get-cmake from 4.2.2 to 4.2.3 [#8844](https://github.com/Mudlet/Mudlet/pull/8844)

– Bump 3rdparty/sentry-native from `08b1374` to `c80e793` [#8843](https://github.com/Mudlet/Mudlet/pull/8843)

– Update text for translation in Crowdin [#8839](https://github.com/Mudlet/Mudlet/pull/8839)

– Fix SignPath code signing policy configuration [#8834](https://github.com/Mudlet/Mudlet/pull/8834)

– Revert uploading debug symbols to Sentry for PR builds [#8832](https://github.com/Mudlet/Mudlet/pull/8832)

– Fix Windows code signing by adding SignPath v2 policy file [#8831](https://github.com/Mudlet/Mudlet/pull/8831)

– Upload debug symbols to Sentry for PR builds [#8830](https://github.com/Mudlet/Mudlet/pull/8830)

– Remove unused QKeychain forward declarations from CredentialManager.h [#8829](https://github.com/Mudlet/Mudlet/pull/8829)

– Remove dead CMake code in Sentry configuration [#8828](https://github.com/Mudlet/Mudlet/pull/8828)

– Bump lukka/get-cmake from 3.30.3 to 4.2.2 [#8822](https://github.com/Mudlet/Mudlet/pull/8822)

– Bump actions/upload-artifact from 4 to 6 [#8823](https://github.com/Mudlet/Mudlet/pull/8823)

– Bump actions/cache from 4 to 5 [#8821](https://github.com/Mudlet/Mudlet/pull/8821)

– Bump 3rdparty/sentry-native from `bbccfad` to `08b1374` [#8820](https://github.com/Mudlet/Mudlet/pull/8820)

– Cache sentry-native builds in CI [#8807](https://github.com/Mudlet/Mudlet/pull/8807)

– Add .git-blame-ignore-revs for formatting commits [#8805](https://github.com/Mudlet/Mudlet/pull/8805)

– Update text for translation in Crowdin [#8816](https://github.com/Mudlet/Mudlet/pull/8816)

– update plural american english translations [#8478](https://github.com/Mudlet/Mudlet/pull/8478)

– add clang-format instructions to AI guidelines [#8806](https://github.com/Mudlet/Mudlet/pull/8806)

– Apply clang-format to all CPP files [#8804](https://github.com/Mudlet/Mudlet/pull/8804)

– Add SignPath code signing for Windows builds [#8786](https://github.com/Mudlet/Mudlet/pull/8786)

– update clang-format style to match Mudlets as much as possible [#8380](https://github.com/Mudlet/Mudlet/pull/8380)

– Enable Qt breadcrumbs in Sentry crash reports [#8791](https://github.com/Mudlet/Mudlet/pull/8791)

– Fix Windows nightly build failure when no new commits [#8790](https://github.com/Mudlet/Mudlet/pull/8790)

– Bump 3rdparty/sentry-native from `11832e4` to `bbccfad` [#8792](https://github.com/Mudlet/Mudlet/pull/8792)

– upload Qt module debug symbols to Sentry using cv2pdb [#8782](https://github.com/Mudlet/Mudlet/pull/8782)

– Update autocompletion data in Mudlet [#8789](https://github.com/Mudlet/Mudlet/pull/8789)

– Update text for translation in Crowdin [#8788](https://github.com/Mudlet/Mudlet/pull/8788)

– Upload Qt debug symbols to Sentry for better crash reports [#8777](https://github.com/Mudlet/Mudlet/pull/8777)

– Remove Azure trusted signing from Windows builds [#8778](https://github.com/Mudlet/Mudlet/pull/8778)

– Bump 3rdparty/edbee-lib from `cf7f0ba` to `7e7c0f6` [#8770](https://github.com/Mudlet/Mudlet/pull/8770)

– Bump 3rdparty/sentry-native from `4f983bb` to `11832e4` [#8771](https://github.com/Mudlet/Mudlet/pull/8771)

– remove `travis.` [prefix](https://wiki.mudlet.org/w/Manual:Lua_Functions#prefix) from CI files [#8375](https://github.com/Mudlet/Mudlet/pull/8375)

– Update autocompletion data in Mudlet [#8769](https://github.com/Mudlet/Mudlet/pull/8769)

– Update text for translation in Crowdin [#8767](https://github.com/Mudlet/Mudlet/pull/8767)

– Update bundled mpkg.mpackage to latest upstream [#8768](https://github.com/Mudlet/Mudlet/pull/8768)

– reduce Mudlet build times by 30s [#8403](https://github.com/Mudlet/Mudlet/pull/8403)

– Add Claude Code slash command for creating PRs [#8761](https://github.com/Mudlet/Mudlet/pull/8761)

– Guard undo/redo debug messages behind compile flag [#8760](https://github.com/Mudlet/Mudlet/pull/8760)

– Simplify profile loading code [#8756](https://github.com/Mudlet/Mudlet/pull/8756)

– Improve code readability with cleaner empty checks [#8755](https://github.com/Mudlet/Mudlet/pull/8755)

– Reduce noise in automated code review comments [#8754](https://github.com/Mudlet/Mudlet/pull/8754)

– simplify CI 3rd party update workflow [#8737](https://github.com/Mudlet/Mudlet/pull/8737)

– improve safety of internal text handling [#8724](https://github.com/Mudlet/Mudlet/pull/8724)

– uppercase settings key in config [#8246](https://github.com/Mudlet/Mudlet/pull/8246)

– Simplify build system by removing unused QMake files [#8731](https://github.com/Mudlet/Mudlet/pull/8731)

– modernize loop syntax across codebase [#8733](https://github.com/Mudlet/Mudlet/pull/8733)

– simplify cmake build configuration [#8732](https://github.com/Mudlet/Mudlet/pull/8732)

– simplify network connection handling [#8735](https://github.com/Mudlet/Mudlet/pull/8735)

– Add a security policy for reporting vulnerabilities [#8723](https://github.com/Mudlet/Mudlet/pull/8723)

– Update text for translation in Crowdin [#8728](https://github.com/Mudlet/Mudlet/pull/8728)

– Update autocompletion data in Mudlet [#8729](https://github.com/Mudlet/Mudlet/pull/8729)

– revise displayed Copyright year to 2026 [#8727](https://github.com/Mudlet/Mudlet/pull/8727)

– eliminate remains of qt-ordered-map from Mudlet [#8720](https://github.com/Mudlet/Mudlet/pull/8720)

– Clarify CI build option label [#8714](https://github.com/Mudlet/Mudlet/pull/8714)

– allow CMake `initGitSubmodule.cmake` to act recursively [#8717](https://github.com/Mudlet/Mudlet/pull/8717)

– run memory leak checks as part of CI pipeline [#8316](https://github.com/Mudlet/Mudlet/pull/8316)

– remove debug logging from undo/redo feature [#8713](https://github.com/Mudlet/Mudlet/pull/8713)

– Update text for translation in Crowdin [#8698](https://github.com/Mudlet/Mudlet/pull/8698)

– check for sentry-native submodule when Sentry enabled [#8669](https://github.com/Mudlet/Mudlet/pull/8669)

– address feedback in event handling from no-op operations [#8667](https://github.com/Mudlet/Mudlet/pull/8667)

– Add telnet processing speed benchmark [#8658](https://github.com/Mudlet/Mudlet/pull/8658)

– Replace foreach with C++17 structured bindings [#8664](https://github.com/Mudlet/Mudlet/pull/8664)

– Add ccache stats to Windows build workflow [#8671](https://github.com/Mudlet/Mudlet/pull/8671)

– Fix Windows PTB rebuild versioning for Squirrel [#8670](https://github.com/Mudlet/Mudlet/pull/8670)

– allow Windows PTB builds to be re-done on the same day [#8668](https://github.com/Mudlet/Mudlet/pull/8668)

– fix crashes in undo/redo tests [#8665](https://github.com/Mudlet/Mudlet/pull/8665)

– add proper Qt event propagation in all events [#8444](https://github.com/Mudlet/Mudlet/pull/8444)

– Bump actions/upload-artifact from 5 to 6 [#8657](https://github.com/Mudlet/Mudlet/pull/8657)

– Ignore lcf submodule in Dependabot, remove vcpkg [#8654](https://github.com/Mudlet/Mudlet/pull/8654)

– Bump ZedThree/clang-tidy-review from 0.22.2 to 0.22.3 [#8656](https://github.com/Mudlet/Mudlet/pull/8656)

– Update Lua code formatter to latest upstream branch [#8653](https://github.com/Mudlet/Mudlet/pull/8653)

– Bump 3rdparty/sentry-native from `67a9f8e` to `4f983bb` [#8637](https://github.com/Mudlet/Mudlet/pull/8637)

– Bump peter-evans/create-pull-request from 7 to 8 [#8638](https://github.com/Mudlet/Mudlet/pull/8638)

– Bump 3rdparty/lcf from `4aa2502` to `55aaf85` [#8639](https://github.com/Mudlet/Mudlet/pull/8639)

– Bump actions/cache from 4 to 5 [#8636](https://github.com/Mudlet/Mudlet/pull/8636)

– Update autocompletion data in Mudlet [#8634](https://github.com/Mudlet/Mudlet/pull/8634)

– Update text for translation in Crowdin [#8633](https://github.com/Mudlet/Mudlet/pull/8633)

– SENTRY_AUTH_TOKEN diagnostic checks environment variable [#8618](https://github.com/Mudlet/Mudlet/pull/8618)

– Bump 3rdparty/sentry-native from `c5416e6` to `67a9f8e` [#8617](https://github.com/Mudlet/Mudlet/pull/8617)

– Update text for translation in Crowdin [#8613](https://github.com/Mudlet/Mudlet/pull/8613)

– add workaround clang-tidy-review directory bug [#8597](https://github.com/Mudlet/Mudlet/pull/8597)

– update communi to qt6 [#8584](https://github.com/Mudlet/Mudlet/pull/8584)

– more fixes to clang-tidy workflow [#8596](https://github.com/Mudlet/Mudlet/pull/8596)

– fix clang-tidy workflow [#8595](https://github.com/Mudlet/Mudlet/pull/8595)

– update Qtkeychain submodule from master to main branch [#8579](https://github.com/Mudlet/Mudlet/pull/8579)

– Bump ZedThree/clang-tidy-review from 0.22.1 to 0.22.2 [#8594](https://github.com/Mudlet/Mudlet/pull/8594)

– ignore macOS keychain for telnet functional test [#8592](https://github.com/Mudlet/Mudlet/pull/8592)

– complete devcontainer setup [#8587](https://github.com/Mudlet/Mudlet/pull/8587)

– Update text for translation in Crowdin [#8590](https://github.com/Mudlet/Mudlet/pull/8590)

– remove item check in saveSelectedItem [#8583](https://github.com/Mudlet/Mudlet/pull/8583)

– Remove else-after-return anti-pattern [#8575](https://github.com/Mudlet/Mudlet/pull/8575)

– update devcontainer to work [#8321](https://github.com/Mudlet/Mudlet/pull/8321)

– Bump ZedThree/clang-tidy-review from 0.22.0 to 0.22.1 [#8564](https://github.com/Mudlet/Mudlet/pull/8564)

– Bump actions/checkout from 5 to 6 [#8565](https://github.com/Mudlet/Mudlet/pull/8565)

– Bump 3rdparty/edbee-lib from `165edc0` to `cf7f0ba` [#8563](https://github.com/Mudlet/Mudlet/pull/8563)

– Update text for translation in Crowdin [#8561](https://github.com/Mudlet/Mudlet/pull/8561)

– Update AI instructions with comments and git guidelines [#8531](https://github.com/Mudlet/Mudlet/pull/8531)

– Fix CMake CMP0167 warning for Boost [#8538](https://github.com/Mudlet/Mudlet/pull/8538)

– Add NINJA_STATUS to Windows build [#8539](https://github.com/Mudlet/Mudlet/pull/8539)

– update Noto Color Emoji font to Unicode 17.0 v2.051 [#8535](https://github.com/Mudlet/Mudlet/pull/8535)

– Add regex busted tests for PCRE library [#8537](https://github.com/Mudlet/Mudlet/pull/8537)

##### Other:
– Revert "Add per-room border color and thickness"

– Revert "Fix crash in bi-daily update check"

read more