Lees weergave
v0.16.25
[0.16.25] - 2026-10-05
If you are upgrading from v0.16.x, replace the binary (or run docker pull). If you are upgrading from v0.15.x and below, please read the upgrading documentation for more information on how to upgrade from previous versions.
Added
Changed
Fixed
- JMAP: Creating a
MaskedEmailwithemailDomainfails withforbiddenfor every domain when the account has addresses on more than one domain. - Autodiscover: Requests for a response schema other than Outlook's, such as ActiveSync (
mobilesync), are answered with the Outlook settings instead of error 601. - IMAP:
LOGINandAUTHENTICATEwith a wrong, expired or unknown app password or API key are answered with an untaggedNO, so clients keep waiting for the command to complete until the connection times out.- The failed login that exceeds the maximum number of authentication failures is answered with an untagged
NObefore the connection is closed.
- DKIM:
- A rotation moves the active key to retiring even when its successor fails to publish or propagate, so outgoing mail is sent unsigned until a retry publishes the new key. The DNS write failure is also not logged and the task reports success.
- Keys created while DNS management was manual, or before DKIM was added to the published records, are never rotated after DNS management becomes automatic. Domains already affected start rotating once a
DkimManagementtask is created for them. - After switching DNS management from automatic to manual, a due rotation activates a new key that was never published in DNS, so signatures fail verification, and retiring the old key is retried forever.
- Spam filter:
- Messages with no text line long enough for a Pyzor digest are checked with the digest of empty input and tagged
PYZOR. - DNSBL answers with several return codes, such as a Spamhaus ZEN listing in both SBL and PBL, are scored for only the first code returned.
- DNSBL lookups that return "not listed" are cached for 24 hours regardless of the zone's negative TTL.
- Removing a duplicate training sample of a message reclassified on the same day clears the blob link of the sample that is kept.
- Messages with no text line long enough for a Pyzor digest are checked with the digest of empty input and tagged
- MTA: Queue quotas with an empty
matchexpression are never enforced, including the global queue quota created on first start. - RocksDB: The info log (
LOG,LOG.old.*) grows without limit because log rotation and retention are left at RocksDB defaults. - WebUI: A blob store read error at startup, such as an S3 authentication failure, stops the web interface from being downloaded.
Check binary attestation here
SCS On The Road: Gamescom 2026 Aftermovie
In today's episode of SCS On The Road, we take a look back at our participation at this year's Gamescom. Take a look at how it went!
This year, at the end of August, we once again took part in Gamescom in Cologne, Germany! We had a booth with six PC stations and two of our 4D Motion Simulators, where fans could get hands-on with previews of our upcoming Coaches, Road Trip: Ford, Iceland, South Dakota, and British Columbia DLCs. The cherry on top was the brand-new Volvo FH Series 6 100 Year Edition, which Volvo Trucks were kind enough to bring along and display at our booth.
Over the five-day show, we welcomed a huge number of visitors and content creators who came to try out our upcoming DLCs. We're incredibly happy that so many of you could make it and meet with us there! Now, let's take a look at how our Gamescom adventure went in this episode of SCS On The Road.
And that's it for today! We hope you enjoyed this episode. Remember to follow us on X/Twitter, Instagram, Facebook, Bluesky, and TikTok to receive updates on our upcoming projects and future SCS On The Road episodes. Or subscribe to our newsletter to stay informed. Until next time, we will see you on the road!
Distribution Release: Parrot 7.4
Blog: v7.42.0 released
You can download it from GitHub.
The highlights of this version are a new placebo GPU module based on libplacebo,
a 32-bit float default audio sample format, and Adjustment Clips (fx_cut) that
filter only the tracks below them.
Framework
- Added a list-based dispatch for image-conversion callbacks on
mlt_frame. Usemlt_frame_append_convert_image()to register a converter instead of settingframe->convert_imagedirectly. Multiple converters are tried in registration order; the first that succeeds wins. New public API:mlt_frame_prepend_convert_image()mlt_frame_append_convert_image()mlt_frame_convert_image()mlt_frame_next_convert_image()mlt_frame_has_convert_image()mlt_frame_copy_convert_image()
- API behavior change:
mlt_frame_s::convert_imageis now read-only after init and is permanently set to the dispatchermlt_frame_convert_image(). A custom function written directly to this field is no longer called. If you really need that (I have never heard of anyone who does), clear the frameβs_convert_image_callbacksproperty and usemlt_frame_append_convert_image()instead. fx_cut(Adjustment Clip) now applies its filters only to tracks below it. Higher tracks composite on top of the filtered result. New image-stack helpers are used by tractor stacking and byfx_cut:mlt_frame_prepend_image_from_service()mlt_frame_push_image_with_fx_cut()
- Fixed a crash when applying a Movit (OpenGL) filter to an
fx_cut(Adjustment Clip). Cross-producer image sharing (including the reversefx_cutshare) finalizes an in-progress Movit chain asrgba64and does not copy producer-keyed_movitchain state. Same-producer prepends keep the GPU chain. Playlistfx_cutframes now set_producerso Movit can key the chain. meta.andset.properties are now copied from the producer ontofx_cutframes so producer annotations reach tractor output. New public API:mlt_producer_pass_frame_properties()Mlt::Producer::pass_frame_properties()
- Changed the default audio sample format to
float32(mlt_audio_f32le). Addedmlt_audio_format_id()and anmlt_audio_formatproperty on themulticonsumer. Conversion between integer and float is lossless and symmetric (s16 and u8 round-trip exactly). - Deprecated the
soxfilter, which only supports 32-bit integer samples. - Deprecated the
volumefilterβsnormalizeparameter because it forces 16-bit integer audio. Usedynamic_loudnessinstead. Thevolumefilter itself still supports float samples. - Per-track audio-level metadata is now propagated to output frames (
meta.audio.*). - Improved
mlt_property_is_anim()so strings that merely contain=(for example URLs) are not treated as animation. mlt_properties_get_data()no longer returns a data pointer for rect properties.- Fixed a signed integer overflow in
mlt_luma_map_from_pgm. - Fixed
fx_cutin-point handling inmlt_transition. - Fixed Android
mlt++builds by disabling ELF symbol versioning. - Fixed a macOS crash in numeric property conversion caused by
setlocale. Parsing and formatting no longer change the processLC_NUMERIC.
Modules
- Image converters (
movit.convert,avcolor_space,imageconvert) are now attached from data inloader.ini, using theimage_convertkey. - Movit
rgba64is now a valid input as well as an output:FlatInputis created withGL_UNSIGNED_SHORTandset_pixel_data()uses the 16-bit overload. Previously,rgba64was uploaded as 8-bit, which distorted the image when an OpenGL filter ran on anfx_cut. - Added
placeboGPU module (placebo.render,placebo.shader) using libplacebo for scaling, debanding, dithering, tonemapping, and mpv-style.hookshaders (D3D11 / Vulkan / OpenGL). - Fixed a deadlock in the
decklinkconsumer when pausing, seeking, and resuming playback. - Added ducking to the
mixtransition (duck_threshold,duck_attenuation,duck_level,duck_fade_in,duck_fade_out, and an optionalprefixthat records the level on the frame as<prefix>duck_level). - Added
#frame+1#keyword indynamictext(1-based frame number). - Added more audio formats to the
audiolevelfilter. - Added FFmpeg 9 support in
avformat. - Fixed 10-bit
hevc_vaapiencoding. - The
avformatconsumer now logs when it finishes. - Fixed
rnnoiseso it works at sample rates other than 48 kHz by resampling. frei0r.kaleid0sc0peandfrei0r.squigglevisionnow report internal threading.- Fixed
frei0r.camerashake(and its blur) with preview scaling. - The OpenFX module now skips duplicate plugins.
USE_LV2andUSE_VST2requireUSE_LADSPA. The LADSPAblacklist.txtis installed even without JACK, andLV2_PATHis expanded correctly on Windows.- Fixed
affineandqtblendinsidemask_apply. - Fixed the
qtblendtransition so it does not apply pixel-aspect normalization twice. - Fixed alpha scaling in the luma transition, including when a luma file is
used, and documented the
invertproperty. - Fixed
shapefilter alpha subtraction forrgba. - Fixed motion-tracker shapes clipping outside the frame.
- Fixed colorspace and range of cached images in
qimageandpixbuf. - Fixed
cropwhen hardware decode and scale are combined with preview scaling. - Fixed the subtitle filter rendering one frame past its end time, and fixed
the
subtitle_feedend-frame calculation. - Fixed filename buffer overflows in
gpsgraphicandgpstext. - Fixed the
sdl2consumer so it no longer freezes on Windows after a few seconds. - Fixed
sdl2_audioso it no longer hangs inconsumer_stop()when stopped while paused. - Added
s32,float,s32le,f32le, andu8to thenoiseproducer, ands16,s32,s32le,f32le, andu8totone. Fixedtoneinteger conversion to matchaudioconvert. - Fixed a double-free in the
xmlproducer when a filter, transition, link, or producer fails to load. - Fixed
movit.convertleaking a Movit input on every frame when an effect chain is reused. - Fixed the heart-rate keyword in
gpstext(#gps_hr#). gpsgraphicno longer setstime_offsetwhen a GPS file is first loaded.
Other
meltprints its progress when it finishes and exits with a non-zero status when interrupted by a signal.- Fixed
melton Windows so it no longer ignores window resizing and keyboard transport. - Fixed
melt-jackoption not working with PipeWire.
Paint.NET 5.2 Beta (build 9771)
This beta update fixes several bugs reported in the previous build, and fixes compatibility for some effect plugins.
Changes since 5.2 Beta (build 9762):
- Fixed tooltips not displaying for the History and Layers windows
- Fixed compatibility for the Content Aware Fill effect plugin
- Fixed a bug that was causing the Dynamic Draw effect pluginβs output to have its alpha channel reset to opaque
- The mouse wheel can now be used to scroll menus other than Effects and Adjustments when they canβt completely fit onto the screen
- Optimized the performance of the canvas when at zoom levels >100% to use less memory bandwidth. This should reduce power usage on laptops.
- Wine: Improved text rendering quality and stability by using DWriteCore
- Wine: UI animations now work
Download and Install
This build is available via the built-in updater as long as you have opted-in to pre-release updates. From within Settings -> Updates, enable βAlso check for pre-release (beta) versions of paint.netβ and then click on the Check Now button. You can also use the links below to download an offline installer or portable ZIP.

You can also download the installer here (for any supported CPU and OS), which is also where you can find downloads for offline installers, portable ZIPs, and deployable MSIs.
For the experimental builds for Wine, you can go here to download them.
β
OBS Studio 33.0.0 Beta 6
Beta 6 Changes
- Fixed a crash during certain actions involving groups in Beta 1-5 [prgmitchell] (#13978)
- Fixed scripting not working on macOS in Beta 1-5 [PatTheMav] (#13976)
- Fixed game capture hooks not updating in Beta 1-5 [Warchamp7] (#13968)
- Fixed clock Lua script not working in Beta 1-5 [RytoEX] (#13974)
- Changed Safe Mode to not start WebSocket Server [FiniteSingularity/RytoEX] (#13984)
- Removed support for FFmpeg 6.x and 7.x [RytoEX] (#13964)
- Removed support for Qt 6.4-6.9 [RytoEX] (#13969)
Beta 5 Changes
- Fixed duplicate "Save Replay" hotkey entries when switching profiles in Beta 1-4 [xtfo] (#13943)
- Fixed warning dialogs on macOS not rendering rich text in Beta 1-4 [Warchamp7] (#13949)
- Fixed source icon state appearing inverted in Beta 1-4 [Warchamp7] (#13953)
- Fixed audio monitoring settings not saving in Beta 1-4 [Warchamp7] (#13951)
- Fixed missing encoder check showing missing encoders in an output mode that is not currently selected in Beta 1-4 [Warchamp7] (#13950)
- Fixed Windows updater not updating game capture and virtual camera in some cases in Beta 1-4 [Warchamp7] (#13939)
Beta 4 Changes
- Fixed a CI and packaging issue. There are no application changes since Beta 1.
Beta 3 Changes
- Fixed a CI issue. There are no application changes since Beta 1.
Beta 2 Changes
- Fixed a versioning issue. There are no application changes since Beta 1.
33.0 New Features
- Updated CEF from 127/6533 to 150/7871 [WizardCM] (#13900)
- This is a massive update to the underlying framework used for browser sources and docks from the July 2024 release to September 2026
- All of this work is on the backend and should be invisible to users. Please be sure to report any new weirdness or problems you run into with browser sources!
- Complete overhaul to plugin loading [FiniteSingularity/PatTheMav] (#13594)
- First-party plugins are now in a new folder named core
- Third-party plugins have an updated installation location and folder structure
- Existing third-party plugins will continue to load from the legacy locations until OBS Studio 34.0
- More information is available in our knowledge base article
- Improved how source snapping works in the preview [Warchamp7] (#12298)
- New visual indicator added
- Sources now snap along the entire axis instead of only when directly touching
- Sources no longer snap to hidden sources
- Improved behavior of spinboxes for number values [Warchamp7] (#12337)
- Typing is no longer mysteriously blocked in some situations
- Numbers are no longer cut off in some situations
- Values now update only after pressing Enter and Enter does not close the window
- Holding Shift + Up/Down now advances multiple steps at a time
- Dragging the cursor inside the input but outside the text itself now works properly
- Enabled NVENC on Arm64 [RytoEX] (#13827)
33.0 Changes
- Added a check for encoders being missing when loading a profile [derrod] (#11340)
- Added support for newest NVIDIA Broadcast SDKs for NVIDIA Audio Effects and Video Effects [pkviet] (#13838)
- Added hotkeys for controlling audio monitoring of a source [Warchamp7] (#13599)
- Fixed issues with groups in Studio Mode [Warchamp7] (#11092)
- Fixed moving sources inside a group causing them to glitch out in Program
- Fixed moving sources inside a group showing up live in Program
- Adjusted naming of Window Capture methods on Windows [Penwy] (#12047)
- Improved detection of fullscreen games for Game Capture [Kira-NT] (#10880)
- Improved transparency handling for macOS Screen Capture [jcm93] (#13030)
- Scaled simple output recording audio bitrate by channel count [nickvonkaenel] (#13311)
- Removed support for Ubuntu 24.04
33.0 Bug Fixes
- Added a startup error if obs-transitions failed to load [notr1ch] (#13321)
- Improved file splitting for Hybrid MP4/MOV [derrod] (#13386)
- Fixed outputs getting stuck running when a bad rescale output resolution is set [suogesi] (#13375)
- Fixed monitoring icon state getting desynced when using third-party tools or websockets [prgmitchell] (#13822)
- Fixed potential crash when shader cache file is invalid [notr1ch] (#13538)
- Fixed a potential crash on Linux when USB mic is removed [R0te/RytoEX] (#13922)
- Fixed a potential crash when renaming a source with the Add Source window open [Warchamp7] (#13800)
- Fixed a potential deadlock during video/audio tasks [exeldro] (#13579)
- Fixed an issue with B-frame offset calculation in AMF that could cause streams to disconnect [lexano-ivs] (#13762)
- Fixed PipeWire screencast sources being duplicated in studio mode [tytan652] (#13673)
- Fixed a potential crash when switching off a newly created profile [Warchamp7] (#13182)
- Fixed a source toolbar crash when source type is missing [Penwy] (#13539)
33.0 Developer Information
- Added frontend event and output signal for replay buffer saving [Penwy] (#8955)
- Added guidance regarding the theme system to the top of all theme files [Warchamp7] (#13733)
- Added ability to set a file extension filter for OBS_PATH_FILE_SAVE path types [FiniteSingularity] (#10190)
- Added obs_frontend_is_safe_mode for first-party plugins
- Third-party plugins are not loaded at all in Safe Mode
- Added versions to Flatpak plugin extension point [tytan652] (#13735)
- The minimum supported versions of Visual Studio, Windows SDK, and clang-format have been increased. Previous versions may continue to work, but will no longer be tested/supported. It is recommended that build environments are kept up-to-date with the project's toolchain.
- Updated libnsgif to 1.0.0 [RytoEX] (#11178)
- This is a breaking change for any plugins using libobs/graphics gs_image_file
- Clarified documentation for obs_module_unload [notr1ch] (#13327)
- Required MbedTLS 3 and exclude 4 or later [tytan652] (#13799)
- Fixed repeated preview enable/disables not working [WarmUpTill] (#12580)
- Only emit core signal handlers for public canvases [tt2468] (#13574)
- Deprecated unused hidden API for sources [derrod] (#13122)
- Deprecated APIs for audio source monitoring_type [Warchamp7] (#13599)
- This is replaced by a new monitoring_enabled boolean
Checksums
OBS-Studio-33.0.0-beta6-Sources.tar.gz: c0774b6d3d44b4ceeac9640ba752493c5e038e594f2f75fe45902352a896fdc1
OBS-Studio-33.0.0-beta6-Ubuntu-26.04-x86_64-dbsym.ddeb: 13954f91f15d18a91ac9fc1d37b397f53c511eaf7a319337a6fc461678981bcc
OBS-Studio-33.0.0-beta6-Ubuntu-26.04-x86_64.deb: 743d9d45f24e3206c382ebf15325f57e241655ee2b3d0e04119da2399cd12528
OBS-Studio-33.0.0-beta6-Windows-arm64-PDBs.zip: 905d01dbc84655176d8bea82a98793b36ee8cdd41ff2ec14b87ded8ac87fd6a3
OBS-Studio-33.0.0-beta6-Windows-arm64.zip: 51d411d19f11d5c1d54119677ec55aa6af8a1773edc4893d9753eb6cb60728d7
OBS-Studio-33.0.0-beta6-Windows-x64-Installer.exe: 2718bb13120cae63da3ad8c7c6da97d5dca72453c04aca710a1c43f052aeffa9
OBS-Studio-33.0.0-beta6-Windows-x64-PDBs.zip: 8a636784183fcf7151bf8a6878019c2754107e358759fc3c0a6b5db0218b092b
OBS-Studio-33.0.0-beta6-Windows-x64.zip: e132c58934a5b0755fff0fc92a49d665a592e323ce0871618738721e20d0ebb3
OBS-Studio-33.0.0-beta6-macOS-Apple-dSYMs.tar.xz: e1b4b66245179fdc59e391ad8f455e7216d7eaef23fac61fc93e6bbe8da5a533
OBS-Studio-33.0.0-beta6-macOS-Apple.dmg: 06fe6deaf96645f88593dbc2085c2195714584df3989f4c1aba1a3bfe0be4c40
OBS-Studio-33.0.0-beta6-macOS-Intel-dSYMs.tar.xz: 707ad42c7eaa7a0d6bca419aca11a06f785275306eb683dfdfeb9356b5fc55b2
OBS-Studio-33.0.0-beta6-macOS-Intel.dmg: 80351ba0c886ab8d7c0f32ab782fadf335e5c644c8483f43ced994756cfda3c9
Counter-Strike 2 Update
- [p]Agents now wear their equipped gloves during the photobooth photography sessions and in buy menu[/p][/*]
- [p]Fixed grenade crosshair rendering when crosshair thickness is set to 3 pixels[/p][/*]
- [p]Fixed formatting of titles in commend and report dialogs[/p][/*]
- [p]Improved lighting in the Warehouse map[/p][/*]
- [p]Updated workshop convars whitelist with the new crosshair settings[/p][/*]
- [p]Stability improvements[/p][/*]
Distribution Release: Qubes OS 4.3.2
Extended Stable Update for Desktop
Β The Extended Stable channel has been updated to 152.0.7977.152Β for Windows and Mac which will roll out over the coming days/weeks.
Distribution Release: Mainstream OS 3.0.0
Big Tech ruined the cloud, so weβre renaming ours
From ever-increasing subscription prices to outages and data harvesting: we donβt like what the cloud has come to represent. So weβre redefining what an online service should be: private, optional, and free from lock-in or walled gardens.
Thatβs why today Nabu Casa is renaming Home Assistant Cloud to more accurately describe what the service actually does, and to better reflect our values. Allow us to introduce:
Home Assistant Link
Iβm Carl, Vice President of Commercial at Nabu Casa. You probably know us as the folks making all that sleek, highly optimized Home Assistant hardware. Beyond hardware, we also manage and run Home Assistant Link, and as one of the Open Home Foundationβs commercial partners, weβre here to help fund all their amazing work. We feel pretty passionately about the word cloud, and weβd love to explain how the old name never fit, and why Link finally does.
Created for the community
Home Assistant began with a group of core developers working nights and weekends alongside their regular jobs to create the platform β a good recipe for burnout, and one that has ended plenty of similar open source projects. So in 2018, we founded Nabu Casa and created Home Assistant Cloud to make sure that didnβt happen.
Home Assistant Cloud set out to make Home Assistant easier for more people to use, starting with a problem many of you had: reaching your Home Assistant when youβre not at home, without having to spend a weekend on it. It was also built to make Home Assistantβs development sustainable.
The intent was never to just ask for donations, but to build an optional service that benefited the community and funded the work at the same time. The majority of profits from subscriptions now fund the Open Home Foundation. That money supports everyone working on Home Assistant β from salaried staff to volunteers β keeping the project sustainable. That shift took Home Assistant from a passion project to one that could invest back into its community, and one that could stick around for the long haul.
A breath of fresh air
We even took it out of the Nabu Casa logoβ¦ did we take this too far? π€
We had a service that we and the community loved, but the name just didnβt feel right. For example, there were times when Paulus, founder of Home Assistant and President of the Open Home Foundation, was on stage saying βdonβt buy products that require the cloud to work,β then in the next breath having to explain how Home Assistant Cloud is different, despite the name. That created unnecessary friction.
It also caused confusion, since some new users thought (and continue to think) Home Assistant Cloud is a way to run Home Assistant in the cloud. This has never been the case, because we believe Home Assistant should always be run locally, in your home.
Big Tech has given the cloud a bad name, and while Link does run online, it is very different from other cloud-powered smart home services:
| Home Assistant Link | A Big Tech cloud |
|---|---|
| Optional: your smart home will still work without it, lights and all. | Required: all or most features wonβt work without it. |
| No lock-in: you can use this service or someone elseβs, and youβll never be stuck. | A walled garden: youβll be locked into that one service, and all its outages or price increases. |
| Your dataβs private: your data is yours, and will always stay that way. | Your dataβs monetized: youβre the product, and your data is used for ads, AI training, and sometimes sold to third parties. |
| Funds a nonprofit: Nabu Casa contributes the majority of profits from subscriptions to the Open Home Foundation, supporting their fight for privacy, choice, and sustainability. | Funds investors first: profits flow to shareholders, debt repayment, and a bunch of other stuff first, and funding developers is an afterthought. |
Your subscriptions help sustain Home Assistant, but weβve been clear from the beginning that you do not need Link to use the platform. We hate what Big Tech has done to smart devices, turning them into paperweights when they drop support. Thermostats that canβt be scheduled or cameras that canβt detect motion, giving the smart home a bad reputation and making a mountain of e-waste. By not using Link, youβll miss out on some extras, but thatβs all they are: extras. And if you do use Link but have to unsubscribe, your smart home will keep working.
Big Tech treats your data as a commodity and a tool for mass surveillance: sold to advertisers, used to train AI, and dealt to third parties for the best price. We think this is morally bankrupt. Thatβs why when you use Home Assistant Link, your data is encrypted, and only you have the key. Neither Nabu Casa nor the Open Home Foundation want your data, and we work hard to never have an opportunity to see it.
This is what tech serving people looks like: data thatβs yours, and a smart home that answers to you β not corporate shareholders.
Choose your own path
Many of you build DIY projects to customize your setup, and Home Assistant isnβt going anywhere on that front. But for those whoβd like a simpler approach, Link makes using Home Assistant easier, opening up the local and private smart home to more people. For example, connecting to Alexa and Google Home can be complex to set up yourself, but Link allows you toβ¦ ahemβ¦ link them to Home Assistant without the hassle. Not having the time or know-how shouldnβt be a barrier to using the platform, and Link ensures it isnβt.
On top of things that can only be done online, there are other features that just work better with Linkβs connected services. For instance, online speech-to-text tends to be faster, supports more languages, and is more reliable than self-hosted alternatives. Likewise, Link offers a way to store a backup online, so your data is always recoverable while remaining private. Plus, if you run into trouble with a feature, we have real humans you can contact to help you out. You heard that right. A real person.
See everything at a glance on our new account page.
Weβre also constantly improving the service and are now working to add new features. You may have noticed the new, easier-to-use account page, the speech-to-text Labs test, or the new settings page in Home Assistant with a setup wizard. What you probably wonβt notice is the massive backend update to improve the responsiveness of your remote access (weβve migrated to a new bare-metal setup that always tries to get you on the closest server, and itβs fast ποΈ). Most importantly, these updates let us add new security features, account management tools, and more.
Whatβs in a name?
In the end, our actions speak louder than product names, and weβll continue to run a subscription thatβs about privacy, transparency, and not locking users in, all the while supporting the development of Home Assistant.
Whenever features get renamed, we always come to you, the community, first. Even though this is a service from Nabu Casa, Home Assistant is a community project, and we value your opinion and thoughts. Love the new name? Something we didnβt consider? Weβre all ears. We intend to make the name change official in the December 2026.12 release, so please provide all your feedback well before then! π
v0.8.11
What's Changed
- fix(macos): press Back and Forward as the frontmost app's menu item by @AprilNEA in #1622
- chore(nix): update flake.lock by @AprilNEA[bot] in #1217
- fix(agent): recognize an overlay tenant by any image we ever shipped by @AprilNEA in #871
- feat(linux): add verified release installer by @AprilNEA in #1109
- ci(nix): only run Nix CI on flake and packaging changes by @davidbudnick in #1250
- fix(macos): confirm desktop switches with private space APIs by @AprilNEA in #1586
- fix(macos): drive the device-I/O gate from powerd instead of workspace notifications by @AprilNEA in #1323
- fix(core): match Actions Ring layouts with the per-app selector by @AprilNEA in #643
- chore: release v0.8.11 by @AprilNEA[bot] in #1637
- fix: clear the lints rustc 1.99 raises on untouched code by @AprilNEA in #1638
- chore: release v0.8.11 by @AprilNEA in #1643
- chore: release v0.8.11 by @AprilNEA in #1644
Full Changelog: v0.8.10...v0.8.11
Distribution Release: Koozali SME Server 11.0
v0.20.0
β οΈ Note for macOS users
Builds are unsigned (no Apple Developer ID). After dragging MarkText into Applications, clear the quarantine flag once:
xattr -cr /Applications/marktext.app
Verifying downloads
All artifacts are listed with their SHA-256 in SHA256SUMS.txt. Verify with:
sha256sum -c SHA256SUMS.txt --ignore-missing
What's Changed
- chore(release): v0.19.0 release branch (DO NOT MERGE until stable) by @Jocs in #4269
- chore: bump develop to 0.20.0-dev by @Jocs in #4296
- docs(release): update Step 7 asset list to 24 by @Jocs in #4298
- docs(end-user): align user docs with 0.19 prefs and platform matrix by @Jocs in #4300
- docs(dev): sync developer docs with current codebase by @Jocs in #4299
- chore: convert repo to pnpm monorepo (packages/desktop, muyajs, website) by @Jocs in #4302
- refactor(website): migrate to Next.js 15 + Cloudflare Workers CI by @Jocs in #4305
- feat(website): serve www.marktext.me (301 β apex) by @Jocs in #4308
- fix(website): wwwβapex redirect (middleware) + smarter preview-URL parsing by @Jocs in #4309
- ci(website): enable Preview URLs on marktext-website Worker by @Jocs in #4311
- refactor(website): redesign landing page, drop markdown engine deps by @Jocs in #4312
- feat(muya): migrate TS rewrite to packages/muya alongside legacy muyajs by @Jocs in #4314
- feat(website): add /docs route and consolidate docs/ under packages/website/ by @Jocs in #4316
- fix: replace remaining absolute raw.githubusercontent.com URLs with relative paths in READMEs by @Jocs with @Copilot in #4329
- fix(website): serve prerendered docs pages via static-assets cache by @Jocs in #4335
- fix(website): open download buttons in new tab pointing to releases page by @Jocs in #4336
- refactor(website): simplify docs subtree (palette / sidebar / markdown / nav) by @Jocs in #4349
- refactor(website): simplify landing page (helpers, types, data-driven blocks) by @Jocs in #4350
- chore(website): tighten middleware matcher; drop unused 'use client' by @Jocs in #4351
- fix(muyajs): preserve nested lists of differing types (#4341) by @Jocs in #4354
- fix(muyajs): allow CJK ideographs as flanking boundary for emphasis by @Jocs in #4355
- fix(muyajs): clamp setStart offset to legal range to prevent IndexSizeError (#2800) by @Jocs in #4358
- fix(muyajs): null-guard list block paths to prevent renderer crash (#4346) by @Jocs in #4359
- fix: restore local builds after monorepo split by @Jocs in #4361
- fix(release): add repository field for electron-builder by @Jocs in #4368
- fix(muyajs): split correct paragraph on Enter in multi-block list items (#4374) by @Jocs in #4376
- fix(renderer): improve graphite contrast and unify accent colors (#4377) by @Jocs in #4378
- feat(muya): expose desktop-required public API accessors by @Jocs in #4381
- feat(muya): expose themeable CSS variables and diagram theming by @Jocs in #4382
- feat(muya): add block duplicate/insert/delete public API by @Jocs in #4384
- feat(muya): restore flowchart and sequence diagrams by @Jocs in #4385
- feat(muya): add ImagePathPicker floating autocomplete UI by @Jocs in #4386
- fix(muya): unbreak lint:css (stylelint 17 compatibility) by @Jocs in #4388
- feat(muya): add cursorCoords + active formats to selection-change by @Jocs in #4387
- feat(muya): implement focus mode (dim inactive blocks) by @Jocs in #4389
- feat(muya): emit format-click and preview-image interaction events by @Jocs in #4390
- feat(muya): add updateParagraph block-type conversion API by @Jocs in #4391
- feat(muya): add runtime setOptions / setFont / setTabSize / setListIndentation by @Jocs in #4393
- feat(muya): add spellcheck word-replacement API by @Jocs in #4392
- feat(muya): serialize/restore undo history by @Jocs in #4394
- feat(muya): add invalidateImageCache by @Jocs in #4396
- test(muya): port MarkText regression cases (#4341/#4307/#4190) by @Jocs in #4399
- feat(muya): add createTable / insertImage / setCursor API by @Jocs in #4397
- feat(muya): add clipboardFilePath paste hook by @Jocs in #4398
- fix(muya): treat CJK as punctuation for strong/em flanking (#4307) by @Jocs in #4401
- feat(desktop): consume @muyajs/core in util files (markdownToHtml/pdf/dompurify/printService/sourceCode/icon) by @Jocs in #4402
- feat(desktop): add kebab-case editor CSS vars to themes for @muyajs/core by @Jocs in #4404
- feat(desktop): migrate editor.vue to @muyajs/core engine by @Jocs in #4406
- fix(i18n): unify quick-insert hint to "/" trigger by @Jocs in #4405
- test(parity): failing-test scoreboard for #4406 muyajsβ@muyajs/core gaps by @Jocs in #4407
- fix(muya): insertParagraph immediate-block anchoring in nested blocks (PG13) by @Jocs in #4408
- fix(muya): consume autoCheck + hideLinkPopup options (PG3/PG12) by @Jocs in #4409
- feat(muya): expose block affiliation in selection-change (PG1) by @Jocs in #4410
- feat(muya): restore clipboard image paste + imageAction routing + copyAsRich (PG5/PG6/PG9) by @Jocs in #4411
- fix(muya): inline export CSS + heading ids for offline export & TOC anchors (PG7/PG8) by @Jocs in #4412
- feat(muya): emit preview-image + heading-copy-link events (PG10/PG11) by @Jocs in #4414
- feat(muya): restore drag-and-drop image insertion (PG4) by @Jocs in #4413
- feat(desktop): wire @muyajs/core parity APIs (menu state, copyAsRich, heading-link, source cursor, saved indicator) by @Jocs in #4415
- fix(desktop): pass imageAction + getPathForFile to Muya constructor (re-activate PG4/5/6) by @Jocs in #4417
- fix(muya): resolve pre-existing lint:css no-descending-specificity by @Jocs in #4419
- fix(muya): record source-mode bulk edit as a single undo boundary (PG14) by @Jocs in #4420
- test(desktop): remove redundant muyajs-engine unit specs (Phase F) by @Jocs in #4422
- fix(desktop): retarget theme.ts editor CSS at muya mu-* classes (E4) by @Jocs in #4421
- fix(desktop): port print image-src resolution off muyajs (last muya/lib import) by @Jocs in #4423
- fix(muya): crash typing '#' β guard I18n.t + add heading-copy-link locale key by @Jocs in #4424
- fix(muya): add missing image i18n keys ('Click to add an image' / 'Load image failed') by @Jocs in #4427
- fix(muya): render relative image paths anchored to the document dir (Phase G blocker) by @Jocs in #4428
- fix(desktop): EditβΈReplace action + saved-indicator false-clean (Phase G) by @Jocs in #4431
- fix(muya): preserve drive/UNC roots in relative image path resolution (#4428 review follow-up) by @Jocs in #4430
- fix: source-mode cursor sync + language-switch hint refresh (Phase G G7/G8) by @Jocs in #4432
- fix(muya): updateParagraph data-loss on list/quote + front-matter insertion + frontmatterType lang (Phase G) by @Jocs in #4429
- test: cover @muyajs/core migration regression gaps (Phase G) by @Jocs in #4434
- fix(muya): restore cross-cell table selection + resolve dead TableChessboard picker (Phase G) by @Jocs in #4435
- test(muya): de-flake heading-locale + backspace regression specs (#4434 review) by @Jocs in #4436
- fix(muya): restore the in-editor table grid picker (revert #4435 chessboard deletion + wire trigger) by @Jocs in #4437
- docs: archive the muyajs β @muyajs/core migration tracker by @Jocs in #4438
- chore: keep .claude/ fully ignored (untrack migration tracker) by @Jocs in #4439
- fix: restore editor visual parity after @muyajs/core migration by @Jocs in #4443
- fix(muya): align Cmd+A / copy / cut / paste with legacy muyajs by @Jocs in #4446
- chore(muya): align packages/muya conventions with desktop + doc cleanup by @Jocs in #4450
- fix(muya): editor parity with muyajs (themes, fonts, spellcheck) + CLASS_NAMES cleanup by @Jocs in #4454
- refactor(muya): split clipboard into modules + type copy/paste modes as enums by @Jocs in #4459
- fix(muya): enable inline image resize by @Jocs in #4460
- refactor(muya): rebuild ImageEditTool to match muyajs ImageSelector by @Jocs in #4461
- chore: remove ununsed comments by @Jocs in #4462
- chore(muya): remove redundant comments added during the muyajs port by @Jocs in #4463
- refactor(muya): unify Selection into facade over Text/Table/Image sub-selections by @Jocs in #4467
- fix(muya): match muyajs nested list spacing and bullet markers by @Jocs in #4469
- fix(editor): restore caret on source-mode undo and tab switch by @Jocs in #4470
- fix(muya): preventDefault on forward-delete paragraph merge by @Jocs in #4471
- fix(muya): restore Paste as Plain Text via async clipboard read by @Jocs in #4472
- fix(muya): stop drag-selection from expanding to whole blocks by @Jocs in #4477
- fix(muya): delete whole image on backspace (inline, raw html, reference) by @Jocs in #4478
- fix(muya): stop Shift+Tab unindent from crashing on insertTab by @Jocs in #4479
- fix(muya): stop arrow nav from crashing on null cursor coords by @Jocs in #4480
- fix(muya): clear the
/trigger when quick-inserting front matter by @Jocs in #4481 - fix(desktop): make Promote Heading shortcut fire on macOS by @Jocs in #4482
- fix(desktop): refresh muya locale on language switch (hint + quick-insert menu stay translated) by @Jocs in #4489
- fix(desktop): anchor theme card h3 label to its heading by @Jocs in #4490
- fix(muya): stop in-flight float positioning from re-revealing a hidden float by @Jocs in #4491
- fix(desktop): return relative image path for local-path-string inserts by @Jocs in #4492
- fix: insert web images dragged from a browser by @Jocs in #4494
- fix(muya): support resizing images that share the same link by @Jocs in #4495
- fix(muya): render vega-lite diagrams under the renderer CSP by @Jocs in #4496
- fix(muya): refresh local images on "Reload images" (View β Reload images) by @Jocs in #4498
- fix: reflect the current block in the Paragraph menu (PG1) by @Jocs in #4500
- fix(muya): keep selection after applying an inline format to a range by @Jocs in #4501
- fix(desktop): reflect underline/superscript/subscript/highlight in the Format menu by @Jocs in #4503
- fix: paragraph menu / command palette parity (focus, list unwrap, shortcut symbols) by @Jocs in #4504
- fix(muya): keep cursor in place when toggling Loose List Item by @Jocs in #4506
- refactor(muya): rework the selection type surface by @Jocs in #4512
- fix(desktop): point in-app docs links at marktext.me by @Jocs in #4513
- fix(website): point self-referential doc links at the published docs by @Jocs in #4514
- fix(website): register the missing end-user docs pages by @Jocs in #4515
- feat(i18n): add Turkish (tr) locale by @FurkaanBoraa in #4510
- feat: make PlantUML server URL configurable by @jyte in #4400
- fix: #4474 unsaved indicator never clears after undoing back to on-disk content by @FurkaanBoraa in #4475
- fix(test): correct PlantUML custom-server URL assertion by @Jocs in #4517
- fix(i18n): reconcile desktop & muya locale keys after the muya engine refactor by @Jocs in #4516
- test(muya): backfill engine-unit coverage for audited gaps by @Jocs in #4508
- test(muya-e2e): backfill real-DOM e2e coverage for audited gaps by @Jocs in #4511
- test(desktop): backfill renderer/main unit coverage for audited gaps by @Jocs in #4509
- refactor(muya): return enums from TextSelection direction/type by @Jocs in #4519
- refactor(muya): setSelection takes anchor/focus endpoints by @Jocs in #4523
- refactor(muya): route format/codeblock selection through setCursor by @Jocs in #4520
- refactor(muya): split ICursor into focused interfaces by @Jocs in #4524
- refactor(muya): keep table rect selection exclusive of text selection by @Jocs in #4522
- refactor(muya): extract computeDirection/computeCaretType helpers by @Jocs in #4525
- refactor(muya): simplify selectAll into three escalation rules by @Jocs in #4526
- test(muya): replace any with precise block/state types in specs by @Jocs in #4528
- refactor(desktop): remove no-explicit-any suppressions in favor of precise types by @Jocs in #4527
- refactor(muya): drop cyclomatic complexity below 20 across the engine by @Jocs in #4529
- refactor(muya): rename selection enum members to UPPER_SNAKE_CASE by @Jocs in #4531
- chore: translate remaining Chinese console/debug strings to English by @Jocs in #4533
- refactor(muya): enforce
_prefix for private members via lint by @Jocs in #4535 - refactor(muya): mark core/state/selection internals private by @Jocs in #4541
- refactor(muya): mark block-tree internals private/protected by @Jocs in #4538
- refactor(muya): mark UI float-tool internals private by @Jocs in #4539
- refactor(desktop): remove remaining no-explicit-any suppressions by @Jocs in #4548
- feat: align Paragraph/Format menus with muyajs behavior on @muyajs/core (+3 upgrades) by @Jocs in #4547
- fix(muya): sync inline format toolbar highlight via selection-change by @Jocs in #4558
- fix(muya): align normalizePastedHTML link unlinking with muyajs by @Jocs in #4550
- fix(muya): render footnotes in copy-as-html / copy-as-rich clipboard HTML by @Jocs in #4544
- fix(muya): align clipboard cut/delete semantics with muyajs by @Jocs in #4540
- fix(muya): collapse code block to paragraph on cross-block cut from its language line (#918) by @Jocs in #4545
- fix(muya): merge pasted paragraphs/headings inline (muyajs parity) by @Jocs in #4542
- fix(muya): replace selected image on paste + language-input paste parity by @Jocs in #4543
- fix(muya): merge same-type list paste + plain-text block HTML (muyajs parity) by @Jocs in #4546
- fix(muya): round-2 paste/clipboard parity fixes from a full muyajs re-audit by @Jocs in #4549
- fix: populate the table of contents on open and fix link navigation by @NSO73 in #4448
- fix(desktop): paste captured image on macOS Edit β Screenshot by @Jocs in #4566
- fix(muya): restore editor cursor when closing the search bar (selectHighlight) by @Jocs in #4567
- fix(muya): restore find-bar prefill from editor selection by @Jocs in #4569
- fix(search): scroll editor to match when opening a folder-search result by @Jocs in #4568
- fix(muya): serialize lists with the configured listIndentation by @Jocs in #4570
- fix(muya): restore the focused frontmatter delimiter markers by @Jocs in #4571
- fix(muya): show code-block line numbers on first render for language-less blocks by @Jocs in #4572
- fix(muya): re-parse on parse-affecting option changes so ```math toggles live by @Jocs in #4573
- fix(export): repair five styled-HTML export regressions (math, vega, footnotes, TOC, images) by @Jocs in #4576
- fix(export): make "Overwrite theme font" actually override the selected theme by @Jocs in #4579
- fix(editor): restore per-tab caret on tab switch by @Jocs in #4580
- fix(editor): restore undo after an external file reload by @Jocs in #4582
- fix(desktop): auto-focus the editor when creating or opening a tab by @Jocs in #4581
- fix(editor): align code block line numbers vertically by @Jocs in #4583
- fix(editor): keep spelling suggestions when "no underline" is enabled by @Jocs in #4584
- refactor(muya): decouple engine/block layers from src/ui plugin internals by @Jocs in #4587
- fix(clipboard): copy only the selected part of cross-block selections by @Jocs in #4586
- fix(muya): correct setext heading level when typing the underline by @Jocs in #4591
- fix(muya): guard checkNeedRender against a null cursor (image-preview reclick crash) by @Jocs in #4588
- test(desktop): backfill renderer/main unit coverage for post-migration gaps by @Jocs in #4592
- test(muya-e2e): backfill real-DOM e2e coverage for post-migration gaps by @Jocs in #4593
- test(muya): backfill engine unit coverage for post-migration gaps by @Jocs in #4589
- test(desktop): backfill app e2e coverage for post-migration gaps by @Jocs in #4594
- chore(security): remediate 25 Dependabot alerts by @Jocs in #4596
- chore(deps): upgrade all packages to latest + align shared versions by @Jocs in #4597
- test(muya): poll for the html_tag mount instead of waiting a single frame by @Jocs in #4607
- fix(muya): escape pipes at cell start and consecutive pipes in table serialization by @Jocs in #4601
- fix(muya): absorb a manually typed closing markdown marker after text by @Jocs in #4602
- fix(muya): let Shift+ArrowUp/Down extend selection while the inline toolbar is shown by @Jocs in #4603
- fix(muya): render
- fix(muya): keep emphasis intact when a line contains escaped dollar signs by @Jocs in #4605
- fix(muya): paste a URL into link parentheses without nesting a markdown link by @Jocs in #4608
- fix(muya): make links inside a raw HTML block clickable by @Jocs in #4609
- fix(muya): correct inline code/math shortcut labels in the format toolbar by @Jocs in #4611
- fix: #4356 crash when using the link popover on a link with an unsupported protocol by @FurkaanBoraa in #4473
- fix(muya): map Β to U+00A0 and keep escaped spaces unbreakable by @Jocs in #4612
- fix(desktop): scroll to non-heading in-document anchors on Ctrl/Cmd-click by @Jocs in #4613
- fix(muya): keep the inline-math parse-error message on one line by @Jocs in #4614
- fix(muya): allow inline style in the html-block live preview by @Jocs in #4618
- fix(muya): cap and horizontally scroll the inline-math popup by @Jocs in #4615
- fix(desktop): isolate the editor stacking context so previews stay under modals by @Jocs in #4617
- test(desktop): fix inline code/math shortcut tests failing on develop after #4611 by @FurkaanBoraa in #4624
- fix(desktop): scroll CodeMirror to the heading on TOC click in source mode by @Jocs in #4619
- fix(muya): constrain a rendered diagram svg so wide diagrams don't clip by @Jocs in #4616
- fix(desktop): apply custom keybinding changes without an app restart by @Jocs in #4621
- fix(muya): break undo entries at word and edit-kind boundaries by @Jocs in #4622
- fix(muya): swap cross-block arrow boundary keys in RTL mode by @Jocs in #4610
- fix: opaque light-theme editor text colors for crisp antialiasing by @Jocs in #4631
- fix(muya): clamp selection offset to the node's legal range by @Jocs in #4626
- fix(desktop): prevent data loss when closing after Source Code mode edits by @Jocs in #4627
- fix(muya): center inline math vertically so it sits on the text baseline by @Jocs in #4632
- fix(muya): render inline math containing an escaped dollar sign by @Jocs in #4629
- fix(muya): prevent renderer crash when deleting consecutive thematic breaks by @Jocs in #4628
- test: drop the low-value opaque-color guard tests from #4466 by @Jocs in #4633
- test(muya): regression guard for code-block scroll on typing (#3191) by @Jocs in #4638
- fix(muya): align serialized table columns by visual width (#1983) by @Jocs in #4636
- fix(muya): insert ordinary spaces for Tab instead of non-breaking spaces (#3273) by @Jocs in #4634
- fix(muya): convert typed diagram fences to diagram blocks on Enter (#2177) by @Jocs in #4635
- fix(muya): keep the caret on Shift+Tab list unindent (REPLACEMENT path) (#3223) by @Jocs in #4637
- fix(muya): typed diagram fences create diagram blocks via the language selector (#2177) by @Jocs in #4640
- refactor: rewrite getTOC and remove unused comments by @Jocs in #4642
- fix(muya): allow trailing whitespace after a math block's closing $$ (#1931) by @Jocs in #4649
- fix(muya): stop ArrowDown from endlessly creating empty paragraphs (#3520) by @Jocs in #4650
- fix(muya): take the list marker from a line start in _convertToList (#2429) by @Jocs in #4651
- fix(muya): strip trailing punctuation from extended autolinks (#2096) by @Jocs in #4652
- fix(muya): ArrowUp at document start moves the caret to offset 0 (#3193) by @Jocs in #4655
- fix(muya): destroy UI plugins on Muya.destroy() to stop leaking DOM nodes (#3315) by @Jocs in #4659
- fix(muya): don't cut a cross-block selection on Ctrl+ (Windows/Linux) (#3491) by @Jocs in #4656
- fix(muya): apply inline format across paragraphs nested in one blockquote (#3462) by @Jocs in #4661
- fix: #4534 group theme menu into Light/Dark submenus by @FurkaanBoraa in #4623
- fix(muya): drop pending op batch on setContent to prevent cross-document corruption (#2938) by @Jocs in #4658
- test(desktop): pin autosave's recreate-missing-directory behavior (#3509) by @Jocs in #4657
- fix(muya): keep list item non-empty on Enter in empty first paragraph (#4644) by @Jocs in #4660
- fix(desktop): restore vue-tsc typecheck (vite 7 PluginOption) by @Jocs in #4667
- fix(release): support immutable releases (draft-then-promote) + docs by @Jocs in #4666
- fix(muya): undo/redo corruption on coalesced paragraphβlist + text edits by @Jocs in #4669
- fix(renderer): keep find-bar prefill from being clobbered on open by @NSO73 in #4646
- fix(muya): preserve nested-list indentation in RTL mode by @Jocs in #4676
- fix(muya): load mhchem onto the same katex instance so \ce renders (#4670) by @Jocs in #4674
- fix(muya): keep inline links that are followed by a bare URL or text (#4671) by @Jocs in #4672
- fix(keybinding): sync menu bar and command palette when keybindings change by @Jocs in #4681
- fix(muya): guard detached code block in language selector (#4654) by @Jocs in #4677
- test(e2e): stabilize flaky search-prefill test (wait for selection commit) by @Jocs in #4682
- fix: export PDF/HTML/print in the editor's text direction (RTL) by @Jocs in #4678
- fix(muya): create a code-block when typing ``` + Enter inside block-quotes and lists by @Jocs in #4689
- fix(muya): prevent undo/redo exceptions from permanently disabling history (#4685) by @Jocs in #4692
- fix(muya): auto-hide inline markers when holding an arrow key out of a token by @Jocs in #4694
- test(e2e): replace fixed waits with expect.poll in editor-input by @NSO73 in #4695
- fix: normalize first-row colspan table paste by @Renakoni in #4707
- fix(renderer): use the theme text colour for the key bindings list (#3937) by @FurkaanBoraa in #4713
- fix: wrap selected text when typing auto-pair characters by @Renakoni in #4698
- fix(muya): skip empty sibling containers in caret navigation (#4644 follow-up) by @FurkaanBoraa in #4715
- fix(muya): stop the paragraph front-menu from acting on a stale block (#4686) by @Jocs in #4714
- fix(muya): re-sync the live tree from json state when an undo/redo apply throws by @Jocs in #4717
- fix(desktop): paint the launch window in the active theme's background (#3957) by @FurkaanBoraa in #4718
- fix(renderer): keep the key bindings hover row readable on dark themes by @FurkaanBoraa in #4719
- fix(renderer): make the custom dictionary table readable on dark themes by @FurkaanBoraa in #4721
- feat(muya): self-contained editor typography via --mu-* options by @Jocs in #4722
- refactor(desktop): consume muya self-contained typography, remove shell style injection by @Jocs in #4726
- fix(muya): move preview toolbar to the block's top-right by @Jocs in #4734
- fix(renderer): hide muya float tools in source-code mode by @Jocs in #4732
- fix(desktop): remove duplicate title when using the native title bar by @Jocs in #4630
- fix(muya): keep a nested sublist when forward-deleting an empty list item (#1845) by @Jocs in #4725
- fix(muya): remove the inner format when un-toggling a nested inline run (#2063) by @Jocs in #4727
- docs: add commenting guidelines by @Jocs in #4738
- fix(muya): escape parentheses in inserted image paths (#3060) by @Jocs in #4728
- fix(muya): decode HTML entities in fetched page titles when pasting a URL (#2525) by @Jocs in #4729
- fix(muya): reset search state when the document is replaced (#1932) by @Jocs in #4730
- fix(muya): split on Enter over a cross-block selection (#2443) by @Jocs in #4735
- fix(muya): let Enter replace a selection when the format toolbar is shown (#3196) by @Jocs in #4736
- fix(muya): stop punctuation after a link wrapping to its own line (#2258, #3025) by @Jocs in #4737
- chore: audit Claude-authored comments against the commenting guidelines by @Jocs in #4740
- fix: normalize HTML task-list paste by @Renakoni in #4710
- fix: preserve bare URL HTML links on paste by @Renakoni in #4711
- fix: preserve whitespace-only plain text paste by @Renakoni in #4706
- fix: preserve nested HTML lists under ordered parents by @Renakoni in #4709
- fix: prevent nested empty list items from becoming setext headings by @Renakoni in #4697
- fix: preserve empty task list items when parsing markdown by @Renakoni in #4696
- fix: remove ~1s sidebar delay for newly created files (#3955) by @Jocs in #4744
- fix(i18n): degrade malformed translations to raw text instead of crashing (#4046) by @Jocs in #4745
- fix: vertically center task list checkbox with item text by @Jocs in #4750
- fix(desktop): prefer UTF-8 when a file is valid UTF-8 instead of trusting ced (#3151) by @Jocs in #4739
- fix(desktop): scroll the view up when the caret moves above the viewport (#3329) by @Jocs in #4742
- fix: scroll the active tab into view on tab switch (#3958) by @Jocs in #4743
- fix(muya): scroll wide math blocks instead of clipping by @Jocs in #4751
- fix(desktop): route undo/redo to CodeMirror in source code mode by @Jocs in #4752
- fix(muya): leave Tab to the IME during composition by @Jocs in #4753
- fix(desktop): add a context menu to the sidebar root folder by @Jocs in #4754
- fix(muya): preserve code fence length on serialize by @Jocs in #4755
- fix(muya): refresh math/diagram preview on undo by @Jocs in #4756
- fix(desktop): resolve relative local links on export by @Jocs in #4757
- fix(muya): require a word boundary before an emoji shortcode by @Jocs in #4758
- fix(desktop): don't overwrite an existing file when creating from the sidebar by @Jocs in #4759
- fix(desktop): ignore content-identical file-change events by @Jocs in #4760
- fix(desktop): make the source-mode selection visible on dark themes by @Jocs in #4771
- fix(desktop): persist export dialog options across sessions by @Jocs in #4768
- fix(muya): convert $$ to a math block in place inside a list item by @Jocs in #4767
- fix(muya): self-close generated
tags for JSX/MDX compatibility by @Jocs in #4766
- fix(muya): preserve current-line indent on Enter in code fences by @Jocs in #4761
- fix(muya): make autolinks and bare URLs followable on Cmd/Ctrl-click by @Jocs in #4763
- fix(muya): exclude selection whitespace when applying inline format by @Jocs in #4762
- fix(desktop): make empty-state CTA button labels readable in all themes by @Jocs in #4775
- fix(muya): surface the KaTeX parse error for invalid math by @Jocs in #4764
- fix(desktop): keep sidebar width + tree collapse state across icon toggle by @Jocs in #4769
- fix(muya): recognize
c++/h++as aliases for the cpp code grammar by @Jocs in #4794 - fix(muya): don't highlight LaTeX
\%as a comment by @Jocs in #4795 - fix(muya): recolor sequence-diagram text/boxes for dark themes by @Jocs in #4800
- fix(muya): keep image resize handles attached on layout reflow by @Jocs in #4802
- fix(muya): make cpp c++/h++ alias registration idempotent by @Jocs in #4816
- fix(desktop): preserve TOC collapse state across content edits by @Jocs in #4803
- fix(desktop): make Paragraph/Format commands inert in source mode (grey out menus) by @Jocs in #4810
- fix(desktop): New File on a collapsed sidebar folder expands it by @Jocs in #4809
- fix(desktop): select the query when re-opening the Find bar by @Jocs in #4807
- fix(desktop): keep diagram content when exporting with Header & Footer by @Jocs in #4805
- fix(desktop): list bundled fonts in the font picker by @Jocs in #4801
- fix(desktop): remove doubled Edit-menu separator on Windows/Linux by @Jocs in #4797
- fix(desktop): generate a PDF outline from headings on export by @Jocs in #4798
- fix(desktop): avoid PDF/print page breaks right after a heading by @Jocs in #4799
- fix(desktop): resolve Homebrew/standard bin dirs for GUI launches by @Jocs in #4796
- fix(muya): show and slug TOC headings by rendered plain text (#3516) by @Jocs in #4811
- Add UKey Wallet sponsor to README and website by @Jocs in #4819
- fix(desktop): apply editor max-width preference to @muyajs/core content column (#4828) by @Jocs in #4830
- Add Bengali README and links by @FahimFBA in #4823
- fix(muya): skip identity operations during deferred flush by @tech-hoon in #4815
- fix(muya): harden History against identity (null) json-change ops by @Jocs in #4838
- fix(muya): stop inline math showing a scrollbar for trailing sub/superscripts (#4837) by @Jocs in #4839
- fix(muya): isolate mermaid render failures during export (#4812) by @Jocs in #4840
- fix(desktop): correct English typos in locale and preference schema (#4787) by @Jocs in #4845
- fix(muya): stop double percent-encoding autolink hrefs by @Jocs in #4841
- fix(muya): keep pasted list items in order when merging mid-list by @Jocs in #4842
- fix(desktop): confirm before opening executable link targets (code execution) by @Jocs in #4843
- fix(muya): keep soft line breaks when exporting to HTML/PDF by @Jocs in #4844
- fix(muya): show escaped pipe in table cell code as | not | (#4849) by @Jocs in #4850
- fix(muya): preserve fenced code block info string on round-trip (#4770) by @Jocs in #4846
- fix(muya): load Prism component dependencies in order (fixes flaky c++ load) by @Jocs in #4861
- refactor(muya): treat the code fence info string as the source of truth (CommonMark) by @Jocs in #4856
- fix(muya): call h1-h6 "headings" not "headers" in the insert menu by @Jocs in #4854
- fix(desktop): don't crash on unwatchable image directories (UNC/WSL paths) by @Jocs in #4853
- fix(desktop): save files atomically to prevent data loss on crash by @Jocs in #4852
- fix(desktop): make crash-recovery buffer writes durable against power loss by @Jocs in #4864
- fix(muya): render extensionless remote images served with a charset (shields.io badges) by @Jocs in #4857
- fix(muya): follow the link when modifier-clicking a linked image by @Jocs in #4858
- fix(muya): follow the link on Ctrl/Cmd-click for reference-linked and raw-HTML linked images (#4865) by @Jocs in #4866
- fix(desktop): keep TOC collapse state across tab switches by @Jocs in #4860
- fix(desktop): flush pending edits before saving (dropped last keystroke) by @Jocs in #4859
- fix: preserve Google Docs CSS formatting on paste by @Renakoni in #4699
- fix(desktop): preserve RTL text direction in PDF and print export by @Jocs in #4874
- docs: update sponsor logo by @Jocs in #5014
- docs: remove sponsor ukey by @Jocs in #5217
- fix: preserve viewport when toggling task-list checkbox by @Awaker-OTE in #5189
- fix(desktop): allow saving directly to a drive root (#5150) by @Panisnbb in #5188
- docs: fix grammar issues in FAQ.md by @woltary02-creator in #5089
- fix(ui): sync quick insert highlight with input method by @KDOJP in #5176
- feat(i18n): add Dutch locale + validation tests + fix existing issues by @rkristelijn in #5137
- Japanese translation update by @coolvitto in #5049
- fix: allow copy-paste in same folder with auto-rename by @rkristelijn in #5139
- chore: add pre-commit hooks (husky + lint-staged) by @rkristelijn in #4999
- fix(muya): escape HTML in image attribute values (CWE-79) by @andesyteoss in #4980
- fix: #5001 persist pasted bitmap images to the assets folder per preferences by @Panisnbb in #5168
- fix(muya): preserve cursor on IME composition backspace(#4956) by @Zengzzhao in #4957
- fix(muya): size table columns to their content by @Renakoni in #4952
- fix: handle UNC image paths and watchers by @Renakoni in #4778
- fix(desktop): ignore revoked output pipe errors on macOS by @Awaker-OTE in #5229
- feat(desktop): add "Reset Zoom" item to the Window menu by @xrgzs in #5185
- fix: #3469 decode Windows clipboard file paths as UTF-16LE by @Panisnbb in #5167
- fix(desktop): prevent CodeMirror line tree corruption by @Renakoni in #4930
- fix(i18n): add the missing Dutch resetZoom label by @githello1 in #5245
- feat(macOS): add Dictionary lookup for selected editor text by @nikkogibler in #4814
- fix: #4890 use file extension for side bar icons by @doktorigi in #4910
- fix(muya): #4747 deep clone editor state without recursing by @CookPiu in #5259
- fix: init image size when render html tag image by @Jocs in #5264
- fix: render rect selection in table by @Jocs in #5265
- fix: the missing locale key by @Jocs in #5266
- fix: #5152 align TOC navigation with editor viewport by @foo-hao in #5153
- fix: #5130 keep Electron locale resources for all supported UI languages by @legsing in #5132
- fix: #5129 detect system language on first start by @legsing in #5131
- fix: skip website preview deploy on fork PRs by @Jocs in #5278
- feat: add 'Treat soft newlines as spaces' preference (#1849) by @wmoss in #4937
- fix(muya): keep IME input intact after a soft line break by @Jocs in #5281
- fix(muya): stop the quick-insert hint claiming a line of its own by @Jocs in #5283
- fix(muya): give a code block's trailing empty line a line box by @Jocs in #5286
- fix(muya): keep footnote reference ids intact for special identifiers (#5208) by @Jocs in #5285
- fix(muya): skip search matches whose block left the document (#5163, #5215) by @Jocs in #5287
- fix(muya): keep the image resize bar from crashing after its image is removed (#5216) by @Jocs in #5288
- fix(muya): ignore a quick-insert pick once its paragraph is gone (#5213) by @Jocs in #5289
- fix(muya): drop an image selection whose block left the document (#5055) by @Jocs in #5291
- fix(muya): number empty lines in code blocks (#5294) by @Jocs in #5295
- fix(muya): don't restore a drag selection onto removed blocks (#4981, #5256) by @Jocs in #5290
- fix(muya): end the paragraph on a Shift+Enter that would leave an empty line by @Jocs in #5300
- fix: make anchor links reach CJK headings and headings in other documents (#5292) by @Jocs in #5298
- fix(desktop): flush pending edits before entering source code mode by @richbodo in #5103
- fix(muya): load relative images from folders named with #, ? or % (#5302) by @Jocs in #5301
- test(desktop): wait for TOC scrolls to settle in the toc-scroll e2e by @Jocs in #5303
- fix(muya): make a code block a diagram when its language is a diagram language (#5060) by @Jocs in #5304
- docs: fix the macOS alias path in the CLI docs by @Jocs in #5308
- chore: run only eslint --fix on staged desktop TS/Vue files by @Jocs in #5318
- fix(desktop): ignore line-ending menu updates for a closed window (#4923) by @Jocs in #5319
- fix: #4926 prevent emoji deletion from splitting surrogate pairs by @Renakoni in #4931
- fix(desktop): keep exported links working from folders named with #, ? or % by @Dev-next-gen in #5320
- fix(desktop): explain the max width format in preferences (#5331) by @Jocs in #5334
- fix(muya): delete emoji whole in code blocks and drop the caret-inside-cluster handler (#4926) by @Jocs in #5332
- fix(desktop): keep exported images working from folders named with #, ? or % (#5335) by @Jocs in #5337
- fix(muya): regex search freezes on zero-width patterns and splits emoji by @Jocs in #5333
- fix(desktop): keep the share host in exported links from UNC documents (#5336) by @Jocs in #5338
- fix: #4899 keep trailing content out of the child list when outdenting a list item by @doktorigi in #4913
- fix(muya): keep the link popover open when moving between links (#5313) by @anandghegde in #5324
- fix: reuse image on case-insensitive path match (#3119) by @dzid26 in #5326
- fix(desktop): name copied images after their content, not their path (#5344) by @Jocs in #5346
- fix(muya): only outdent a paragraph that sits in a nested list item (#5342) by @Jocs in #5345
- fix(muya): split the list when outdenting a task item into a plain list (#5341) by @Jocs in #5348
- fix(muya): edit a footnote definition as its own container (#5340, #5343) by @Jocs in https://github.com/marktext/marktext/pull/5347
- fix(muya): keep a Tab-indented list item out of a sublist of the other kind (#5349) by @Jocs in https://github.com/marktext/marktext/pull/5354
- fix(muya): preserve ordered list source markers by @Renakoni in https://github.com/marktext/marktext/pull/4776
- chore(desktop): disable the Report button in the error dialog by @Jocs in https://github.com/marktext/marktext/pull/5359
- fix(muya): run paragraph commands on the whole table or code block (#4944) by @Jocs in https://github.com/marktext/marktext/pull/5358
- fix(muya): don't drop blocks when a cut ends inside a code block (#4903, #5148) by @Jocs in https://github.com/marktext/marktext/pull/5357
- feat: add source line number toggle by @masalha-alaa in https://github.com/marktext/marktext/pull/5111
- fix(muya): change the heading level of the caret's paragraph, not its list (#5360) by @Jocs in https://github.com/marktext/marktext/pull/5361
- fix(muya): keep a setext heading's level when promoting or demoting it (#5362) by @Jocs in https://github.com/marktext/marktext/pull/5363
- fix(muya): keep every line when a multi-line block becomes a heading (#5366) by @Jocs in https://github.com/marktext/marktext/pull/5367
- fix(muya): collapse only the nested code block when a cut starts in its language line (#5368) by @Jocs in https://github.com/marktext/marktext/pull/5370
- fix(muya): keep the code block when a cut ends in its language line (#5371) by @Jocs in https://github.com/marktext/marktext/pull/5372
- fix(muya): remove the selected rest of a list or quote when a cut starts in it (#5385) by @Jocs in https://github.com/marktext/marktext/pull/5397
- feat(muya): support same-line display math by @Renakoni in https://github.com/marktext/marktext/pull/4935
- fix(muya): start an image resize only from the resize bar's own handles (#5116) by @Jocs in https://github.com/marktext/marktext/pull/5382
- fix(muya): don't crash or replace another block when picking a table size after undo (#5355) by @Jocs in https://github.com/marktext/marktext/pull/5384
- fix(desktop): launch normally when NODE_ENV=development is set (#5053) by @Jocs in https://github.com/marktext/marktext/pull/5374
- fix(desktop): open files from a second instance started with --user-data-dir (#3020) by @Jocs in https://github.com/marktext/marktext/pull/5375
- fix(desktop): keep debug mode out of release builds (#5407) by @Jocs in https://github.com/marktext/marktext/pull/5410
- fix(desktop): read locale files from the app's resources (#5408) by @Jocs in https://github.com/marktext/marktext/pull/5411
- fix(muya): keep the document intact when a cut ends in a table (#5400, #5405, #5399, #5398) by @Jocs in https://github.com/marktext/marktext/pull/5406
- fix(muya): cancel Backspace that turns a setext heading into a paragraph (#5035) by @Jocs in https://github.com/marktext/marktext/pull/5381
- fix(muya): keep a dollar sign in a regex replace capture by @Dev-next-gen in https://github.com/marktext/marktext/pull/5404
- fix(muya): regexp replace groups β per-match Replace All, unmatched groups, two-digit $nn by @Jocs in https://github.com/marktext/marktext/pull/5420
- fix(muya): keep an inline raw HTML tag's id intact by @Dev-next-gen in https://github.com/marktext/marktext/pull/5416
- fix(muya): re-read the block type after a Backspace on a syntax marker (#5388) by @Jocs in https://github.com/marktext/marktext/pull/5421
- fix(muya): keep blocks after a paragraph merged into a table cell out of the row (#5386) by @Jocs in https://github.com/marktext/marktext/pull/5422
- fix(muya): keep the rest of a blockquote quoted on forward-Delete merge (#5423) by @Jocs in https://github.com/marktext/marktext/pull/5424
- fix(muya): escape braces in a plain-text find query by @Dev-next-gen in https://github.com/marktext/marktext/pull/5428
- fix(desktop): open Quick Open when files are open without a folder by @Dev-next-gen in https://github.com/marktext/marktext/pull/5431
- fix(muya): select the document when Select All's cached caret block was removed by undo (#5387) by @Jocs in https://github.com/marktext/marktext/pull/5425
- fix(desktop): load the e2e Playwright config by moving it to the package root by @Fr4ncis in https://github.com/marktext/marktext/pull/5435
- fix(muya): ignore a table tool click once its table left the document (#5442) by @Jocs in https://github.com/marktext/marktext/pull/5443
- docs: add StarDesk as a special sponsor by @Jocs in https://github.com/marktext/marktext/pull/5444
- fix(tests): Windows paths + CI + timeout fix by @dzid26 in https://github.com/marktext/marktext/pull/5323
- ci: check every text file out as LF so the Windows test leg sees the same bytes by @Jocs in https://github.com/marktext/marktext/pull/5447
- ci: bound the unit-test job at ten minutes by @Jocs in https://github.com/marktext/marktext/pull/5448
- fix(desktop): keep title bar path segments in order under the Bidi algorithm by @dronov-dmitry in https://github.com/marktext/marktext/pull/5317
- fix(muya): apply pandoc's tex_math_dollars constraints to
$β¦$(#5446) by @Jocs in https://github.com/marktext/marktext/pull/5449 - feat: add the texMathDollars preference, replacing the math option (#5446) by @Jocs in https://github.com/marktext/marktext/pull/5450
- feat: implement pandoc's tex_math_gfm, replacing the GitLab compatibility option (#5446) by @Jocs in https://github.com/marktext/marktext/pull/5457
- feat: show selected text word count by @Renakoni in https://github.com/marktext/marktext/pull/4457
- docs: explain how to put
marktexton PATH on every platform by @Jocs in https://github.com/marktext/marktext/pull/5459 - fix(desktop): wrap long code-block lines when exporting to PDF (#5307) by @Jocs in https://github.com/marktext/marktext/pull/5460
- fix(desktop): restore treePathExcludePatterns filtering in the sidebar tree by @Jocs in https://github.com/marktext/marktext/pull/5461
- fix(desktop): require deliberate movement before a tab click becomes a drag (#4895) by @Jocs in https://github.com/marktext/marktext/pull/5464
- fix(desktop): put the unsaved dot back on the left of the title bar path (#5467) by @Jocs in https://github.com/marktext/marktext/pull/5468
- fix(muya): render SVG images that state no size of their own (#4991) by @Jocs in https://github.com/marktext/marktext/pull/5462
- fix(muya): bound inline math by the text column, not by its own box (#5034) by @Jocs in https://github.com/marktext/marktext/pull/5466
- fix(muya): give every mermaid render its own id (#5023) by @Jocs in https://github.com/marktext/marktext/pull/5465
- fix(muya): show the text cursor over the whole editable column (#5477) by @Jocs in https://github.com/marktext/marktext/pull/5478
- feat: support pandoc's backslash TeX math delimiters (#5446) by @Jocs in https://github.com/marktext/marktext/pull/5481
- fix(desktop): theme the table of contents text and arrows (#5094) by @Jocs in https://github.com/marktext/marktext/pull/5486
- fix(desktop): tell the two backslash math preferences apart in the UI (#5481) by @Jocs in https://github.com/marktext/marktext/pull/5485
- feat(export): convert Markdown to arbitrary formats via Pandoc by @dimbc in https://github.com/marktext/marktext/pull/5379
- fix(desktop): make source mode math highlighting follow the editor (#5483) by @Jocs in https://github.com/marktext/marktext/pull/5484
- fix(desktop): reload an unedited tab silently when its file changes on disk (#3652) by @Jocs in https://github.com/marktext/marktext/pull/5479
- fix(muya): keep footnote definitions packed one per line as siblings by @Jocs in https://github.com/marktext/marktext/pull/5487
- fix(muya): resolve footnote references while escapes are still visible by @Jocs in https://github.com/marktext/marktext/pull/5491
- fix(muya): give each repeated footnote reference its own id and backref by @Jocs in https://github.com/marktext/marktext/pull/5492
- feat(i18n): add Russian (ru) localization by @blvcknwh1te in https://github.com/marktext/marktext/pull/5496
- test(muya): stop the deepClone spec from overflowing the stack itself by @Jocs in https://github.com/marktext/marktext/pull/5505
- fix(i18n): give Dutch users the Dutch editor UI, and hold the language registries together by @Jocs in https://github.com/marktext/marktext/pull/5502
- fix(desktop): resolve local link paths without decoding the document folder (#4749) by @Jocs in https://github.com/marktext/marktext/pull/5506
- test(desktop): repoint the technical-term checks at keys that exist by @Jocs in https://github.com/marktext/marktext/pull/5503
- i18n: improve Russian localization wording by @NeroWolfe75 in https://github.com/marktext/marktext/pull/5507
- feat(toc): highlight active heading based on cursor position by @rkristelijn in https://github.com/marktext/marktext/pull/4345
- docs: update verify the download instructions by @slovanos in https://github.com/marktext/marktext/pull/5511
- fix(desktop): keep the outline title in place, and make its word-wrap preference work by @Jocs in https://github.com/marktext/marktext/pull/5514
- perf(muya): skip a code block re-render that produces identical DOM by @Jocs in https://github.com/marktext/marktext/pull/4876
- fix(muya): re-render a code block when the grammar it renders with changes (#5515) by @Jocs in https://github.com/marktext/marktext/pull/5516
- fix(desktop): stop clipboard image uploads clobbering each other and mangling paths by @Jocs in https://github.com/marktext/marktext/pull/5512
- fix(desktop): retry a save whose rename an SMB share refused (#5322) by @Jocs in https://github.com/marktext/marktext/pull/5520
- fix(desktop): find the uploader the user installed, wherever they installed it (#5518) by @Jocs in https://github.com/marktext/marktext/pull/5519
- fix(desktop): find pandoc the same way the uploader finds picgo (#2751) by @Jocs in https://github.com/marktext/marktext/pull/5525
- Type the .vue CodeMirror/spell-checker handles and forbid
anyin .vue (#4257) by @Jocs in https://github.com/marktext/marktext/pull/5521 - Type the editor handle as Muya, from the engine's own declarations (#4257) by @Jocs in https://github.com/marktext/marktext/pull/5533
- Drop the legacy muya ambient bridge and its aliases (#4257) by @Jocs in https://github.com/marktext/marktext/pull/5526
- fix(muya): select the clicked line ourselves on a triple-click (#5389) by @Jocs in https://github.com/marktext/marktext/pull/5524
- fix(muya): take the image references from the live DOM after selecting (#5391) by @Jocs in https://github.com/marktext/marktext/pull/5534
- fix(muya): keep an image resize released outside the window (#5393) by @Jocs in https://github.com/marktext/marktext/pull/5537
- fix(muya): size an image from where its resize handle was grabbed (#5392) by @Jocs in https://github.com/marktext/marktext/pull/5535
- fix(muya): cut a cross-block selection from beforeinput too (#5415) by @Jocs in https://github.com/marktext/marktext/pull/5536
- fix: keep the export render container out of the page layout (#5541) by @Jocs in https://github.com/marktext/marktext/pull/5542
- fix(muya): keep a wide equation from scrolling under its own tag (#4339) by @Jocs in https://github.com/marktext/marktext/pull/5540
- fix: restore code block legibility and text crispness (#5539) by @Jocs in https://github.com/marktext/marktext/pull/5553
- test: fold the two #5539 specs into one by @Jocs in https://github.com/marktext/marktext/pull/5557
- fix(muya): keep a hard line break's glyph on the line it ends (#2094) by @Jocs in https://github.com/marktext/marktext/pull/5556
- revert: keep grayscale antialiasing on editor text (#5539) by @Jocs in https://github.com/marktext/marktext/pull/5558
- fix(muya): keep sequence diagram arrowheads in exported PDFs (#2423) by @Jocs in https://github.com/marktext/marktext/pull/5561
- fix(muya): pair emphasis delimiters the way CommonMark does (#2086) by @Jocs in https://github.com/marktext/marktext/pull/5555
- fix(muya): parse link destinations the way CommonMark does (#2377) by @Jocs in https://github.com/marktext/marktext/pull/5562
- Add a zoom/pan viewer and image export for rendered diagrams by @Jocs in https://github.com/marktext/marktext/pull/5554
- fix: give the editor and Preferences windows their own menu bar (#2245) by @Jocs in https://github.com/marktext/marktext/pull/5560
- perf(muya): re-render only the two affected blocks when stepping through search (#5580) by @ycyc0421 in https://github.com/marktext/marktext/pull/5569
- fix(muya): open documents whose reference labels contain regex characters (#5578) by @ycyc0421 in https://github.com/marktext/marktext/pull/5579
- fix: #5582 route standard edit shortcuts to macOS native Open/Save dialogs by @Jocs in https://github.com/marktext/marktext/pull/5588
- fix(build): keep the Windows Markdown association across updates (#4966) by @Jocs in https://github.com/marktext/marktext/pull/5463
- fix(desktop): apply the Markdown math preferences to the pandoc export (#5566) by @Jocs in https://github.com/marktext/marktext/pull/5590
- fix(muya): keep the table column toolbar anchored while hovering it (#5574) by @Jocs in https://github.com/marktext/marktext/pull/5592
- docs: replace CLAUDE.md with AGENTS.md and refresh contributor docs by @Jocs in https://github.com/marktext/marktext/pull/5595
- feat(muya): support ordered task lists (#1691) by @Jocs in https://github.com/marktext/marktext/pull/5597
- fix(build): unify the app name to MarkText (#5202) by @Jocs in https://github.com/marktext/marktext/pull/5598
- fix: #5575 restore column handle menu by @davidscottpope-gif in https://github.com/marktext/marktext/pull/5589
- feat(muya): support tilde code fences (#1788) by @Jocs in https://github.com/marktext/marktext/pull/5600
- fix(muya): wrap long table cell content (#5605) by @Jocs in https://github.com/marktext/marktext/pull/5606
New Contributors
- @Jocs with @Copilot made their first contribution in #4329
- @FurkaanBoraa made their first contribution in #4510
- @jyte made their first contribution in #4400
- @NSO73 made their first contribution in #4448
- @Renakoni made their first contribution in #4707
- @FahimFBA made their first contribution in #4823
- @tech-hoon made their first contribution in #4815
- @Awaker-OTE made their first contribution in #5189
- @Panisnbb made their first contribution in #5188
- @woltary02-creator made their first contribution in #5089
- @KDOJP made their first contribution in #5176
- @rkristelijn made their first contribution in #5137
- @coolvitto made their first contribution in #5049
- @andesyteoss made their first contribution in #4980
- @Zengzzhao made their first contribution in #4957
- @xrgzs made their first contribution in #5185
- @githello1 made their first contribution in #5245
- @nikkogibler made their first contribution in #4814
- @doktorigi made their first contribution in #4910
- @CookPiu made their first contribution in #5259
- @foo-hao made their first contribution in #5153
- @legsing made their first contribution in #5132
- @wmoss made their first contribution in #4937
- @richbodo made their first contribution in #5103
- @Dev-next-gen made their first contribution in #5320
- @anandghegde made their first contribution in #5324
- @dzid26 made their first contribution in #5326
- @masalha-alaa made their first contribution in https://github.com/marktext/marktext/pull/5111
- @Fr4ncis made their first contribution in https://github.com/marktext/marktext/pull/5435
- @dronov-dmitry made their first contribution in https://github.com/marktext/marktext/pull/5317
- @dimbc made their first contribution in https://github.com/marktext/marktext/pull/5379
- @blvcknwh1te made their first contribution in https://github.com/marktext/marktext/pull/5496
- @NeroWolfe75 made their first contribution in https://github.com/marktext/marktext/pull/5507
- @slovanos made their first contribution in https://github.com/marktext/marktext/pull/5511
- @ycyc0421 made their first contribution in https://github.com/marktext/marktext/pull/5569
- @davidscottpope-gif made their first contribution in https://github.com/marktext/marktext/pull/5589
Full Changelog: v0.19.0...v0.20.0
Stable Channel Update for Desktop
The Stable channel has been updated to 154.0.8037.97/.98 for Windows and Mac and 154.0.8037.97 to Linux which will roll out over the coming days/weeks. A full list of changes in this build is available in the Log
Security Fixes and Rewards
Note: Access to bug details and links may be kept restricted until a majority of users are updated with a fix. We will also retain restrictions if the bug exists in a third party library that other projects similarly depend on, but havenβt yet fixed.
This update includes 11 security fixes. Please see the Chrome Security Page for more information.
[N/A][549995090] Critical CVE-2026-103628: Out of bounds write in WebGL. Reported by Google on 2026-08-21
[N/A][553114097] High CVE-2026-103626: Incorrect authorization in FileSystem. Reported by Google on 2026-08-26
[N/A][556268833] High CVE-2026-103621: Integer overflow in Compositing. Reported by Google on 2026-09-02
[TBD][557323166] High CVE-2026-103630: Use after free in FedCM. Reported by xinyang on 2026-09-04
[N/A][559893859] High CVE-2026-103625: Type confusion in V8. Reported by Google on 2026-09-11
[TBD][561660166] High CVE-2026-103624: Use after free in Contextual Tasks. Reported by xuanocto1221 on 2026-09-15
[N/A][562038679] High CVE-2026-103629: Integer overflow in Skia. Reported by Google on 2026-09-15
[TBD][565742179] High CVE-2026-103622: Use after free in SVG. Reported by xinyang on 2026-09-24
[TBD][565742180] High CVE-2026-103623: Use after free in MediaStream. Reported by xinyang on 2026-09-24
[TBD][567088927] High CVE-2026-103631: Buffer overflow in WebRTC. Reported by Xinyang Ge (Anthropic), assisted by Claude on 2026-09-28
[N/A][553147154] Medium CVE-2026-103627: Information leak in SVG. Reported by Google on 2026-08-26
We would also like to thank all security researchers that worked with us during the development cycle to prevent security bugs from ever reaching the stable channel.
Many of our security bugs are detected using AddressSanitizer, MemorySanitizer, UndefinedBehaviorSanitizer, Control Flow Integrity, libFuzzer, or AFL.
Interested in switching release channels? Find out how here. If you find a new issue, please let us know by filing a bug. The community help forum is also a great place to reach out for help or learn about common issues.
Distribution Release: umbrelOS 2.0.0
Development Release: Ubuntu 26.10 Beta
8.4.0
Changes in 8.4.0:
- Added "Manual Duplex" (under "Reorder") as a clearer way to combine front and back sides scanned separately
- This is meant to replace the "Interleave" buttons, which will be removed in a future version
- Checking "Reverse back sides" is equivalent to using "Alternative Interleave"
- Unchecking "Always show preview" will add a separate button for one-click actions like before
- Admins can use "HideManualDuplex"/"HideInterleave" to control visibility
- Crop: Added a middle handle for moving the whole selection
- Crop/Split/Combine: Added arrow key controls
- Added help text to some image forms
- Linux: Added a "Theme" setting to manually switch between Light and Dark mode
- Mac: Custom page sizes are no longer shown for feeders with the Apple driver (as they don't work)
- Mac: Fixed keyboard shortcuts for non-QWERTY keyboard layouts
- Mac: Fixed flatbed/feeder detection with the Apple driver
- Fixed the "Maximum quality" option not being retained after cropping
- Fixed the "Black and White" keyboard shortcut not being editable in Keyboard Shortcuts
- Fixed an issue with email attachments not working when Thunderbird is already open
- Console: The --device option can now match the device ID as well as the name
- Sane: KeyValueOptions set in profile XML now support true/false and are retained when editing a profile
- Escl: Fixed a misspelled feeder status value and added an admin page for better compatibility
- Sdk: Added MetadataCaps.ProtocolVersion
Bitfocus Companion v5.0.7
π¦ Downloads available at
π΅ Donate to the project at
- open collective https://opencollective.com/companion
Companion v5.0.7 - Release Notes
π BUG FIXES
- only add imageBuffers layer to simple presets when a feedback declares imageBuffer #4490
- limit preset advanced-feedback style overrides to affectedProperties #4410 #4490
- some surface open race conditions
- update elgato-stream-deck surface module
- layered presets lose all feedbacks when style overrides use plain values (#4477)
- late closeSurface closing a reopened plugin surface
- abort signal not being propagated into module action callback
- move expression stream re-evaluation log to silly level #4489
Full Changelog: v5.0.6...v5.0.7
Distribution Release: Nitrux 7.0.0
Pinktober 2026
Every October, people around the world come together to raise awareness of breast cancer and show their support for those affected by it. Pinktober is a time to stand united, share important information, and remind ourselves and others of the importance of taking care of our health.
Supporting Through Driving
Since 2019, we have been proud to support Pinktober alongside our community through our special Pink Ribbon Charity Pack DLCs forΒ Euro Truck Simulator 2Β andΒ American Truck Simulator.
As in previous years,Β 100% of the income from these DLCs will be donated to theΒ Alliance of Women with Breast CancerΒ at the end of October. The organization works to support and empower people affected by breast cancer, and we are grateful to be able to contribute to their important work together with you.
By adding the Pink Ribbon Charity Pack DLCs to your collection, you can give your trucks a vibrant new look while helping support a meaningful cause. Whether you pick one up for yourself or as a gift for a fellow trucker, every contribution counts.
A Reminder to Take Care of Yourself
Pinktober is about more than showing your support on the road. It is also an opportunity to remind ourselves of the importance of our own health.
- Take the time to perform regular self-checks.
- Stay informed about potential symptoms and risk factors.
- Visit your doctor for regular screenings and professional advice.
Regular check-ups and appropriate screening can play an important role in early detection.
Put Your Support on the Road
We'd love to see our #BestCommunityEver bring Pinktober to the roads of American Truck Simulator and Euro Truck Simulator 2. Customize your trucks with the Pink Ribbon designs, hit the road, and share your screenshots with us using #Pinktober2026.
Thank you to everyone who has supported our Pinktober campaigns over the years. Your generosity continues to help us support those affected by breast cancer and contribute to a cause that reaches far beyond our virtual roads.
Let's make Pinktober 2026 another year of solidarity, awareness, and support. Together, we can drive for a cause.
Distribution Release: OpenMandriva Lx 26.09 "ROME"
OBS Studio 33.0.0 Beta 5
Beta 5 Changes
- Fixed duplicate "Save Replay" hotkey entries when switching profiles [xtfo] (#13943)
- Fixed warning dialogs on macOS not rendering rich text [Warchamp7] (#13949)
- Fixed source icon state appearing inverted [Warchamp7] (#13953)
- Fixed audio monitoring settings not saving [Warchamp7] (#13951)
- Fixed missing encoder check showing missing encoders in an output mode that is not currently selected [Warchamp7] (#13950)
- Fixed Windows updater not updating game capture and virtual camera in some cases [Warchamp7] (#13939)
Beta 4 Changes
- Fixed a CI and packaging issue. There are no application changes since Beta 1.
Beta 3 Changes
- Fixed a CI issue. There are no application changes since Beta 1.
Beta 2 Changes
- Fixed a versioning issue. There are no application changes since Beta 1.
33.0 New Features
- Updated CEF from 127/6533 to 150/7871 [WizardCM] (#13900)
- This is a massive update to the underlying framework used for browser sources and docks from the July 2024 release to September 2026
- All of this work is on the backend and should be invisible to users. Please be sure to report any new weirdness or problems you run into with browser sources!
- Complete overhaul to plugin loading [FiniteSingularity/PatTheMav] (#13594)
- First-party plugins are now in a new folder named core
- Third-party plugins have an updated installation location and folder structure
- Existing third-party plugins will continue to load from the legacy locations until OBS Studio 34.0
- More information is available in our knowledge base article.
- Improved how source snapping works in the preview [Warchamp7] (#12298)
- New visual indicator added
- Sources now snap along the entire axis instead of only when directly touching
- Sources no longer snap to hidden sources
- Improved behavior of spinboxes for number values [Warchamp7] (#12337)
- Typing is no longer mysteriously blocked in some situations
- Numbers are no longer cut off in some situations
- Values now update only after pressing Enter and Enter does not close the window
- Holding Shift + Up/Down now advances multiple steps at a time
- Dragging the cursor inside the input but outside the text itself now works properly
- Enabled NVENC on Arm64 [RytoEX] (#13827)
33.0 Changes
- Added a check for encoders being missing when loading a profile [derrod] (#11340)
- Added support for newest NVIDIA Broadcast SDKs for NVIDIA Audio Effects and Video Effects [pkviet] (#13838)
- Added hotkeys for controlling audio monitoring of a source [Warchamp7] (#13599)
- Fixed issues with groups in Studio Mode [Warchamp7] (#11092)
- Fixed moving sources inside a group causing them to glitch out in Program
- Fixed moving sources inside a group showing up live in Program
- Adjusted naming of Window Capture methods on Windows [Penwy] (#12047)
- Improved detection of fullscreen games for Game Capture [Kira-NT] (#10880)
- Improved transparency handling for macOS Screen Capture [jcm93] (#13030)
- Scaled simple output recording audio bitrate by channel count [nickvonkaenel] (#13311)
- Removed support for Ubuntu 24.04
33.0 Bug Fixes
- Added a startup error if obs-transitions failed to load [notr1ch] (#13321)
- Improved file splitting for Hybrid MP4/MOV [derrod] (#13386)
- Fixed outputs getting stuck running when a bad rescale output resolution is set [suogesi] (#13375)
- Fixed monitoring icon state getting desynced when using third-party tools or websockets [prgmitchell] (#13822)
- Fixed potential crash when shader cache file is invalid [notr1ch] (#13538)
- Fixed a potential crash on Linux when USB mic is removed [R0te/RytoEX] (#13922)
- Fixed a potential crash when renaming a source with the Add Source window open [Warchamp7] (#13800)
- Fixed a potential deadlock during video/audio tasks [exeldro] (#13579)
- Fixed an issue with B-frame offset calculation in AMF that could cause streams to disconnect [lexano-ivs] (#13762)
- Fixed PipeWire screencast sources being duplicated in studio mode [tytan652] (#13673)
- Fixed a potential crash when switching off a newly created profile [Warchamp7] (#13182)
- Fixed a source toolbar crash when source type is missing [Penwy] (#13539)
33.0 Developer Information
- Added frontend event and output signal for replay buffer saving [Penwy] (#8955)
- Added guidance regarding the theme system to the top of all theme files [Warchamp7] (#13733)
- Added ability to set a file extension filter for OBS_PATH_FILE_SAVE path types [FiniteSingularity] (#10190)
- Added obs_frontend_is_safe_mode for first-party plugins
- Third-party plugins are not loaded at all in Safe Mode
- Added versions to Flatpak plugin extension point [tytan652] (#13735)
- Updated libnsgif to 1.0.0 [RytoEX] (#11178)
- This is a breaking change for any plugins using libobs/graphics gs_image_file
- Clarified documentation for obs_module_unload [notr1ch] (#13327)
- Required MbedTLS 3 and exclude 4 or later [tytan652] (#13799)
- Fixed repeated preview enable/disables not working [WarmUpTill] (#12580)
- Only emit core signal handlers for public canvases [tt2468] (#13574)
- Deprecated unused hidden API for sources [derrod] (#13122)
- Deprecated APIs for audio source monitoring_type [Warchamp7] (#13599)
- This is replaced by a new monitoring_enabled boolean
Checksums
OBS-Studio-33.0.0-beta5-Sources.tar.gz: 5b8d65c0b2981aa779eaf5bae9739ba5681290f03025b9eddd40cf5da2eb566a
OBS-Studio-33.0.0-beta5-Ubuntu-26.04-x86_64-dbsym.ddeb: 6fd06d0ee256f560875622da516880b119083b725e9280a7105221d589128952
OBS-Studio-33.0.0-beta5-Ubuntu-26.04-x86_64.deb: db1fdfad893d4d20adb3f899bd8ee24cf26b6088e23764c5ffbfe3eef6ca6153
OBS-Studio-33.0.0-beta5-Windows-arm64-PDBs.zip: 8b5860e48349a7d90794ab61e8b42458f270ccc4aeb53c4aa6d1f0469335b9af
OBS-Studio-33.0.0-beta5-Windows-arm64.zip: 7a7b3c3759dfc49df65d1b4e14cc23ad6092f4f36d83e44ea2978ec9f54a3c9f
OBS-Studio-33.0.0-beta5-Windows-x64-Installer.exe: 7ee61670a7e8738b4753487d3c3e75f30c35ddbe2937cdb75eb31b86054c3cf9
OBS-Studio-33.0.0-beta5-Windows-x64-PDBs.zip: 643c1b735da59b40052887ec0b891bd2852d2bd47c87227f268e3da026a0a86f
OBS-Studio-33.0.0-beta5-Windows-x64.zip: 8de0d330582083bc3b429e7dbe01d1fbc995dfdeeb3229eedf454a2f931c6481
OBS-Studio-33.0.0-beta5-macOS-Apple-dSYMs.tar.xz: 5b0545a3724c2920b02aa3df07c76f39bec73b1b814fcf78d1cb53dbae52393f
OBS-Studio-33.0.0-beta5-macOS-Apple.dmg: e7d289a68ee27e0d21900f380fd3d0c2c4c5c48ec0e1661fe6b093258b07eaa5
OBS-Studio-33.0.0-beta5-macOS-Intel-dSYMs.tar.xz: f4192371f6bc9ab92f2403893eb3c945fda37585185b3bce31a6d4fdef7a7229
OBS-Studio-33.0.0-beta5-macOS-Intel.dmg: 33b5a80275eaa7331cb39a71d530e63d3937672c62d6c9fb5c48039490b255df
