April 2026: Bug fixes, workflow polish, and initial accessibility support
This release focuses mostly on bug fixes, workflow polish, and groundwork for future stability. The most visible addition is initial accessibility support across several core views, alongside a number of smaller improvements that should make day-to-day debugging smoother.
🤖 Automation
❗ If you are experimenting with agent-assisted reverse engineering, you might want to check out x64dbg-skills by @darbonzo. It is built on top of x64dbg Automate MCP, and the accompanying cookbook post walks through practical reverse engineering workflows.
This is not part of x64dbg itself, but it is a nice example of the kind of tooling that is starting to form around automation and scripting. The headless executable has been fleshed out a bit more as well, mostly to support testing.
✨ Everyday improvements
A lot of the work in this release shows up as small improvements in places you use all the time.
Pattern finding got a usability/performance pass, making it easier to work with. Breakpoint expressions now validate directly in the dialog with clear red and green feedback, which should make it much easier to catch mistakes before saving a condition. You can also edit the raw bytes of a register directly, save graph images as PDF, and highlight the call stack by module or symbol.
There are also a number of smaller quality-of-life improvements: bulk toggling software breakpoints on selected instructions, cycling hotkeys for dump view modes, copy shortcuts in more places, faster filtering in search lists, and clearer naming around trace coverage options.
This release also fixes several frustrating issues that could get in the way of normal debugging work, including crashes with files larger than 2GB, loading DLLs without an entrypoint, loading modules when the file path is stale or the file is locked, and a fatal GUI exception when pressing Ctrl+A in search boxes.
♿ Accessibility support
This release introduces the first accessibility support in x64dbg. Registers, Disassembly, Hex Dump, Trace Browser and most table-based views now expose accessibility information that can be used by screen readers and other assistive or UI automation tools.
There are also a number of supporting fixes in this area, including additional accessibility names, improved table behavior, and follow-up fixes for the new registers view. This is still only a first step, but it lays the groundwork for using x64dbg in environments where accessibility APIs matter.
🧪 Reliability and testing
Much of the less visible work in this release went into reducing regressions.
A new test framework has been added and memory breakpoint coverage was expanded significantly. There were also many fixes around testing lifecycle issues, headless behavior, tracing, and scripting edge cases. This kind of work is not flashy, but it should help catch problems earlier and make snapshots more trustworthy over time.
A few other fixes in this area are worth calling out too: tracing performance was improved, trace parsing became more robust, patch import undo was fixed, and several issues around command line handling, elevation, and general UI behavior were cleaned up.
🐧 A small Linux experiment
Thanks entirely to @3rdit, the first pre-alpha pieces of a Linux debugger based on the new ElfBug engine have been merged, together with an AppImage build for the cross/debugger project.
The point of this work is not to ship a polished Linux port. Instead it gives us a proving ground for the cross-platform widget library that is slowly taking shape, and @3rdit is also the one maintaining this effort going forward. Below is a screenshot of x64dbg running on the Steam Deck:
🤝 Community
x64dbg is a community-driven project, and this release would not have been possible without the incredible work of our contributors. A huge thank you to everyone who contributed code, reported bugs, and helped shape this release ❤️
We recently revamped the Discord community, which you can join below:
Other platforms are synchronized with the #general channel:
Slack Gitter Matrix IRC
❤️ Sponsors
This project is also made possible by the generous support of sponsors. Active sponsors: @xxr0ss, @Vlavv, @lupier, @tobiaskocur, @PhilipPanda, @junquera, @sanglantes, @BeAllAround, @pawlos, @cyb3rjerry, @matthias-hoffrichter, @sanglantes, @BeAllAround, @pawlos, @grant-h, @MorpheusH3x, @re-jevi, @verdeckt, @daaximus, @stevemk14ebr, @as0ni, @sedrakpc, @Invoke-RE, @shu-tom, @buzzer-re, @expend20, @crudd, @clayne, @fr0zenbag, @dzzie
📜 Changelog
- Update API documentation
- Always display most recent release notes in development builds
- Update API and Qt licence documentation
- Update documentation building instructions
- Start reducing TitanEngine.h
- Switch to enums in TitanEngine.h
- Add type for GetDebugData
- Add more types in TitanEngine.h
- Never allow fdProcessInfo to be null #3699
- Zero initialize TITAN_ENGINE_CONTEXT_t
- Do not duplicate thread handles unnecessarily
- Allow specifying exception behavior if SetThreadName breakpoint is disabled
- Remove a few meaningless WM constants hiding real ones
- Fix compilation for cross with latest Qt6
- Fix column sorting in BreakpointsView
- Clarify address title in CPUDump + add hex byte view for consistency
- Changed ctrl+a to select all items instead of selecting all characters of search filter. by @ismaelvazquez182 in #3714
- Fix column handling in cpu disassembly by @d2k2-git in #3712
- Make SortFnHelper::operator< const to fix compilation on C++20
- Use https://github.com/actions/checkout v5 by @torusrxxx in #3729
- Implement better UX for pattern finding by @mrexodia in #3692
- Add TraceSetStepFilter command for module filtering by @mrexodia in #3731
- Allow user-defined blocks in trace and extend root JSON #3696
- Fix ordinal imports display by resolving to function names by @WindowsAPI in #3701
- Add two plugin callback for trace(StartTrace and StopTrace) (#3736)
- add shortcut 'ActionCopyDisassembly' by @d2k2-git in #3738
- check Buffer first on MemRead by @d2k2-git in #3737
- Add support to be able to edit the raw bytes of a register by @ZehMatt in #3740
- Check formatting in GitHub Actions by @mrexodia in #3741
- Add untranslated 'Copy value' action
- Blind fix for #3744 (divide by zero)
- Extend SimpleErrorBox with optional hide config parameters (#3745)
- Fix formatting
- Update README with latest sponsor information
- Improve SimpleTraceDialog to look a bit more polished
- Support closing the application via taskbar during QDialog::exec
- Fix stale taskbar preview thumbnails after closing child windows.
- Improve graph cache invalidation and use better function entry heuristic #3751
- Fix UI and crash issues in TraceFileReader when parsing trace files containing user-defined blocks. (#3752)
- Rename trace coverage options to be clearer
- Save graph image as PDF by @torusrxxx in #3728
- Fix Restart as Admin command line argument passing by @mobile46 in #3768
- Fix font changes not applying and dark theme border visibility by @mobile46 in #3767
- Prevent unintended execution after declining elevation by @3rdit in #3772
- Fix module loading when file path is stale or file is locked by @3rdit in #3777
- "Run to user code" switched to "rtu" command by @3rdit in #3778
- Expression validation added to breakpoint dialog (red and green borders) by @3rdit in #3781
- Add option to detach instead of terminate when attaching to new process by @3rdit in #3780
- Implement accessibility in RegistersView, Disassembly and most other tables by @torusrxxx in #3761
- Add PDBs when running windeployqt
- Add screenreader test code
- Add a few missing accessibility names
- Fix additional spaces in AccessibleHexDump
- Fix a bug with reordered columns
- Fix ViewCell role
- Lazily populate cell arrays
- Fix crash when parsing expression functions
- Fix clang-cl compilation and various warnings
- Fixed 2GB+ files causing a crash by @3rdit in #3784
- Fix Fatal GUI Exception when using Ctrl+A in search boxes by @mobile46 in #3766
- Ctrl+C, Shift+Insert in SearchListView.cpp by @justanotheranonymoususer in #3774
- Optimize expression evaluation for tracing performance by @torusrxxx in #3748
- Oops, all debug engines ended up being the same
- Accessibility memory management fixes
- Bump cmkr to 0.2.46
- Fix warnings in clang 21.1.8
- Revert "Accessibility memory management fixes"
- add call stack highlight by module or symbol by @bbugdigger in #3791
- faster search list filtering by @d2k2-git in #3798
- Do not export DllMain
- Update dbg settings on startup
- Fix pre-commit hook (again)
- Make windeployqt resilient against globally configured Qt environments
- Only skip symlinked deps when copying
- Hash dependencies to properly update them when updating deps
- Fix patch import undo bug by @ali-asly101 in #3796
- Test framework by @mrexodia in #3811
- Fix testing lifecycle issues
- Fix broken links in docs
- Delete some tests that were already migrated
- Fix #3467: can't load DLL with no entrypoint by @PedroLlussa in #3809
- Use more std::string in simplescript (#3814)
- Added References tab copy address shortcut by @bbugdigger in #3792
- Toggle software breakpoints across all selected instructions in the disassembly view by @bbugdigger in #3790
- Added cycling hotkeys for dump view modes by @bbugdigger in #3789
- Mem BP behavior fixes, extra test implementations by @rafaelrfreitas in #3810
- Use run trace to assist correct disassembly (experimental) by @torusrxxx in #3799
- DBG: trim script labels before duplicate checks #3813
- Add TitanEngine/GleeBug as submodules by @mrexodia in #3818
- Update release script to include debug engines
- Further cleanup and test improvements by @mrexodia in #3820
- Expand memory breakpoint regression coverage by @mrexodia in #3822
- add initial Linux debugger with ElfBug ptrace engine and cross widget support by @3rdit in #3821
- AppImage build for cross/debugger by @mrexodia in #3823
- Fix accessibility for new RegistersView
- Fix PatternLanguage.cpp after libpl changes
- Upgrade to AStyle 3.6.9 and add python port of AStyleHelper by @mrexodia in #3825
- Feature/elfbug tests and fixes by @3rdit in #3824
- Use consistent phrase for trace coverage options by @torusrxxx in #3828
- ElfBug - initial architecture detect (reject everything else for now) by @3rdit in #3826
- Fix scalar assignment to whole FPU/SIMD registers by @mrexodia in #3831
- Optimized patternfind by @0x1F9F1 in #3835
Full commit history: 2025.08.19...2026.04.20