Β 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.
Normale weergave
nl-nl_windows_11_business_editions_version_26h2_x64_dvd_736a4983.iso
nl-nl_windows_11_consumer_editions_version_26h1_updated_sep_2026_x64_dvd_8c8cbc06.iso
nl-nl_windows_11_consumer_editions_version_26h2_x64_dvd_42643263.iso
Extended Stable Update for Desktop
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
Counter-Strike 2 Update
- [p]Various clipping fixes in Rush maps[/p][/*]
- [p]Fixed visualization of weapon inaccuracy + spread[/p][/*]
- [p]Added crosshair outline color option[/p][/*]
- [p]Added a new style "Static Quadrant"[/p][/*]
- [p]Enabled grenade crosshairs in freeze time for insta-smokes (just hold any grenade attack button)[/p][/*]
- [p]Allowed negative gaps for classic dynamic crosshair style[/p][/*]
- [p]Changed the classic dynamic crosshair alpha increments to 0.01[/p][/*]
- [p]Scope dot scale and color preferences are now included in the new crosshair share code[/p][/*]
- [p]Changed the format of the crosshair share code to accommodate newly included crosshair settings[/p][/*]
v1.18.34
Core
Bugfixes
- Send namespaced session and parent-session identity headers with model requests.
- Re-sign locally compiled macOS binaries so they run reliably on macOS 27+. (@ryangamerdev)
- Sign macOS CLI release binaries with a Developer ID.
Thank you to 3 community contributors:
- @dc85:
- docs(web): correct GPT 6.1 Sol cache pricing (#52176)
- @metal-huang:
- fix(tui): use path.sep for plugin name extraction in /status dialog (#52328)
- @ryangamerdev:
- fix(opencode): ad-hoc re-sign darwin binaries after local compile (#52183)
Early Stable Update for Desktop
The Stable channel has been updated to 155.0.8059.26/.27 for Windows and Mac as part of our early stable release to a small percentage of users. A full list of changes in this build is available in the log.
You can find more details about early Stable releases here.
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.
Srinivas Sista
Google Chrome
-
Bulwark
- v1.12.0 - Rules from the Message Menu, Copyable Sign-In Codes & Mobile App Linking for Every Account
v1.12.0 - Rules from the Message Menu, Copyable Sign-In Codes & Mobile App Linking for Every Account
1.12.0 (2026-09-30)
1.12.0 lets you create filter rules straight from a message, offers the code from sign-in mail for one-click copying, and gives a phone linked with "Link Mobile App" a sign-in of its own, for every kind of account. Search now leaves Spam and Trash out by default, and emptying an ordinary folder moves its mail to the Trash. Browsers with many logins start up much faster. It also contains three security fixes, so please update.
Thank you for your donations:
- You? Become a sponsor!
One-time
- Anonymous
Monthly
- @yerTools
- @jsaathof
- @berkersal
- @NABarnes
- @felixzieger
- @pr0ton11
- @fpauser
- @proxforge
- @spss20
- @elgringoYan
- @pauladams8
- @djpriest
- @umakers
- @zplizzi
- @jeremiah
- @Theoretisch1337
- @svandive
- @HiltMundell
Security
- Auth: The password+TOTP login no longer sends the webmail's OAuth client secret to a mail server the user chose when custom JMAP endpoints are allowed. Only admin-configured servers get it
- Auth: The identity provider round trip for "Link Mobile App" can no longer sign the browser in as whichever account answered it, and a re-authentication the provider answered from an existing session instead of a fresh login is refused
- Mail: Opening a previewed SVG attachment in a new tab no longer runs the sender's script in the webmail origin
Features
- Mail: A "Rules" entry in the message right-click menu creates filter rules from the message: always move mail from its sender, domain or mailing list, mark it read, tag it, or block the sender. A new rule can also run on the messages already in the folder, and it can be undone from the toast
- Filters: The rule editor suggests conditions from the message it was opened from (subject, recipients, List-Id, sender domain), and the new "is the address" and "has the domain" conditions match an address exactly
- Mail: Codes from sign-in and confirmation mail show as a copy chip in the message, and in the list for a day. "Show Verification Codes" in settings turns it off
- Mail: In the unified view, rows can be tinted with their account's color instead of showing the account dot, and tags this browser has no definition for, such as ones set by a server-side filter, get a color of their own instead of grey (#1052, thanks @lucamzanon)
- Search: The folder dropdown shows subfolders indented under their parents
- Composer: Pasted plain-text lines that start with "- ", "* ", "β’ ", "1. " or "1) " become real lists
- Calendar: The event popover finds the join link of Teams, Zoom, Meet, Webex, Jitsi, Whereby and GoTo meetings in the location or description, and the location opens in maps, with a copy button next to it (#1095, thanks @lucletoffe)
- Server:
LIBRETRANSLATE_API_KEY_FILE,BULWARK_JWT_AUTH_SECRET_FILE,BULWARK_STALWART_MASTER_USER_FILEandBULWARK_STALWART_MASTER_PASSWORD_FILEread these secrets from files, and the admin config acceptsoauthClientSecretFileandsessionSecretFile(#897, thanks @Cameo007) - Plugins:
PLUGIN_SIGNING_KEY_FILEpoints at an existing Ed25519 key for signing managed plugin bundles, for read-only secret mounts (#996, thanks @mulatta) - Releases: Container images and release files come with a signed build provenance attestation, and the standalone tarballs get a
.sha256. The README explains how to check them withgh attestation verify
Changes
- Search: Search leaves out Spam and Trash unless "All folders" is picked in the folder dropdown. A search started in Spam or Trash searches that folder
- Mail: Emptying a folder other than Trash or Junk moves its mail to the Trash, unless deleted mail is set to be removed permanently
- Mobile app: "Link Mobile App" is offered for every account. Password and password+TOTP accounts confirm their password (and code) in the dialog. The phone gets a sign-in of its own, so signing out in the browser no longer signs it out, and a sign-in link to copy sits next to the QR code. Failed password attempts are limited per account
- Calendar: Events are drawn as solid blocks of their calendar's color; declined and cancelled events are outlined
- UI: Success and info toasts are plain cards; only errors and warnings are colored
- Performance: With many logins, the browser restores them four at a time and no longer reloads every login's folders, identities and push connections each time one of them connects (#1132, thanks @lucamzanon)
- License: An additional permission under section 7 of the AGPL allows distributing apps built from this code through app stores. It is provisional until every earlier contributor has agreed (consent request) and applies in full to contributions made since 30 September 2026
- Docs: Guidelines for AI-assisted contributions in the README and CONTRIBUTING.md
Fixes
- Mail: Clicking a folder's unread count lists only that folder's unread mail, not unread mail from every folder of every account
- Mail: In "unread first" lists, a message you open stays in place until you open another
- Mail: The message list no longer flashes a reload right after the page opens
- Mail: On tablets, the message list comes back when the reading pane empties, for example after the open message is deleted or moved
- Mail: Dividers between rows no longer disappear at 125% or 150% display scaling
- Mail: The unread dot is centred on the sender avatar
- Mail: Attachments declared with a type the browser cannot show, such as
application/x-as400attachmentfrom IBM i systems,application/x-pdfor a catch-all type, preview according to their file name (#1127, thanks @dealerweb) - Send: Recipients the server refuses at send are reported. When it refuses all of them, the message stays open as not sent; otherwise a warning names the refused ones (#1123)
- Composer: The message body stays reachable in short reading panes, such as the bottom reading pane on a laptop (#1114)
- Composer: Pasted plain text keeps its blank lines
- Push: A notification link waits for a login that is still reconnecting instead of reporting the account as signed out, opens the folder of the right account, and no longer pulls you away from something you opened in the meantime (#1131, thanks @lucamzanon)
- Push: A browser subscribed with another VAPID key resubscribes on its own, and Firefox can turn push on again when it cannot read its old subscription (#1121, thanks @shukiv)
- Calendar: Dragged events no longer disappear: all-day events moved in the month view keep their start, and occurrences of recurring events with a UTC start, as in Google Calendar exports, no longer shift by the time-zone offset (#1119)
- Calendar: A failed calendar fetch no longer hides every calendar or leaves only the birthday calendar selected
- Calendar: The all-day area of the week view is sized from the visible week, stacks each day's tasks under its all-day events, and collapses to three rows with a toggle (#1122, thanks @sanitz)
- Calendar: The Save button shows while an event is saving, and a save refused for its length says so (#921, thanks @texchi2)
- Calendar: Invitations no longer carry blank participant names or an empty description (#748, thanks @lucletoffe)
- Files: Files shared with you open and save in the office editor (#1094)
- Files: Office editing works behind a reverse proxy at a sub-path (
NEXT_PUBLIC_BASE_PATH) (#1101, thanks @dealerweb) - Accounts: Adding a sixth account through server-side SSO no longer overwrites the first account's sign-in
- Mobile app: The app's "Sign in via webmail" keeps working past the first token expiry when the webmail uses a confidential OAuth client or an identity provider on another host
- Admin: Admin sign-in works over plain HTTP. The admin cookie's Secure flag follows the request, or
COOKIE_SECUREwhen it is set (#1063, thanks @lucamzanon) - Admin: The OAuth scope fields show the actual default scopes, which do not include
offline_access(#1126) - Lite: SSO sessions survive a page reload with identity providers such as Rauthy that refuse an early token refresh (#552)
- UI: The app retries loading its configuration after a timeout or a failed request instead of staying broken (#1112, thanks @theLucius7)
- Docker: The image builds from a remote Git context (#1118)
Nevada Rework Project: Biggest Cities
Whether you're hauling cargo beneath the glow of city lights, crossing long stretches of desert highway, or watching the horizon for anything unusual in the Nevada skies, the Silver State always has another road, town, or surprise waiting ahead.
Today, we're taking a closer look at some of the cities featured in the upcoming Nevada Rework for American Truck Simulator and how our team has rebuilt them from the ground up, bringing more detail, improved & updated road networks, and plenty of new places to discover along the way. Let's check it out!
Reno
First stop, Reno! Known as "The Biggest Little City in the World", Reno is one of northern Nevada's most important urban centres. Located close to the Sierra Nevada mountains and not far from Lake Tahoe, the city has long been an important hub for travel, industry, entertainment, and commerce in the region.
Often described as a "mini Vegas", Reno attracts millions of visitors each year to its resorts, vibrant local culture, and entertainment scene, which keeps the city busy around the clock! You'll be sure to find no shortage of jobs taking you in and out of the city, with its surrounding highway network connecting drivers with destinations across Nevada and neighbouring California.
In the Nevada Rework, Reno has been completely rebuilt from scratch, recreating the city with greater detail, updated scenery, and an improved road network. Our team has worked to better capture the character and scale of Reno, while retaining important and familiar elements from the original version and adding plenty of new details for players to discover.
Carson City
Just south of Reno lies Carson City, the capital of Nevada. Sitting at the foot of the Sierra Nevada mountains, the city offers a very different atmosphere from its larger neighbour, with historic streets, government buildings, and plenty of scenic surroundings.
As the centre of Nevada's state government, Carson City is home to several important landmarks, including the Nevada State Capitol, while its location also places it close to routes leading towards Lake Tahoe and other parts of western Nevada. Whether you're passing through or making a delivery in the city, there will be plenty to take in along the way.
Our map designers have rebuilt Carson City from the ground up, bringing greater detail to its streets, scenery, and surrounding areas, while giving some of its key landmarks and locations a fresh new look. Familiar elements from the original map have also been rebuilt where possible, bringing them up to the quality and level of detail found in our latest map and asset work.
Elko
Heading east across northern Nevada brings you to Elko, an important regional centre surrounded by wide open landscapes and mountain scenery. The city has strong connections with the mining & farming industries which have played a major role in shaping both Elko and northeastern Nevada as a whole.
Elko also sits along one of northern Nevada's most important transport corridors, making it a natural stopping point for travellers and freight moving across the state. Beyond its industrial connections, the area is also well known for its farming heritage and the vast landscapes which surround the city.
Our team has worked to give the area more of its own identity, while also improving the locations where drivers will pick up and deliver cargo, including new custom depots designed specifically for the area.
Winnemucca
Located along the Humboldt River, Winnemucca has long served as an important stopping point for travellers crossing northern Nevada. Its position along a major east-west transport corridor has helped make it an important regional centre for transport and cargo.
The city also has strong ties to several of the large industries found throughout this part of Nevada. Surrounded by broad valleys, distant mountain ranges, and open desert landscapes, Winnemucca offers the kind of scenery many drivers associate with journeys across the Silver State. Players can expect an updated city layout that better reflects the character of the real-world location.Β
Ely
In eastern Nevada you'll find Ely, a remote city surrounded by rugged mountains and expansive desert landscapes. Located along U.S. Route 50, famously known as the "Loneliest Road in America", Ely offers a noticeably different setting from many other cities in the state.
For the Nevada Rework, our team has aimed to preserve Ely's distinctive atmosphere and important locations, while bringing its roads, scenery, and surroundings up to the quality of our latest map work.
Across all of these locations, we've also added a variety of new custom depots, refreshed some company branding, and introduced many smaller details to make each city feel more unique.Β And of course, there is one major Nevada city missing from today's blog! Las Vegas will receive its own dedicated spotlight in the future, so stay tuned for that.
We hope you've enjoyed this latest look at the Nevada Rework. Be sure to follow our social media channels for more news and previews from American Truck Simulator!
Distribution Release: Kodachi OS 10.0.3
v1.23.1-pre
This week's release includes BYOK support for GPT-6.1 Sol and the ability to preview JSONL and NDJSON files as tables.
Features
AI
- Added BYOK support for GPT-6.1 Sol with an OpenAI API key. (#64968; thanks ktKongTong)
- Added the
agent.max_idle_retained_threadssetting to control how many idle agent threads remain loaded. (#64547; thanks hazicy) - Improved Google AI error messages and added automatic retries when a model was overloaded. (#64865)
- Improved OpenCode model resolution performance and hid deprecated models. (#64666)
- Improved plan updates from ACP agents, including panel refreshes after status changes. (#64884)
- Improved the Agent Panel error shown when a Zed sign-in expired. (#64754)
- Improved visibility of keyboard-selected agent conversations in the Threads Sidebar. (#63922; thanks jaklyk2103)
Git
Languages
- Added JSONL and NDJSON support to the tabular data preview. Open previews alongside the source with
cmd-k v(macOS) orctrl-k v(Linux/Windows). (#64471; thanks unshDee) - Added extension installation suggestions for many more languages when opening unsupported files. (#63211; thanks haolamnm)
- Added support for rewrapping text in Typst files. (#64858; thanks AdinAck)
Remote Development
Other
- Added
alt-/to show the bindings that can complete a pending multi-keystroke shortcut. (#64803) - Added a
soft_wrap_indentsetting ("none","same","extra_one","extra_two") to configure indentation for soft-wrapped continuation lines. (#63468; thanks arusahni) - Improved responsiveness when watching paths on slow or unresponsive filesystems. (#63410; thanks RemcoSmitsDev)
- Improved
editor: select nextandeditor: select previousto respect the buffer search whole-word option. (#64137; thanks yawnnn)
Bug Fixes
- Debugger: Fixed "Rerun last debug scenario" not running the last scheduled scenario. (#64856; thanks MeiramSh)
- Fixed a crash on Windows when reading a stored credential that has no username. (#64735)
- Fixed a crash when pasting multiple selections at the end of a file in Vim mode. (#64876)
- Fixed a crash when typing the start of a multi-key binding at the end of a read-only file. (#64730)
- Fixed agent notifications showing a thread's original title after the thread was renamed. (#64907; thanks IFafaa)
- Fixed commit details and diffs waiting behind an in-progress fetch, pull, or push before opening. (#64720; thanks azeemshaik025)
- Fixed external-agent sessions remaining loaded after their conversation was closed during loading. (#64717)
- Fixed images in Markdown table cells ignoring column alignment and vertical centering. (#64914; thanks dremnik)
- Fixed issues where OpenAI model tool calls to MCP servers treated optional fields as required, causing errors. (#64920)
- Fixed missing or outdated output in agent tool results. (#64708)
- Fixed search highlights in Markdown Preview that hid matched text when the theme used opaque highlight colors. (#64788; thanks IFafaa)
- Fixed stale agent responses that could clear a newer prompt or show errors from an earlier send. (#64917)
- Fixed syntax highlighting for fenced code blocks with extra text after the language name. (#64694; thanks maxmalkin)
- Fixed the pending keybindings list showing
task: spawninstead of the task name for bindings that spawn a task. (#64937; thanks frinyvonnick) - Fixed the Zed Cloud connection failing with
UnknownIssuerbehind corporate TLS-inspecting proxies whose root CA is installed in the system trust store. (#63686; thanks joepjoosten) - ACP: Fixed partial tool-call display updates when content referenced an unavailable terminal. (#64784)
- Fixed a bug where inlay hints positioned past the end of a buffer could appear on its last line, and inlay hints exactly at the end of a file without a trailing newline could be hidden. (#64659; thanks HuaGu-Dragon)
- Fixed a rare crash when hovering wrapped Markdown text on Linux. (#64672)
- Fixed breadcrumb highlighting outside excerpts. (#64738)
- Fixed centered layout not applying when a pane was zoomed in. (#64064; thanks UdeshyaDhungana)
- Fixed closing one LSP Logs view stopping streams used by another view or downstream client. (#61222; thanks aviatesk)
- Fixed completion details lacking visual distinction from completion labels. (#64684; thanks GautamBytes)
- Fixed delayed selection of the first entry when opening a context menu. (#64365)
- Fixed entries folding when clicked in the Outline Panel. (#64736)
- Fixed Helix buffer picker opening in the wrong pane on
space b. (#64494; thanks GautamBytes) - Fixed hover flicker after dismissing native menus on macOS. (#64175; thanks yay)
- Fixed incorrect selected and hover colors for threads in the Threads Sidebar. (#62597; thanks Robot-Inventor)
- Fixed indentation corruption during multicursor editing and block indentation. (#64675; thanks GautamBytes)
- Fixed language server formatting scrolling to the bottom when the server replaces the entire buffer. (#57269; thanks kalilamodow)
- Fixed Project Panel requiring two
leftpresses to collapse opened filesβ parent. (#64733) - Fixed row separator lines in tabular data previews extending past the last column. (#63367; thanks HalavicH)
- Fixed soft-wrap continuation line indentation calculation for unindented lines starting at column 0. (#63468; thanks arusahni)
- Fixed syntax highlighting for Markdown emphasis, links, and code blocks when viewing a file at a historical commit. (#64683; thanks Sudarsh1010)
- Fixed terminal tool call output covering the rounded corners of its card in the Agent Panel. (#64328; thanks chrisdrackett)
- Fixed window controls shifting by one pixel when the Threads Sidebar was open on Linux. (#64381; thanks Piyushrathoree)
- Fixed wrap guides showing in the Agent Panel before a conversation started. (#64886; thanks virajbhartiya)
Breaking Changes and Notices
- Changed title-bar application menus on Linux and Windows to require a click before opening. Enable
title_bar.open_menus_on_hoverto restore opening on hover. (#48496; thanks pauldipietro)
2026-09-30
[BlueskyBridge] fix a TypeError on null for starter pack author havinβ¦
v1.22.0
This week's release includes BYOK support for GPT-6.1 Sol, on-the-fly model selection for new subagents, automatic subagent compaction, a unified/split toggle for diffs opened from the command line, and dynamically fetched OpenCode models.
Features
AI
- Added an optional
modelparameter tospawn_agentto choose a model for that spawn instead of using the configured subagent model or inheriting the parent model, with the active model shown in its card. (#64498; thanks itsfuad) - Added BYOK support for GPT-6.1 Sol with an OpenAI API key. (#64968; thanks ktKongTong)
- Added Grok 4.7 to the SuperGrok and xAI providers and made it their recommended default. (#64567; thanks raphaelluethy)
- Added the
agent.threads_sidebar.auto_opensetting to control whether opening a folder in an existing window also opens the Threads Sidebar. (#64259, #64395; thanks jackhwalters and joshkent94) - Added support for
"..."inedit_predictions.disabled_globsandedit_predictions_disabled_inso settings can extend inherited edit prediction exclusions and scopes. (#64540, #64546; thanks porada) - Enabled compaction for subagents. (#64135)
- Improved OpenCode model availability by fetching the Zen and Go model list dynamically instead of relying on one bundled with Zed. (#64585)
- Improved performance when resolving OpenCode models. (#64666)
- Improved Threads Sidebar sizing so changes to
agent.threads_sidebar.default_widthtake effect even after manually resizing the sidebar. (#64395; thanks joshkent94) - Hid deprecated OpenCode models. (#64666)
Git
- Added a unified/split toggle to the diff view opened with
zed --diff <old> <new>. (#64529; thanks rn23thakur) - Improved how quickly branch diffs show their first changes when a branch has drifted far from its base. (#62536; thanks azeemshaik025)
Terminal
- Added support for
"..."interminal.path_hyperlink_regexesto extend inherited regexes without repeating them. (#64552; thanks porada)
macOS
- Added macOS three-finger Look Up and translation gestures for text in focused Markdown previews. (#59297; thanks cppcoffee)
Windows
- Added
MicaBackdropandMicaAltBackdropoptions for thebackground.appearancetheme setting. (#48340; thanks Marocco2)
Other
- Added support for
"..."infile_scan_inclusionsandhidden_filesso project settings can extend inherited inclusion and hidden-file patterns. (#64440, #64484; thanks porada) - Added confirmation in the title bar when a manual update check found Zed was already up to date. (#64106; thanks tahayvr)
- Improved the pending keystrokes indicator with grouped bindings, a scrollable list, and support for chords without a timeout, such as shortcuts starting with
cmd-k. (#64362, #64522)
Bug Fixes
- Fixed invalid file patterns discarding valid exclusion, hidden-file, read-only, and private-file rules or causing inclusion and file-type settings to panic. (#64525; thanks porada)
- Fixed
cmd-w(macOS) andctrl-w(Linux/Windows) closing the active dock instead of the active pane item. (#64515) - Fixed ligatures being disabled on Windows unless
buffer_font_featureswas set. (#62338; thanks interkelstar) - Fixed LSP completions without edit ranges ignoring the configured
completions.lsp_insert_mode. (#64139) - Fixed the Settings window opening with its header off-screen at high DPI scaling on Windows. (#62073; thanks habisahmad)
- Fixed importing VS Code
files.excludeintofile_scan_exclusions. (#64492; thanks porada) - Fixed βAdd to .git/info/excludeβ failing in secondary Git worktrees. (#63967; thanks mateioprea)
- Fixed terminals retaining about 2 MB of memory per command after the command finished. (#64405; thanks EcutAtom336)
- Fixed external-agent terminals completing prematurely or reporting the wrong exit status. (#64544)
- Fixed a memory leak when closing macOS windows with experimental accessibility enabled. (#64143; thanks feigeCode)
- Fixed the terminal grid losing its top alignment when growing on Windows. (#63699; thanks 39ali)
- Fixed a crash on Linux (X11) when a window was redrawn immediately after GPU device recovery. (#64570)
- Fixed language servers not starting for files opened via UNC paths on Windows. (#56553; thanks Joblen)
- Fixed PowerShell installed by Scoop not being detected when Scoop uses a custom installation directory. (#62473; thanks jliu666)
- Fixed task worktree variables resolving to the wrong project when the global
tasks.jsonfile was focused, and paths containing spaces breaking Windows tasks. (#55727; thanks di404) - Fixed adding the current line to an Agent thread when no text was selected using
cmd->(macOS),ctrl->(Linux), orctrl-shift-.(Windows). (#64589) - Fixed a bug where the block cursor hid the character underneath until its animation completed. (#64521; thanks linyisu)
- Fixed columnar selections landing in the wrong column around non-ASCII text, tabs, soft wraps, and collapsed content. (#63723; thanks itsfuad)
- Fixed the cursor drifting from the center of the editor when using a high
vertical_scroll_marginfor typewriter-style scrolling. (#63944; thanks rn23thakur) - Fixed cursor animations when moving between characters of different widths and during keyboard-triggered autoscrolling. (#64184; thanks tiny-paris)
- Fixed excerpt expansion when the selection was on deleted text in unified diffs. (#63946; thanks IbrahimKhan12)
- Fixed a bug where βConfigure Excluded Filesβ selected the wrong list when a commented-out
disabled_globssetting appeared before it. (#64540; thanks porada) - Fixed diagnostic navigation not linking nearby related diagnostics back to the primary diagnostic. (#64134; thanks GautamBytes)
- Fixed missing editor underlines for language server diagnostics at positions without underlying text. (#63933; thanks itsfuad)
- Fixed a bug where the Agent Panel created two terminals when starting a new terminal thread in a project with no existing terminals. (#62151; thanks restlessronin)
- Fixed keyboard navigation and submission in ACP elicitation forms. (#64193)
- Fixed errors when ACP agents returned
nullfor empty response payloads. (#64457) - Fixed Markdown preview tabs not showing the source file path on hover. (#64318; thanks GautamBytes)
- Fixed Project Panel requiring two
leftpresses to collapse opened filesβ parent. (#64733) - Fixed breadcrumb highlighting outside excerpts. (#64738)
- Fixed missing visual feedback when copying REPL output. (#64276; thanks Yao0454)
- Fixed recording and searching for standalone modifier-key bindings in the Keymap Editor. (#64537)
- Fixed remote external-agent exit errors appearing before the agent's final response updates were applied. (#64603)
- Fixed the selection highlight flickering in the Threads Sidebar when clicking terminal threads. (#64387)
- Fixed snippets from different extensions canceling each other out for the same language. (#58659; thanks LBF38)
- Fixed syntax highlighting for Markdown emphasis, links, and code blocks when viewing a file at a historical commit. (#64683; thanks Sudarsh1010)
- Fixed Command-clicking a symbol opening a definitions multibuffer instead of the picker when
lsp_results_locationwas set to"picker". (#64039; thanks v-shevtsov)
Breaking Changes and Notices
- Removed Stop controls from external-agent-managed terminals, which are controlled by the agent rather than a local process. (#64544)
- Changed Threads Sidebar settings to
agent.threads_sidebar.position,agent.threads_sidebar.default_width, andagent.threads_sidebar.auto_open, grouped together in the Settings Editor. Existing settings are migrated automatically. (#64395; thanks joshkent94) - Changed the shortcut for closing the active dock from
cmd-w(macOS) orctrl-w(Linux/Windows) toctrl-alt-won all platforms. (#64515) - Changed
terminal.path_hyperlink_regexesso a top-level"..."entry now inserts inherited regexes. To retain the previous three-character regex, replace that entry with["..."]. (#64552; thanks porada) - Stopped importing VS Codeβs
files.watcherIncludeasfile_scan_inclusions; watch roots are not Git-ignore overrides. (#64440; thanks porada)