Play immersive, multiplayer, pure-text games on Mudlet.
What is Mudlet?
Mudlet is a platform for gaming and enhancing game-play primarily with MUDs.
Mudlet provides a toolkit and supports a wide variety of protocols for players and creators to tailor an immersive game-playing experience. MUD creators can use Mudlet to add visual flair or build features into their text games. MUD players can utilize the Mudlet toolkit to script and automate parts of their gameplay or add their own visual customization for game data.
Outside the realm of MUD games, Mudlet has even been used to provide automation and features in 3D games which support in-game chat and a Telnet or similar server-console protocols.
What are MUDs?
A MUD (/ˈmʌd/; originally Multi-User Dungeon, with later variants Multi-User Dimension and Multi-User Domain),[1][2] is a multiplayer real-time virtual world, usually text-based. MUDs combine elements of role-playing games, hack and slash, player versus player, interactive fiction, and online chat. Players can read or view descriptions of rooms, objects, other players, non-player characters, and actions performed in the virtual world. Players typically interact with each other and the world by typing commands that resemble a natural language. – Wikipedia
It’s the type of game you’ll fall in love with for its ability to tell a story, have epic combat raids, devious politics, or just have a grand time with your new friends.
Key Features
- Fully Customizable User Interface
- Multiple Simultaneous Games
- Comprehensive Mapping System
- Powerful Lua Scripting and API
- In-Application Script Editor
- Import / Export Profile Data
- Various MUD Protocol Support
- Secure Connection Support
- In-App IRC Client & Lua API
- Supports Discord Rich-Presence
- Accessible for visually impaired players
Mapper
A powerful, 2D and 3D mapper with built-in pathfinding.
Mudlet News
Public Test Build
Changes since last PTB (Mudlet-4.20.1-ptb-2026-04-22-ea57a6dc)
Improved:
– 2D mapper rendering speed on single-Z-level areas #9209
Full changelog since last release (Mudlet-4.20.1)
##### Added:
– 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:
– 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 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:
– 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"
Public Test Build
Changes since last PTB (Mudlet-4.20.1-ptb-2026-04-20-14305cf6)
Fixed:
– Clazy warnings part 4 – range-loop-reference #9207
– correct use of forward declared type items in headers #9208
Infrastructure:
– apply clang-format style to tests too #9201
Full changelog since last release (Mudlet-4.20.1)
##### Added:
– 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:
– 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 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:
– 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"
Public Test Build
Changes since last PTB (Mudlet-4.20.1-ptb-2026-04-19-4c3fbd18)
Added:
– Pkuxkx as a predefined default MUD #9161
Improved:
– simplify long tooltips #8416
Fixed:
– Clazy warnings part 3 – qstring-arg #9197
Full changelog since last release (Mudlet-4.20.1)
##### Added:
– 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:
– 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 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:
– 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"
Hop in
Mudlet’s Documentation is available via the Mudlet Wiki. Translations and enhancements are welcome!
Join Community Forum or Discord server for sharing, developing, and getting support.
Mudlet source code, issues and feature requests available on Github. Translations and enhancements are welcome!





