News/ 2026/ June/ 4.21 – Mudlet, made better.

Release 4.21.0

4.21 – Mudlet, made better.

This new release of Mudlet sees 47 new features added, 77 improvements, a whopping 207 bug fixes, and 203 behind-the-scenes infrastructure changes.

The Mudlet development team is pleased to present version 4.21. This release places a strong emphasis on stability, which is reflected in the significant number of bug fixes and infrastructure updates. Since the last release the project has averaged seven code changes per day, highlighting the dedication of both the development team and the community to continuously improving Mudlet. Read on for a short rundown on some newly added games and features.

Reminder: Remember to enable automatic updates in the preferences so you get access to the latest important bug fixes.

Note: Mudlet no longer supports 32-bit Windows builds on Windows. If you are using an older 32-bit build on Windows (check the About window to find out) you will need to uninstall Mudlet, then download the latest release and reinstall. All of your things still stay.

New Default Games

Dragonfire MUD

Dragonfire MUD is an ancient LPMUD that has been online since 1989, offering deep lore and a classic text-based RPG experience. It features 16 distinctive guilds, over 10,000 unique rooms, and hundreds of custom quests that you can tackle at your own pace.

Pku XKX MUD

Peking University Heroes (pkuxkx) was first launched on Peking University in 1996. To date, it has over 80 map areas, 10000+ rooms and more than 20 martial arts sects. It boasts over 200 daily active users and is the oldest and most popular Chinese MUD in the Chinese community. Website: https://pkuxkx.net/

Beyond the Void MUD

Beyond the Void is an EverQuest-inspired text RPG that brings the world of Norrath to life with a reimagined storyline touched by an ancient alien race and its rift stones for fast travel. The Void serves as a central hub with trainers, guild masters, and trade for every profession.

Multiple Note Tabs

Another handy addition to the notepad allows for multiple tabs. All tabs reopen each session and save automatically upon closing.

Hide Default Profiles

Want to tidy up all those unnecessary profiles cluttering your connection screen? We’ve added an option to hide the default profiles and only show those you have connected to or manually created.

Telnet Handler

Mudlet can now associate itself with telnet links allowing players to connect to MUD servers with a single click from browsers or other applications, which means you can now click a link on the web to directly open up Mudlet! Here’s an example with Stickmud.

You may receive a once off popup on opening Mudlet this time asking you if you would like this to occur.

Mapper improvements

  • map label support to 3D mapper
  • hidden rooms
  • coloured room borders

Credits

Of course, none of this is possible without the huge amount of hours our volunteers donate to the project. Thanks to all testers (especially this release!), translators, wiki editors, patreons and support provided by our community on Discord! A special shout out goes to all of the coders who donated their time to the project.

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