❌

Normale weergave

OBS Studio 33.0.0 Release Candidate 1

9 Oktober 2026 om 04:15

Release Candidate 1 Changes

  • Fixed audio monitoring on browser sources briefly being enabled every time in Beta 1-6 [prgmitchell] (#14003)
  • Fixed browser sources appearing blank on refresh in Beta 1-6 [WizardCM] (#14003)
  • Fixed local network requests failing in browser sources in Beta 1-6 [WizardCM] (#14009)
  • Fixed Plugin Manager showing third-party plugins as missing when OBS is launched in Safe Mode in Beta 1-6 [Warchamp7] (#14001)
  • Fixed Plugin Manager removal button sometimes not removing missing plugins from the Plugin Manager in Beta 1-6 [Warchamp7] (#14008)
  • Fixed the Missing Encoders popup not showing in taskbar [Warchamp7] (#14010)
  • Fixed profile import failing on paths with a trailing slash [Ushkalovk] (#13863)
  • Developer Info: Added obs_canvas_video_active() to check if the video of a canvas is active [exeldro] (#13110)
  • Developer Info: Changed obs_canvas_reset_video() to allow resetting a canvas's video when any other canvas's video is active, but not its own video [exeldro] (#13110)

Beta 6 Changes

  • Fixed a crash during certain actions involving groups in Beta 1-5 [prgmitchell] (#13978)
  • Fixed scripting not working on macOS in Beta 1-5 [PatTheMav] (#13976)
  • Fixed game capture hooks not updating in Beta 1-5 [Warchamp7] (#13968)
  • Fixed clock Lua script not working in Beta 1-5 [RytoEX] (#13974)
  • Changed Safe Mode to not start WebSocket Server [FiniteSingularity/RytoEX] (#13984)
  • Removed support for FFmpeg 6.x and 7.x [RytoEX] (#13964)
  • Removed support for Qt 6.4-6.9 [RytoEX] (#13969)

Beta 5 Changes

  • Fixed duplicate "Save Replay" hotkey entries when switching profiles in Beta 1-4 [xtfo] (#13943)
  • Fixed warning dialogs on macOS not rendering rich text in Beta 1-4 [Warchamp7] (#13949)
  • Fixed source icon state appearing inverted in Beta 1-4 [Warchamp7] (#13953)
  • Fixed audio monitoring settings not saving in Beta 1-4 [Warchamp7] (#13951)
  • Fixed missing encoder check showing missing encoders in an output mode that is not currently selected in Beta 1-4 [Warchamp7] (#13950)
  • Fixed Windows updater not updating game capture and virtual camera in some cases in Beta 1-4 [Warchamp7] (#13939)

Beta 4 Changes

  • Fixed a CI and packaging issue. There are no application changes since Beta 1.

Beta 3 Changes

  • Fixed a CI issue. There are no application changes since Beta 1.

Beta 2 Changes

  • Fixed a versioning issue. There are no application changes since Beta 1.

33.0 New Features

  • Updated CEF from 127/6533 to 150/7871 [WizardCM] (#13900)
    • This is a massive update to the underlying framework used for browser sources and docks from the July 2024 release to September 2026
    • All of this work is on the backend and should be invisible to users. Please be sure to report any new weirdness or problems you run into with browser sources!
  • Complete overhaul to plugin loading [FiniteSingularity/PatTheMav] (#13594)
    • First-party plugins are now in a new folder named core
    • Third-party plugins have an updated installation location and folder structure
    • Existing third-party plugins will continue to load from the legacy locations until OBS Studio 34.0
    • More information is available in our knowledge base article
  • Improved how source snapping works in the preview [Warchamp7] (#12298)
    • New visual indicator added
    • Sources now snap along the entire axis instead of only when directly touching
    • Sources no longer snap to hidden sources
  • Improved behavior of spinboxes for number values [Warchamp7] (#12337)
    • Typing is no longer mysteriously blocked in some situations
    • Numbers are no longer cut off in some situations
    • Values now update only after pressing Enter and Enter does not close the window
    • Holding Shift + Up/Down now advances multiple steps at a time
    • Dragging the cursor inside the input but outside the text itself now works properly
  • Enabled NVENC on Arm64 [RytoEX] (#13827)

33.0 Changes

  • Added a check for encoders being missing when loading a profile [derrod] (#11340)
  • Added support for newest NVIDIA Broadcast SDKs for NVIDIA Audio Effects and Video Effects [pkviet] (#13838)
  • Added hotkeys for controlling audio monitoring of a source [Warchamp7] (#13599)
  • Fixed issues with groups in Studio Mode [Warchamp7] (#11092)
    • Fixed moving sources inside a group causing them to glitch out in Program
    • Fixed moving sources inside a group showing up live in Program
  • Adjusted naming of Window Capture methods on Windows [Penwy] (#12047)
  • Improved detection of fullscreen games for Game Capture [Kira-NT] (#10880)
  • Improved transparency handling for macOS Screen Capture [jcm93] (#13030)
  • Scaled simple output recording audio bitrate by channel count [nickvonkaenel] (#13311)
  • Removed support for Ubuntu 24.04

33.0 Bug Fixes

  • Added a startup error if obs-transitions failed to load [notr1ch] (#13321)
  • Improved file splitting for Hybrid MP4/MOV [derrod] (#13386)
  • Fixed outputs getting stuck running when a bad rescale output resolution is set [suogesi] (#13375)
  • Fixed monitoring icon state getting desynced when using third-party tools or websockets [prgmitchell] (#13822)
  • Fixed potential crash when shader cache file is invalid [notr1ch] (#13538)
  • Fixed a potential crash on Linux when USB mic is removed [R0te/RytoEX] (#13922)
  • Fixed a potential crash when renaming a source with the Add Source window open [Warchamp7] (#13800)
  • Fixed a potential deadlock during video/audio tasks [exeldro] (#13579)
  • Fixed an issue with B-frame offset calculation in AMF that could cause streams to disconnect [lexano-ivs] (#13762)
  • Fixed PipeWire screencast sources being duplicated in studio mode [tytan652] (#13673)
  • Fixed a potential crash when switching off a newly created profile [Warchamp7] (#13182)
  • Fixed a source toolbar crash when source type is missing [Penwy] (#13539)

33.0 Developer Information

  • Added frontend event and output signal for replay buffer saving [Penwy] (#8955)
  • Added guidance regarding the theme system to the top of all theme files [Warchamp7] (#13733)
  • Added ability to set a file extension filter for OBS_PATH_FILE_SAVE path types [FiniteSingularity] (#10190)
  • Added obs_frontend_is_safe_mode for first-party plugins
    • Third-party plugins are not loaded at all in Safe Mode
  • Added versions to Flatpak plugin extension point [tytan652] (#13735)
  • Added obs_canvas_video_active() to check if the video of a canvas is active [exeldro] (#13110)
  • The minimum supported versions of Visual Studio, Windows SDK, and clang-format have been increased. Previous versions may continue to work, but will no longer be tested/supported. It is recommended that build environments are kept up-to-date with the project's toolchain.
    • Changed Windows builds to use Visual Studio 2026 and SDK 26100 [RytoEX] (#13543)
    • Changed clang-format version used to 22.1.3 [PatTheMav] (#13549)
  • Changed obs_canvas_reset_video() to allow resetting a canvas's video when any other canvas's video is active, but not its own video [exeldro] (#13110)
  • 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)
  • Removed support for FFmpeg 6.x and 7.x [RytoEX] (#13964)
  • Removed support for Qt 6.4-6.9 [RytoEX] (#13969)
  • 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-rc1-Sources.tar.gz: 1a73e95b5ad8addd79aeb5b48e5292b982dd2ffa69744294930a7c474c958fe0
OBS-Studio-33.0.0-rc1-Ubuntu-26.04-x86_64-dbsym.ddeb: d85dc2bdd26a21f29ea0a3dee8a6a31ae0a2a142df48fc56d41df9fb3571711e
OBS-Studio-33.0.0-rc1-Ubuntu-26.04-x86_64.deb: 7f2264131413b8b0d49b74c5693c044c4884f5ca923f08cb07c3ffd2b7369024
OBS-Studio-33.0.0-rc1-Windows-arm64-PDBs.zip: b855ec251576313f6de129213f0b57ece8d3b5970b6fb402f528b5791feeea0b
OBS-Studio-33.0.0-rc1-Windows-arm64.zip: 7205f9c3acb048c167c7fc38b2c3efd11d534f0f42242caa496a036785471a3c
OBS-Studio-33.0.0-rc1-Windows-x64-Installer.exe: 89cda9af39aaa0c6bbdae4d5db3bbfed127c82a6ef57b79acc6a745a872fa85c
OBS-Studio-33.0.0-rc1-Windows-x64-PDBs.zip: e7be732e7d61a59418cfdbdbe4790424ed8d3441676bd03c70710f4baef4f386
OBS-Studio-33.0.0-rc1-Windows-x64.zip: 2934bda03b5288378ca32a51dfe1003d4a557531a6af2ba105d7671d7557ad1f
OBS-Studio-33.0.0-rc1-macOS-Apple-dSYMs.tar.xz: 30e35c09bbbe7bed0d203cdd7439b1a239d9c4f9ef5c32570c5e1a0596ad5e67
OBS-Studio-33.0.0-rc1-macOS-Apple.dmg: 9322e6266140c0b82378848ded76d22cb721de550282c525d57b05590c94bbf6
OBS-Studio-33.0.0-rc1-macOS-Intel-dSYMs.tar.xz: dbe0dc36f8f064ccda4ec835ffcb279349efa88583b315336b576fa8e41b8737
OBS-Studio-33.0.0-rc1-macOS-Intel.dmg: fd0fd30ad54c4c18a4849fdfe2a3c8c7bd5e8f49325cb2861fc10b65c7aef683

  •  

Euro Truck Simulator 2 - 1.62 Update: New Garages

Door: Petr
8 Oktober 2026 om 17:00

Today, we bring you news from the upcoming 1.62 update for Euro Truck Simulator 2. As part of this update, we will be introducing new truck garage models across the map!

We already gave the truck garages in American Truck Simulator a refresh with the 1.58 update, and now it is time to give them the same treatment in Euro Truck Simulator 2. As you know, we are gradually reworking older areas of the base map, with the Benelux rework being the latest addition, while the rework for United Kingdom is currently underway. Garages are an important part of the map as well, so after many years, we felt it was time to bring them up to date and better align them with the newer areas of the game.

With the release of 1.62, these new garage models will be introduced across the entire base map as well as all of the map DLCs. This means that wherever your journeys take you, you can look forward to seeing these refreshed garages along the way.

Garages are also an important part of the truck driving experience. They are not only where you store your trucks and manage your drivers, but also a reflection of your growing company. From the smaller garages to the larger ones, we wanted to make them feel like places you would be happy to return to as your business grows.

The new garages feature updated visuals both inside and out, with greater attention to detail throughout. Our goal was to make them feel more modern and immersive, which should make the process of upgrading your garage feel more rewarding.

Of course, we also had to keep performance in mind. Bringing these new garages to the game while keeping their performance cost in check compared to the older models created many years ago was no small task, but we hope to have found the right balance between improving visuals and not increasing the toll on performance.

With these changes, we hope the reworked garages will feel like a more natural and enjoyable part of your journeys. They are another step in bringing older parts of the game up to today's standards, and we look forward to continuing to refine the world of Euro Truck Simulator 2 in future updates.

Remember to give our X/Twitter, Instagram, Facebook, Bluesky, and TikTok a follow so you won't miss out on any updates from Euro Truck Simulator 2. Or subscribe to our newsletter to stay informed. Until next time, we wish you safe travels!

  •  

v0.21.1

8 Oktober 2026 om 18:18

⚠️ Note for macOS users

Builds are unsigned (no Apple Developer ID). After dragging MarkText into Applications, clear the quarantine flag once:

xattr -d com.apple.quarantine /Applications/MarkText.app

Verifying downloads

All artifacts are listed with their SHA-256 in SHA256SUMS.txt. Verify with:

sha256sum -c SHA256SUMS.txt --ignore-missing

Full Changelog: v0.21.0...v0.21.1

  •  

v0.21.0

8 Oktober 2026 om 18:18

🛑 macOS Apple Silicon (arm64): this build is broken — use v0.21.1

The macOS arm64 assets below crash immediately on launch with EXC_BAD_ACCESS (Code Signature Invalid). A newly added Electron fuse rewrote the Electron Framework binary, which invalidated its ad-hoc signature, and the build was not re-signed afterwards.

Two ways to get a working app:

  1. Download v0.21.1 (recommended) — it ships the fix.
  2. Repair this build in place — after installing, run:
    sudo codesign --force --deep --sign - /Applications/MarkText.app
    

xattr -cr does not fix this crash. The macOS Intel (x64) and the Windows/Linux builds are unaffected.

⚠️ Note for macOS users

Builds are unsigned (no Apple Developer ID). After dragging MarkText into Applications, clear the quarantine flag once:

xattr -d com.apple.quarantine /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

  • Release tracking: v0.20.0 by @Jocs in #4664
  • docs: fix broken relative links in translated READMEs by @xThreeh in #5616
  • feat(desktop): move sidebar selection to trash with Delete key by @Jocs in #5609
  • Update Japanese localization strings for consistency by @coolvitto in #5630
  • fix(desktop): remove applied custom CSS when the preference is cleared by @woahwhattheheck in #5633
  • fix(muya): restore inline HTML tag marker style and hide bare
    markers by @Jocs in #5636
  • feat(desktop): rename sidebar selection with F2 / Enter (#1618) by @Jocs in #5638
  • feat(muya): preserve caret column on cross-block arrow navigation (#3412) by @Jocs in #5644
  • fix: #3203 make the trailing soft-break line navigable with the arrow keys by @Jocs in #5645
  • fix: #3207 #3385 commit sidebar rename/create when clicking away by @Jocs in #5646
  • feat: support ==highlight== markdown syntax (#2552) by @Jocs in #5647
  • feat: render inline markdown in the TOC (#3110) by @Jocs in #5648
  • feat: support GitLab inline diff and multiline blockquote (#954) by @Jocs in #5649
  • fix(desktop): let the --debug flag reach MarkText in packaged builds by @xThreeh in #5643
  • fix(muya): highlight regexp newline search matches (#3261) by @Jocs in #5650
  • fix(muya): keep the search highlight across a full re-render (#5651) by @Jocs in #5652
  • fix(desktop): persist sidebar folder collapse state across view switches (#5631) by @VictorVow in #5632
  • feat(desktop): reveal the active file in the sidebar file tree (#528) by @Jocs in #5654
  • fix(desktop): keep Latin-1 and Shift-JIS files byte-exact on save (#5577) by @ycyc0421 in #5567
  • chore(ci): remove Claude Code workflow by @Jocs in #5655
  • docs: remove StarDesk sponsor from README and website by @Jocs in #5656
  • Follow-up to #5379: move Pandoc conversion out of Export, gate it behind a preference, and report which binary was found by @dimbc in #5513
  • fix: #5239 let Ctrl+Backspace delete a word at the end of a line by @johannesroth-coreproduction in #5657
  • fix(muya): correct the caret after a native word/line delete, and defer in code blocks (#5239) by @Jocs in #5658
  • feat(muya): text & background colour in the inline format toolbar by @Jocs in #5661

New Contributors

Full Changelog: v0.20.0...v0.21.0

  •  

v4.4.3

8 Oktober 2026 om 16:01

Fixes

  • Fixed static-site pull request previews that failed with a missing Dockerfile error. (#8238)
  • Fixed the empty terminal container picker for resources with multiple containers. (#12110)
  • Fixed nested Base64 custom labels in API updates and deployments. (PR #11473, #11435)
  • Prevented DNS polling from filling the queue with duplicate file-sync jobs and delaying DNS checks and deployments. (#12098)
  • Fixed the runtime log viewer failing to load with invalid saved filters. (#12101)
  • Fixed missing Caddy traffic analytics after enabling analytics and redeploying applications with managed labels. (#12117)
  • Preserved previously recorded commit messages when redeployments skipped cloning the repository. (#12116)
  • Fixed card title alignment when descriptions were empty. (#12102)

Improvements

  • Removed the truncated page-search hint from the navigation search button.
  • Made dropdown controls more compact.
  • Updated default example repository URLs in development mode to use the main branch.
  • Added AMD64 and ARM64 development images from release branches, with versioned and commit-specific tags.

What's Changed

Full Changelog: v4.4.2...v4.4.3

  •  

2.8.3

Door: clsid2
18 Oktober 2026 om 16:29

Changes from 2.8.2 to 2.8.3:

Updates:

  • Updated MPC Video Renderer to version 0.10.8.2600
  • Updated MediaInfo DLL to version 26.10

Changes/additions:

  • Added a new modern theme variant for options dialogs and menus that is based on Windows 11 UI design. The existing one was based on Windows 10. You can choose preferred theme here (regardless of which Windows version you use): Options > Advanced > ModernThemeStyle. The main interface is same for both modern variants.
  • Added advanced option to use native Windows 11 menus (with rounded corners).
  • EVR-CP/Sync now support HLG tonemapping.
  • Improved CUE file parsing.
  • Some internal improvements to further enhance stability.

Fixes:

  • Lots of small fixes and improvements.

  •  

Asterisk Release 24.0.0-rc2

8 Oktober 2026 om 14:20

The Asterisk Development Team would like to announce
release candidate 2 of asterisk-24.0.0.

The release artifacts are available for immediate download at
https://github.com/asterisk/asterisk/releases/tag/24.0.0-rc2
and
https://downloads.asterisk.org/pub/telephony/asterisk

Repository: https://github.com/asterisk/asterisk
Tag: 24.0.0-rc2

This release resolves issues reported by the community
and would have not been possible without your participation.

Thank You!

Change Log for Release asterisk-24.0.0-rc2

Links:

Summary:

  • Commits: 3
  • Commit Authors: 2
  • Issues Resolved: 3
  • Security Advisories Resolved: 0

User Notes:

Upgrade Notes:

Developer Notes:

  • Audiohooks: Fix whisper framehook timer leak and masquerade handling

    ast_channel_fd_add() now returns -1 if it fails to allocate
    space for the descriptor.

Commit Authors:

  • Joshua C. Colp: (2)
  • Mike Bradeen: (1)

Issue and Commit Detail:

Closed Issues:

  • #2134: [bug]: Bridging channels which have been spied on with ChanSpy fails
  • #2179: [bug]: No initial NOTIFY for dialog subscriptions when hint references CustomPresence without AstDB entry (regression in 22.11.0)
  • #2186: [bug]: dialog-info NOTIFY for ringing extension no longer contains identity (caller ID) since 22.11.0

Commits By Author:

  • Joshua C. Colp (2):

    • extstate/pjsip: Handle lack of or late loading of presence state.
    • extstate: Include causing device channel details in legacy callbacks.
  • Mike Bradeen (1):

    • Audiohooks: Fix whisper framehook timer leak and masquerade handling

Commit List:

  • Audiohooks: Fix whisper framehook timer leak and masquerade handling
  • extstate/pjsip: Handle lack of or late loading of presence state.
  • extstate: Include causing device channel details in legacy callbacks.

Commit Details:

Audiohooks: Fix whisper framehook timer leak and masquerade handling
Author: Mike Bradeen
Date: 2026-09-25

Resolves several issues with the framehook added to allow whispering without
an underlying stream.

The timer is now owned by the audiohook list rather than the framehook. It is
retired on both channels during a masquerade and recreated when the audiohook(s)
are moved.

If the timer cannot be started, whisper audio is still mixed into the outbound
media as it was previously (requiring an underlying stream.)

An audiohook that cannot be moved to the new channel is now left DONE so that
its owner does not wait on it forever.

Resolves: #2134

DeveloperNote: ast_channel_fd_add() now returns -1 if it fails to allocate
space for the descriptor.

extstate/pjsip: Handle lack of or late loading of presence state.
Author: Joshua C. Colp
Date: 2026-09-25

The extension state implementation is stateful resulting in state
not being updated if a presence state provider does not publish an
update after loading. To handle providers which don't do this we
query for updated state if we are asked for it and the existing
state is invalid. This ensures that if the presence state provider
is loaded later we will get the updated state when asked.

The func_presencestate module is written to publish the persisted
custom presence states at load time. This failed for entries with
a not_set state as this resulted in querying the presence provider
that was not yet registered. The provider is now registered before
this ensuring the update can be published.

This change also fixes an issue in PJSIP where a SUBSCRIBE for a
hint that had an invalid presence state configuration would not
send an initial NOTIFY. We now treat an invalid presence state as
not set instead.

Fixes: #2179

extstate: Include causing device channel details in legacy callbacks.
Author: Joshua C. Colp
Date: 2026-09-29

When a legacy extension state callback registers it can optionally
do so in a way that it will receive the channel(s) that have caused
a device to ring. This is used in PJSIP for the dialog-info+xml
support so that phones can display who is calling the monitored
extension.

An issue was introduced in the extension state rewrite where this
did not occur for the actual device that caused the extension state
update. It was only being done for additional devices that could be
involved. This has been fixed so that it is now done for the causing
device.

Fixes: #2186

  •  

Asterisk Release 23.6.0-rc2

8 Oktober 2026 om 14:18

The Asterisk Development Team would like to announce
release candidate 2 of asterisk-23.6.0.

The release artifacts are available for immediate download at
https://github.com/asterisk/asterisk/releases/tag/23.6.0-rc2
and
https://downloads.asterisk.org/pub/telephony/asterisk

Repository: https://github.com/asterisk/asterisk
Tag: 23.6.0-rc2

This release resolves issues reported by the community
and would have not been possible without your participation.

Thank You!

Change Log for Release asterisk-23.6.0-rc2

Links:

Summary:

  • Commits: 3
  • Commit Authors: 2
  • Issues Resolved: 3
  • Security Advisories Resolved: 0

User Notes:

Upgrade Notes:

Developer Notes:

  • Audiohooks: Fix whisper framehook timer leak and masquerade handling

    ast_channel_fd_add() now returns -1 if it fails to allocate
    space for the descriptor.

Commit Authors:

  • Joshua C. Colp: (2)
  • Mike Bradeen: (1)

Issue and Commit Detail:

Closed Issues:

  • #2134: [bug]: Bridging channels which have been spied on with ChanSpy fails
  • #2179: [bug]: No initial NOTIFY for dialog subscriptions when hint references CustomPresence without AstDB entry (regression in 22.11.0)
  • #2186: [bug]: dialog-info NOTIFY for ringing extension no longer contains identity (caller ID) since 22.11.0

Commits By Author:

  • Joshua C. Colp (2):

    • extstate/pjsip: Handle lack of or late loading of presence state.
    • extstate: Include causing device channel details in legacy callbacks.
  • Mike Bradeen (1):

    • Audiohooks: Fix whisper framehook timer leak and masquerade handling

Commit List:

  • Audiohooks: Fix whisper framehook timer leak and masquerade handling
  • extstate/pjsip: Handle lack of or late loading of presence state.
  • extstate: Include causing device channel details in legacy callbacks.

Commit Details:

Audiohooks: Fix whisper framehook timer leak and masquerade handling
Author: Mike Bradeen
Date: 2026-09-25

Resolves several issues with the framehook added to allow whispering without
an underlying stream.

The timer is now owned by the audiohook list rather than the framehook. It is
retired on both channels during a masquerade and recreated when the audiohook(s)
are moved.

If the timer cannot be started, whisper audio is still mixed into the outbound
media as it was previously (requiring an underlying stream.)

An audiohook that cannot be moved to the new channel is now left DONE so that
its owner does not wait on it forever.

Resolves: #2134

DeveloperNote: ast_channel_fd_add() now returns -1 if it fails to allocate
space for the descriptor.

extstate/pjsip: Handle lack of or late loading of presence state.
Author: Joshua C. Colp
Date: 2026-09-25

The extension state implementation is stateful resulting in state
not being updated if a presence state provider does not publish an
update after loading. To handle providers which don't do this we
query for updated state if we are asked for it and the existing
state is invalid. This ensures that if the presence state provider
is loaded later we will get the updated state when asked.

The func_presencestate module is written to publish the persisted
custom presence states at load time. This failed for entries with
a not_set state as this resulted in querying the presence provider
that was not yet registered. The provider is now registered before
this ensuring the update can be published.

This change also fixes an issue in PJSIP where a SUBSCRIBE for a
hint that had an invalid presence state configuration would not
send an initial NOTIFY. We now treat an invalid presence state as
not set instead.

Fixes: #2179

extstate: Include causing device channel details in legacy callbacks.
Author: Joshua C. Colp
Date: 2026-09-29

When a legacy extension state callback registers it can optionally
do so in a way that it will receive the channel(s) that have caused
a device to ring. This is used in PJSIP for the dialog-info+xml
support so that phones can display who is calling the monitored
extension.

An issue was introduced in the extension state rewrite where this
did not occur for the actual device that caused the extension state
update. It was only being done for additional devices that could be
involved. This has been fixed so that it is now done for the causing
device.

Fixes: #2186

  •  

Asterisk Release 22.12.0-rc2

8 Oktober 2026 om 14:15

The Asterisk Development Team would like to announce
release candidate 2 of asterisk-22.12.0.

The release artifacts are available for immediate download at
https://github.com/asterisk/asterisk/releases/tag/22.12.0-rc2
and
https://downloads.asterisk.org/pub/telephony/asterisk

Repository: https://github.com/asterisk/asterisk
Tag: 22.12.0-rc2

This release resolves issues reported by the community
and would have not been possible without your participation.

Thank You!

Change Log for Release asterisk-22.12.0-rc2

Links:

Summary:

  • Commits: 3
  • Commit Authors: 2
  • Issues Resolved: 3
  • Security Advisories Resolved: 0

User Notes:

Upgrade Notes:

Developer Notes:

  • Audiohooks: Fix whisper framehook timer leak and masquerade handling

    ast_channel_fd_add() now returns -1 if it fails to allocate
    space for the descriptor.

Commit Authors:

  • Joshua C. Colp: (2)
  • Mike Bradeen: (1)

Issue and Commit Detail:

Closed Issues:

  • #2134: [bug]: Bridging channels which have been spied on with ChanSpy fails
  • #2179: [bug]: No initial NOTIFY for dialog subscriptions when hint references CustomPresence without AstDB entry (regression in 22.11.0)
  • #2186: [bug]: dialog-info NOTIFY for ringing extension no longer contains identity (caller ID) since 22.11.0

Commits By Author:

  • Joshua C. Colp (2):

    • extstate/pjsip: Handle lack of or late loading of presence state.
    • extstate: Include causing device channel details in legacy callbacks.
  • Mike Bradeen (1):

    • Audiohooks: Fix whisper framehook timer leak and masquerade handling

Commit List:

  • Audiohooks: Fix whisper framehook timer leak and masquerade handling
  • extstate/pjsip: Handle lack of or late loading of presence state.
  • extstate: Include causing device channel details in legacy callbacks.

Commit Details:

Audiohooks: Fix whisper framehook timer leak and masquerade handling
Author: Mike Bradeen
Date: 2026-09-25

Resolves several issues with the framehook added to allow whispering without
an underlying stream.

The timer is now owned by the audiohook list rather than the framehook. It is
retired on both channels during a masquerade and recreated when the audiohook(s)
are moved.

If the timer cannot be started, whisper audio is still mixed into the outbound
media as it was previously (requiring an underlying stream.)

An audiohook that cannot be moved to the new channel is now left DONE so that
its owner does not wait on it forever.

Resolves: #2134

DeveloperNote: ast_channel_fd_add() now returns -1 if it fails to allocate
space for the descriptor.

extstate/pjsip: Handle lack of or late loading of presence state.
Author: Joshua C. Colp
Date: 2026-09-25

The extension state implementation is stateful resulting in state
not being updated if a presence state provider does not publish an
update after loading. To handle providers which don't do this we
query for updated state if we are asked for it and the existing
state is invalid. This ensures that if the presence state provider
is loaded later we will get the updated state when asked.

The func_presencestate module is written to publish the persisted
custom presence states at load time. This failed for entries with
a not_set state as this resulted in querying the presence provider
that was not yet registered. The provider is now registered before
this ensuring the update can be published.

This change also fixes an issue in PJSIP where a SUBSCRIBE for a
hint that had an invalid presence state configuration would not
send an initial NOTIFY. We now treat an invalid presence state as
not set instead.

Fixes: #2179

extstate: Include causing device channel details in legacy callbacks.
Author: Joshua C. Colp
Date: 2026-09-29

When a legacy extension state callback registers it can optionally
do so in a way that it will receive the channel(s) that have caused
a device to ring. This is used in PJSIP for the dialog-info+xml
support so that phones can display who is calling the monitored
extension.

An issue was introduced in the extension state rewrite where this
did not occur for the actual device that caused the extension state
update. It was only being done for additional devices that could be
involved. This has been fixed so that it is now done for the causing
device.

Fixes: #2186

  •  

Asterisk Release 20.22.0-rc2

8 Oktober 2026 om 14:12

The Asterisk Development Team would like to announce
release candidate 2 of asterisk-20.22.0.

The release artifacts are available for immediate download at
https://github.com/asterisk/asterisk/releases/tag/20.22.0-rc2
and
https://downloads.asterisk.org/pub/telephony/asterisk

Repository: https://github.com/asterisk/asterisk
Tag: 20.22.0-rc2

This release resolves issues reported by the community
and would have not been possible without your participation.

Thank You!

Change Log for Release asterisk-20.22.0-rc2

Links:

Summary:

  • Commits: 3
  • Commit Authors: 2
  • Issues Resolved: 3
  • Security Advisories Resolved: 0

User Notes:

Upgrade Notes:

Developer Notes:

  • Audiohooks: Fix whisper framehook timer leak and masquerade handling

    ast_channel_fd_add() now returns -1 if it fails to allocate
    space for the descriptor.

Commit Authors:

  • Joshua C. Colp: (2)
  • Mike Bradeen: (1)

Issue and Commit Detail:

Closed Issues:

  • #2134: [bug]: Bridging channels which have been spied on with ChanSpy fails
  • #2179: [bug]: No initial NOTIFY for dialog subscriptions when hint references CustomPresence without AstDB entry (regression in 22.11.0)
  • #2186: [bug]: dialog-info NOTIFY for ringing extension no longer contains identity (caller ID) since 22.11.0

Commits By Author:

  • Joshua C. Colp (2):

    • extstate/pjsip: Handle lack of or late loading of presence state.
    • extstate: Include causing device channel details in legacy callbacks.
  • Mike Bradeen (1):

    • Audiohooks: Fix whisper framehook timer leak and masquerade handling

Commit List:

  • Audiohooks: Fix whisper framehook timer leak and masquerade handling
  • extstate/pjsip: Handle lack of or late loading of presence state.
  • extstate: Include causing device channel details in legacy callbacks.

Commit Details:

Audiohooks: Fix whisper framehook timer leak and masquerade handling
Author: Mike Bradeen
Date: 2026-09-25

Resolves several issues with the framehook added to allow whispering without
an underlying stream.

The timer is now owned by the audiohook list rather than the framehook. It is
retired on both channels during a masquerade and recreated when the audiohook(s)
are moved.

If the timer cannot be started, whisper audio is still mixed into the outbound
media as it was previously (requiring an underlying stream.)

An audiohook that cannot be moved to the new channel is now left DONE so that
its owner does not wait on it forever.

Resolves: #2134

DeveloperNote: ast_channel_fd_add() now returns -1 if it fails to allocate
space for the descriptor.

extstate/pjsip: Handle lack of or late loading of presence state.
Author: Joshua C. Colp
Date: 2026-09-25

The extension state implementation is stateful resulting in state
not being updated if a presence state provider does not publish an
update after loading. To handle providers which don't do this we
query for updated state if we are asked for it and the existing
state is invalid. This ensures that if the presence state provider
is loaded later we will get the updated state when asked.

The func_presencestate module is written to publish the persisted
custom presence states at load time. This failed for entries with
a not_set state as this resulted in querying the presence provider
that was not yet registered. The provider is now registered before
this ensuring the update can be published.

This change also fixes an issue in PJSIP where a SUBSCRIBE for a
hint that had an invalid presence state configuration would not
send an initial NOTIFY. We now treat an invalid presence state as
not set instead.

Fixes: #2179

extstate: Include causing device channel details in legacy callbacks.
Author: Joshua C. Colp
Date: 2026-09-29

When a legacy extension state callback registers it can optionally
do so in a way that it will receive the channel(s) that have caused
a device to ring. This is used in PJSIP for the dialog-info+xml
support so that phones can display who is calling the monitored
extension.

An issue was introduced in the extension state rewrite where this
did not occur for the actual device that caused the extension state
update. It was only being done for additional devices that could be
involved. This has been fixed so that it is now done for the causing
device.

Fixes: #2186

  •  

Dafne Schippers verloor (net als Matthijs) hond bij treinongeluk: "Sammie redde mij"

6 Oktober 2026 om 06:00

💾

“Tegenover mij zit Dafne Schippers. 34 jaar. We zitten bij mij thuis in de Achterhoek en zo konden de hondjes er namelijk makkelijk bij. En dat heeft een reden. Dafne is topatlete in ruste, sprintster in de buitencategorie. Ze liep jarenlang sneller dan de rest. Twee keer wereldkampioen op de 200 meter, 2015 en 2017. Deze gouden medailles hangen in een overvolle prijzenkast tussen Olympisch-, Europees- en Nederlands eremetaal.

Drie jaar geledne nam ze, geplaaagd door te veel rugpijn, afscheid. Ze was toen 31 jaar. In haar afscheidstweet schreef ze kort: ‘De race stopt hier’. Een leven van 12 jaar topsport. 12 jaar van manische interesse in honderste van sconden tijdswinst en alles wat daarbij komt kijken. Het zat erop. Dafne en ik hebben iets gemeen. Iets verdrietigs. Deze podcast heet Schuilen in Schoonheid, waar vind je troost in tijden van onmacht, pijn, verdriet, spanning? Wij vonden dat allebei bij onze hond en we zijn allebei onze hond bij een treinongeluk verloren.”

In Schuilen in Schoonheid spreekt Matthijs van Nieuwkerk met spraakmakende gasten over tegenslag en de schoonheid van het leven. Aan de hand van de drie schuilplaatsen van zijn gast, onderzoekt Matthijs wat weerbaarheid inhoudt. Gasten delen de plekken, rituelen en kunstwerken waar zij troost in vinden.

Op de hoogte blijven van alles rondom deze podcast? Volg ons op Instagram via @matthijsvannieuwkerk en TikTok @schuileninschoonheid. Dit is een podcast van Dag en Nacht. Adverteren in deze podcast? Kijk op adverteren.podimo.nl voor alle mogelijkheden.
  •  

Jan Mulder: “Sterven. Hoezo? Dat vind ik het grootste onrecht ooit bedacht" | Schuilen in Schoonheid

29 September 2026 om 06:00

💾

"Tegenover mij zit Jan Mulder. 81 jaar. Vader van zonen Youri en Gerrit. Man van jeugdliefde Johanna. Groninger in hart en nieren. Jan Mulder was een goede voetballer, daar niet van. Bovendien een voetballer die later een gevierd columnist en schrijver zou worden. Hij leidde een zo op het oog jaloersmakend groots leven. Pendelend tussen Anderlecht-maatje Rob Rensenbrink en idool Remco Campert.

Maar Jans grootste bijdrage aan ons geluk was zijn onweerstaanbare rol als tafelheer. Een dagelijks leven dat begon bij Barend & Van Dorp, en dat was in 1998. Jan was de allereerste. Een talkshow zonder extra stoel is sinds dien niet meer gemaakt. Jan schreef, in zijn eentje, televisiegeschiedenis."

In Schuilen in Schoonheid spreekt Matthijs van Nieuwkerk met spraakmakende gasten over  tegenslag en de schoonheid van het leven. Aan de hand van de drie schuilplaatsen van zijn gast, onderzoekt Matthijs wat weerbaarheid inhoudt. Gasten delen de plekken, rituelen en kunstwerken waar zij troost in vinden. 

Op de hoogte blijven van alles rondom deze podcast? Volg ons op Instagram via @matthijsvannieuwkerk en TikTok @schuileninschoonheid. Dit is een podcast van Dag en Nacht. Adverteren in deze podcast? Kijk op adverteren.podimo.nl voor alle mogelijkheden.
  •  

Abderrahim Nouri: "Die eerste glimlach van Appie is niet te omschrijven" | Schuilen in Schoonheid

22 September 2026 om 06:00

💾

"Tegenover mij zit Abderrahim Nouri, 33 jaar. Hij is de oudste broer van Abdelhak Nouri. Die is veel beter bekend als Appie Nouri. Appie was een van de grootste talenten van Ajax toen hij in 2017 tijdens een oefenwedstrijd in Oostenrijk werd getroffen door een hartstilstand. Door een te trage behandeling van de medische staf liep Nouri ernstige hersenschade op.

Dat is al bijna tien jaar geleden. Nouri leeft sindsdien in een staat van verminderd bewustzijn en woont in een speciaal aangepast huis. Daar wordt hij intensief verzorgd. Abderrahim heeft zijn werk opgezegd en wijdt zijn leven aan het wel en wee van zijn broertje."

In Schuilen in Schoonheid spreekt Matthijs van Nieuwkerk met spraakmakende gasten over  tegenslag en de schoonheid van het leven. Aan de hand van de drie schuilplaatsen van zijn gast, onderzoekt Matthijs wat weerbaarheid inhoudt. Gasten delen de plekken, rituelen en kunstwerken waar zij troost in vinden. 

Op de hoogte blijven van alles rondom deze podcast? Volg ons op Instagram via @matthijsvannieuwkerk en TikTok @schuileninschoonheid. Dit is een podcast van Dag en Nacht. Adverteren in deze podcast? Kijk op adverteren.podimo.nl voor alle mogelijkheden.
  •  

Pierre Bokma: "We krijgen wel straf. Het gaat heel naar worden" | Schuilen in Schoonheid

15 September 2026 om 06:00

💾

"Tegenover mij zit Pierre Bokma. Zeventig jaar. De meest betoverende acteur van ons land, zei Hanneke Groenteman niet zo lang geleden. En haar spreek je niet snel tegen. Ik rende begin jaren negentig naar De Stadsschouwburg in Amsterdam om Pierre als Richard de 3de te zien. Het was een sensatie. Hij werd ervoor bekroond met een Louis d’Or. Vijfendertig jaar later is er een Gouden Kalf voor de tv-serie De Joodse Raad, waarin Pierre de rol van David Cohen speelt, hartverscheurend, het verhaal, de rol, het spel. En wat de junioren betreft: op TikTok gaan er talloze imitaties rond van Pierres rol als leraar Duits in het tv-programma Rundfunk. Als lijstjesman stel ik: de top 5 acteurs alive: Andrew Scott, Jack Nicholson, Christopher Waltz, Pierre Bokma en Leonardo Di Caprio."

In Schuilen in Schoonheid spreekt Matthijs van Nieuwkerk met spraakmakende gasten over  tegenslag en de schoonheid van het leven. Aan de hand van de drie schuilplaatsen van zijn gast, onderzoekt Matthijs wat weerbaarheid inhoudt. Gasten delen de plekken, rituelen en kunstwerken waar zij troost in vinden. 

Op de hoogte blijven van alles rondom deze podcast? Volg ons op Instagram via @matthijsvannieuwkerk en TikTok @schuileninschoonheid. Dit is een podcast van Dag en Nacht. Adverteren in deze podcast? Kijk op adverteren.podimo.nl voor alle mogelijkheden.
  •  

Dit is Schuilen in Schoonheid

10 September 2026 om 16:33

💾

In Schuilen in Schoonheid spreekt Matthijs van Nieuwkerk met spraakmakende gasten over  tegenslag en de schoonheid van het leven. Waar schuil je in tijden van tegenslag?

Aan de hand van de drie schuilplaatsen van zijn gast, onderzoekt Matthijs wat weerbaarheid inhoudt. Gasten delen de plekken, rituelen en kunstwerken waar zij troost in vinden.

Op de hoogte blijven van alles rondom deze podcast? Volg ons op Instagram via @matthijsvannieuwkerk en TikTok @schuileninschoonheid

Dit is een podcast van Dag en Nacht.
  •  

Ellen Verbeek: "Verdriet gaat niet weg, de ruimte eromheen wordt groter" | Schuilen in Schoonheid

8 September 2026 om 05:00

💾

"Tegenover mij zit Ellen Verbeek, 68 jaar. Ze vertrok eind jaren tachtig met haar man Derk Sauer en zoon Tom naar Moskou. De Muur was gevallen, perestroika heette de nieuwe droom, de lucht zinderde van vrijheid en mogelijkheden. Derk en Ellen begonnen in Rusland het mediabedrijf Independent Media. Ellen werd hoofdredacteur van Russische Cosmopolitan en bevrijdde de moderne Russin van man en aanrecht.

Ze werd in dezelfde tijd in Rusland een veelgevraagde tv-persoonlijkheid. Met de komst van Poetin sloeg de langzaam sfeer om en na de inval van Rusland in Oekraïne, in 2022, lieten Ellen en Derk alles in Moskou achter en vertrokken, vluchtten naar Nederland. Vorig jaar juli stuitte hun boot van in Griekenland op een rots, niet eens zo hard, maar Derk viel door de schok achterover van een trappetje. Een maand later overleed hij."

Genoemde literatuur:
- The Year of Magical Thinking (Joan Didion)
- Things in Nature Merely Grow (Yiyun Li)
- The Griefcast (Cariad Lloyd)
- All There Is with Anderson Cooper (Anderson Cooper)

In Schuilen in Schoonheid spreekt Matthijs van Nieuwkerk met spraakmakende gasten over tegenslag en de schoonheid van het leven. Aan de hand van de drie schuilplaatsen van zijn gast, onderzoekt Matthijs wat weerbaarheid inhoudt. Gasten delen de plekken, rituelen en kunstwerken waar zij troost in vinden.

Op de hoogte blijven van alles rondom deze podcast? Volg ons op Instagram via @matthijsvannieuwkerk en TikTok @schuileninschoonheid. Dit is een podcast van Dag en Nacht. Adverteren in deze podcast? Kijk op adverteren.podimo.nl voor alle mogelijkheden.
  •  

Fresku: "Mijn grootste pijn is mijn grootste succes" | Schuilen in Schoonheid

1 September 2026 om 05:00

💾

"Tegenover mij zit Fresku. Echte naam Roy Michael Reymound. Rapper en cabaretier uit Eindhoven. veertig is hij nu. Kreeg vorig jaar een Edison voor zijn album Leren Leven. En dat werd hoog tijd. Fresku heeft me altijd ontroerd, met zijn geweldige teksten, zijn zeer persoonlijke verhalen, zijn eeuwige onzekerheid en met zijn oproep, in 2018, om te bidden voor zijn zieke zoontje Rayaan. Hij schreef bij die gelegenheid een van zijn mooiste nummers; Mijn Zoon. We zijn nu acht jaar later.

Met zijn zoon gaat het goed en Fresku reist dit najaar met het Metropole Orkest door het land. Hij zal daarbij zeker zijn nummer 'Ik Wil' zingen. Ik citeer daaruit drie regels: “Ik zou willen dat ik niet meer wakker lag, geen paniekaanvallen meer, ik wil van mijn angsten af.”

In Schuilen in Schoonheid spreekt Matthijs van Nieuwkerk met spraakmakende gasten over  tegenslag en de schoonheid van het leven. Aan de hand van de drie schuilplaatsen van zijn gast, onderzoekt Matthijs wat weerbaarheid inhoudt. Gasten delen de plekken, rituelen en kunstwerken waar zij troost in vinden. 

Op de hoogte blijven van alles rondom deze podcast? Volg ons op Instagram via @matthijsvannieuwkerk en TikTok @schuileninschoonheid. Dit is een podcast van Dag en Nacht. Adverteren in deze podcast? Kijk op adverteren.podimo.nl voor alle mogelijkheden.
  •  

Astrid Holleeder: "We zijn met z'n zessen: ik, m'n hondje en vier eksters" | Schuilen in Schoonheid

25 Augustus 2026 om 06:00

💾

"Tegenover mij zit Astrid Holleeder (60): advocaat, auteur van de bestseller Judas en sinds kort tv-persoonlijkheid. Maar bovenal is zij de zus van de bekendste crimineel van Nederland, Willem Holleeder.

Zelf kwam ik Willem vroeger nog wel eens tegen in Amsterdam. "Hé gabber, bakkie doen?" riep hij dan vanaf zijn scooter. Ik was als de dood voor hem. Astrid leefde echter in een constante nachtmerrie. Toen haar geweten het won van de broederliefde, nam ze een levensgevaarlijk besluit: ze legde geheime getuigenissen af om haar eigen broer voorgoed achter de tralies te krijgen.

Het resultaat? Willem Holleeder kreeg levenslang, maar Astrid werd vogelvrij verklaard. Vanaf 2015 veranderde haar leven in een voortdurende vlucht voor de wraakacties van haar broer. Nu, elf jaar later, spreekt ze over het leven in de schaduw, haar continue zoektocht naar veiligheid en de prijs van de waarheid."

Het boek waar Astrid uit voorleest heet De Keuze van Edith Eger.

In Schuilen in Schoonheid spreekt Matthijs van Nieuwkerk met spraakmakende gasten over tegenslag en de schoonheid van het leven. Aan de hand van de drie schuilplaatsen van zijn gast, onderzoekt Matthijs wat weerbaarheid inhoudt. Gasten delen de plekken, rituelen en kunstwerken waar zij troost in vinden.

Op de hoogte blijven van alles rondom deze podcast? Volg ons op Instagram via @matthijsvannieuwkerk en TikTok @schuileninschoonheid. Dit is een podcast van Dag en Nacht. Adverteren in deze podcast? Kijk op adverteren.podimo.nl voor alle mogelijkheden.
  •  

v12.5.0

7 Oktober 2026 om 20:54

⚠️ Potential Breaking Changes

Fixed TFA enforcement to use effective permissions (#28176)
Policies with an IP allow list are now accounted for when enforcing TFA within the allowed range.

Improved license handling so a failed license request keeps the current license in effect and is retried by a scheduled license check, with a warning in the app showing why the license could not be renewed and when it lapses (#28331)
The /server/license response no longer includes downgrade_reason. Read invalid_reason instead, which also reports why a license that is still in effect could not be renewed.

@directus/errors no longer exports LicenseManagedByEnvError, LicenseOfflineUnsupportedError, LicenseResolveIncompleteError or LicenseServiceUnavailableError, or their error codes. License request failures now surface as LICENSE_INVALID with a failure extension, or as the standard FORBIDDEN, INVALID_PAYLOAD, REQUESTS_EXCEEDED and SERVICE_UNAVAILABLE errors.

Removed the ip-matching dependency (#28243)
Policy ip_access and IMPORT_IP_DENY_LIST values are now more strictly validated. Subnets with a malformed prefix such as 10.0.0.0/ 24 or 10.0.0.0/+24, are no longer accepted.

Existing policies that already store such a value will fail every request for users with that policy.

Fixed requests failing after a process was stopped during schema building (#28316)
CACHE_SCHEMA_MAX_ITERATIONS has been removed. CACHE_SCHEMA_SYNC_TIMEOUT now also limits the schema build itself and defaults to 60000 ms.

If you have configured a lower value, make sure it is long enough for your schema to finish building.

Updated outdated type definitions for directus_notifications, directus_permissions, directus_extensions, directus_fields, directus_activity, directus_collections, and directus_revisions (#28072)
Breaking changes in @directus/sdk:

  • DirectusNotification.id is now correctly typed as number.
  • DirectusField.schema is now nullable.
  • FieldMetaConditionOptionType has been removed; condition options is now Record<string, any>.
  • FieldMetaConditionType.hidden, readonly, required, and options are now optional, and rule is typed as a filter.
  • All ExtensionSchema properties are now optional, and DirectusExtension.schema can also be an ExtensionSchemaEntry.

Breaking changes in @directus/types:

  • Notification.id is now correctly typed as number.

  • Notification.status and timestamp are now nullable.

  • @directus/api

    • Improved license handling so a failed license request keeps the current license in effect and is retried by a scheduled license check, with a warning in the app showing why the license could not be renewed and when it lapses (#28331 by @ComfortablyCoding)
    • Removed the ip-matching dependency (#28243 by @Nitwel)
    • Fixed requests failing after a process was stopped during schema building (#28316 by @Nitwel)
  • @directus/errors

    • Improved license handling so a failed license request keeps the current license in effect and is retried by a scheduled license check, with a warning in the app showing why the license could not be renewed and when it lapses (#28331 by @ComfortablyCoding)
  • @directus/utils

  • @directus/types

    • Updated outdated type definitions for directus_notifications, directus_permissions, directus_extensions, directus_fields, directus_activity, directus_collections, and directus_revisions (#28072 by @kheiner)
  • @directus/sdk

    • Updated outdated type definitions for directus_notifications, directus_permissions, directus_extensions, directus_fields, directus_activity, directus_collections, and directus_revisions (#28072 by @kheiner)

✨ New Features & Improvements

  • @directus/app
    • Added a Preview Base URL project setting, selectable as a variable in a collection's Preview URL (#28227 by @robluton)
    • Added header bar buttons to set multiple selected Flows to active or inactive (#28321 by @robluton)
    • Added a confirmation dialog when saving Public policy permission changes on system collections (#28311 by @robluton)
    • Added a persistent warning notice when editing the Public policy (#28310 by @robluton)
    • Added support for linking images in the WYSIWYG editor: select an image and use the link toolbar button (or Mod+K) to wrap it in an anchor; stored <a href><img></a> markup now survives loading without triggering the normalization warning (#28289 by @alvarosabu)
  • @directus/api
    • Added a Preview Base URL project setting, selectable as a variable in a collection's Preview URL (#28227 by @robluton)
  • @directus/memory
    • Added opt-in hash option to redis memory, improving cache clear performance (#28214 by @Nitwel)
    • Added optional lock settings to usingLock to override the lock's duration and retry count. A signal is now passed to the callback that aborts if the lock is lost before it finishes (#28331 by @ComfortablyCoding)
  • @directus/system-data
    • Added a Preview Base URL project setting, selectable as a variable in a collection's Preview URL (#28227 by @robluton)
  • @directus/types
    • Added a Preview Base URL project setting, selectable as a variable in a collection's Preview URL (#28227 by @robluton)
  • @directus/sdk
    • Added a Preview Base URL project setting, selectable as a variable in a collection's Preview URL (#28227 by @robluton)
  • @directus/constants
    • Added a persistent warning notice when editing the Public policy (#28310 by @robluton)
  • @directus/env

🐛 Bug Fixes & Optimizations

  • @directus/app
    • Updated proxy-addr, braintrust, MCP SDK, sharp, vue, dompurify, source-map-js and serialize-javascript to address CVEs (#28334 by @br41nslug)
    • Update license validation to only accept Directus keys and tokens (#28331 by @ComfortablyCoding)
    • Updated undici, axios, nodemailer, basic-ftp, ip-address, and fast-uri to address CVEs (#28330 by @br41nslug)
    • Improved license handling so a failed license request keeps the current license in effect and is retried by a scheduled license check, with a warning in the app showing why the license could not be renewed and when it lapses (#28331 by @ComfortablyCoding)
    • Fixed tooltips not appearing on keyboard focus (#28263 by @robluton)
    • Fixed Norwegian time format patterns that displayed raw timestamps instead of times in datetime fields (#28332 by @u12206050)
    • Fixed the module navigation scrolling back to the top when navigating to another page (#28269 by @khanahmad4527)
    • Fixed AI translations creating duplicate target language rows when streaming multiple fields. (#28074 by @xmflsct)
    • Updated outdated type definitions for directus_notifications, directus_permissions, directus_extensions, directus_fields, directus_activity, directus_collections, and directus_revisions (#28072 by @kheiner)
    • Cleaned unsupported markup from pasted content in the WYSIWYG editor and flagged it inline, with a view of what was removed and the choice to undo the paste or redo it raw in the raw HTML editor (#28238 by @alvarosabu)
  • @directus/api
    • Updated proxy-addr, braintrust, MCP SDK, sharp, vue, dompurify, source-map-js and serialize-javascript to address CVEs (#28334 by @br41nslug)
    • Update license validation to only accept Directus keys and tokens (#28331 by @ComfortablyCoding)
    • Fixed OpenAPI spec version to only change when the generated spec does (#28109 by @kheiner)
    • Fixed creating a collection with neither schema nor meta returning a misleading 403 instead of a 400 validation error (#28258 by @kheiner)
    • Fixed filtering and GraphQL typing of geometry subtype fields (e.g. geometry.Point) (#28308 by @PINYOPATTANAWASANPORN)
    • Fixed license boot holding a lock for the entirety of startup (#28331 by @ComfortablyCoding)
    • Fixed GraphQL marking not-null fields with a default value as nullable in queries and fields with falsey default values as required in create mutations (#28280 by @Dextheking1)
    • Added opt-in hash option to redis memory, improving cache clear performance (#28214 by @Nitwel)
    • Fixed TFA enforcement to use effective permissions (#28176 by @psang39)
    • Updated undici, axios, nodemailer, basic-ftp, ip-address, and fast-uri to address CVEs (#28330 by @br41nslug)
    • Fixed GraphQL fragments on the union type of one M2A field returning no data when spread into another M2A field (#28305 by @Nitwel)
    • Unified related collection lookups to use getRelationInfo (#28246 by @Nitwel)
    • Fixed a GraphQL query with a __proto__ field alias being able to write a property onto Object.prototype. (#28211 by @datrixlab)
    • Improved validation of storage locations and paths for files (#28077 by @br41nslug)
  • @directus/extensions-sdk
    • Fixed directus-extension validate passing or crashing on missing extension paths (#28320 by @PINYOPATTANAWASANPORN)
    • Updated proxy-addr, braintrust, MCP SDK, sharp, vue, dompurify, source-map-js and serialize-javascript to address CVEs (#28334 by @br41nslug)
  • @directus/composables
    • Updated proxy-addr, braintrust, MCP SDK, sharp, vue, dompurify, source-map-js and serialize-javascript to address CVEs (#28334 by @br41nslug)
    • Updated undici, axios, nodemailer, basic-ftp, ip-address, and fast-uri to address CVEs (#28330 by @br41nslug)
  • @directus/extensions
    • Updated proxy-addr, braintrust, MCP SDK, sharp, vue, dompurify, source-map-js and serialize-javascript to address CVEs (#28334 by @br41nslug)
  • @directus/stores
    • Updated proxy-addr, braintrust, MCP SDK, sharp, vue, dompurify, source-map-js and serialize-javascript to address CVEs (#28334 by @br41nslug)
  • @directus/themes
    • Updated proxy-addr, braintrust, MCP SDK, sharp, vue, dompurify, source-map-js and serialize-javascript to address CVEs (#28334 by @br41nslug)
  • @directus/types
    • Updated proxy-addr, braintrust, MCP SDK, sharp, vue, dompurify, source-map-js and serialize-javascript to address CVEs (#28334 by @br41nslug)
    • Updated undici, axios, nodemailer, basic-ftp, ip-address, and fast-uri to address CVEs (#28330 by @br41nslug)
  • @directus/utils
    • Updated proxy-addr, braintrust, MCP SDK, sharp, vue, dompurify, source-map-js and serialize-javascript to address CVEs (#28334 by @br41nslug)
    • Fixed filtering and GraphQL typing of geometry subtype fields (e.g. geometry.Point) (#28308 by @PINYOPATTANAWASANPORN)
    • Unified related collection lookups to use getRelationInfo (#28246 by @Nitwel)
  • @directus/specs
    • Fixed creating a collection with neither schema nor meta returning a misleading 403 instead of a 400 validation error (#28258 by @kheiner)
  • @directus/cli
    • Updated undici, axios, nodemailer, basic-ftp, ip-address, and fast-uri to address CVEs (#28330 by @br41nslug)
  • @directus/storage-driver-cloudinary
    • Updated undici, axios, nodemailer, basic-ftp, ip-address, and fast-uri to address CVEs (#28330 by @br41nslug)
  • @directus/storage-driver-supabase
    • Updated undici, axios, nodemailer, basic-ftp, ip-address, and fast-uri to address CVEs (#28330 by @br41nslug)
  • @directus/update-check
    • Updated undici, axios, nodemailer, basic-ftp, ip-address, and fast-uri to address CVEs (#28330 by @br41nslug)
  • @directus/env
    • Fixed requests failing after a process was stopped during schema building (#28316 by @Nitwel)
  • @directus/sdk
    • Fixed readActivity, deletePermission, readPermission, updatePermission, readItemPermissions, readNotification, and readRevision not rejecting a null or undefined key or collection (#28072 by @kheiner)

📦 Published Versions

  • @directus/app@18.1.0
  • @directus/api@40.0.0
  • @directus/cli@12.3.1
  • @directus/composables@11.6.4
  • @directus/constants@14.5.0
  • create-directus-extension@12.1.6
  • @directus/env@6.4.0
  • @directus/errors@3.0.0
  • @directus/extensions@4.0.6
  • @directus/extensions-registry@4.0.5
  • @directus/extensions-sdk@18.0.6
  • @directus/memory@4.1.0
  • @directus/pressure@4.0.6
  • @directus/schema-builder@1.0.4
  • @directus/specs@15.2.1
  • @directus/storage-driver-azure@13.0.6
  • @directus/storage-driver-cloudinary@14.0.3
  • @directus/storage-driver-gcs@13.0.6
  • @directus/storage-driver-s3@14.0.3
  • @directus/storage-driver-supabase@5.0.3
  • @directus/stores@3.0.2
  • @directus/system-data@4.8.0
  • @directus/themes@3.0.1
  • @directus/types@18.0.0
  • @directus/update-check@14.0.1
  • @directus/utils@14.0.0
  • @directus/validation@3.0.6
  • @directus/sdk@27.0.0

  •  

v1.13.0 - Out of Office Forwarding, Copy to Another Account & Unverified Sender Warnings

Door: rathlinus
7 Oktober 2026 om 20:46

1.13.0 (2026-10-07)

1.13.0 turns the vacation settings into an Out of Office page that can also forward mail, lets filter rules run only for a date range, and copies messages into another connected account. Files from the Files app can be attached in the composer, tags can be set on many messages at once and folders moved in bulk. Messages whose sender can't be verified now carry a warning. It also stops one account's settings and templates from carrying over to the next account signed in on the same browser.

Thank you for your donations:

One-time

  • Anonymous
  • Anonymous
  • Anonymous

Monthly

Security

  • Settings: Signing out and then signing in with another account in the same browser no longer shows the previous account's settings, tags and templates, and no longer saves them to the new account's synced settings (#1185)

Features

  • Mail: A message whose sender fails the From domain's checks, or that passes neither SPF nor DKIM, shows a warning above the message and a badge next to the sender. "Always trust this sender" is not offered for it
  • Mail: "Copy to account..." in the message menu files a copy in a folder of another connected account and leaves the original where it is. Copies keep their original date (#1150, thanks @lucamzanon)
  • Mail: The selection toolbar and the right-click menu put a tag on, or take it off, every selected message at once (#1077)
  • Out of office: The vacation settings are now an Out of Office page: the period on top, then the automatic reply and forwarding, each with its own switch. Forwarding works with or without the reply, never forwards spam and can keep a copy in the inbox. The reply can go to all senders, internal senders only or external senders only (#1152, thanks @dealerweb)
  • Filters: A rule can be limited to a period, and the rule list shows whether it is scheduled, active or expired (#1152, thanks @dealerweb)
  • Filters: The new "All messages" condition matches every message (#1154, thanks @dealerweb)
  • Composer: "Attach from Files" attaches files from the Files app, including files shared with you, without downloading and uploading them again (#1179)
  • Composer: Typing @ in the message body offers the To and Cc recipients and inserts the chosen one's first name. Bcc recipients are never offered. "Mention recipients with @" in the composer settings turns it off (#1134, thanks @dealerweb)
  • Folders: The folder settings can select several folders, with Shift+click for a range, and move them together under another folder or to the top level (#1173)
  • Calendar: The day and week views can be limited to working hours, and the week view can leave out non-working days. Events outside the visible hours are counted at the top and bottom of each day and open from there, and a button in the view shows all hours (#1164)
  • Login: LOGIN_SHOW_TOKEN_LOGIN=true offers "Sign in with an access token", for JMAP servers that take API tokens instead of passwords, such as Fastmail
  • Login: A server in JMAP_SERVERS whose oauth block has both a clientId and a buttonLabel gets its own sign-in button on the login page, even while OAuth is off globally. This allows a "Sign in with Google" button for a Gmail bridge next to servers that use passwords (#1135, thanks @lucamzanon)
  • UI: The browser tab title names the active account, as in "Inbox - alice@example.com - Webmail", and Settings, Calendar, Contacts and Files set their own title. Turning off "Subject in Tab Title" under Admin > Policy keeps message subjects out of the title, and with it out of the browser history (#1186, thanks @oguzyilmaznet)
  • Unified: While logins reconnect after a page load, the "All accounts" header shows how many are already counted, such as "4/10" (#1140, thanks @lucamzanon)
  • Push: A message that reaches several of your accounts rings once. For 30 seconds after an alert, notifications from your other accounts arrive silently (#1141, thanks @lucamzanon)
  • Server: SOURCE_CODE_URL points the source code link in Settings > About at the code of a modified build, as AGPL section 13 asks of anyone running one (#1161)

Changes

  • Calendar: The day and week views show 08:00 to 20:00 by default. "Limit visible hours" in the calendar settings changes the range or turns it off (#1164)
  • Tags: Tag views and their counts leave out messages in Trash and Spam (#1156)
  • Mail: In a shared mailbox, the Move menus list that mailbox's folders first and your own folders after them, under your account name (#1149)
  • Dependencies: sharp 0.35.5 and source-map-js 1.2.2 (npm audit)
  • Docs: CONTRIBUTING.md explains what belongs in core and what in a plugin, and which changes need an agreed issue before a pull request

Fixes

  • Mail: Attachments, inline images and .eml downloads of messages in shared folders are fetched from the account that owns them. On Cyrus they failed with "failed to find blob by id" (#1188, thanks @VasilisNtovolos)
  • Mail: Archive creates an Archive folder when the account has none, instead of only reporting that it is missing (#1176, thanks @cybersmurf)
  • Mail: Opening the webmail starts in the inbox instead of a folder from an earlier visit, such as Trash
  • Mail: Opening another folder, tag, account or search starts the message list at the top instead of where the last one was scrolled to (#1138, thanks @dealerweb)
  • Mail: Previews no longer start with a style sheet ("@media screen and ...") in the message list and in push notifications (#1136, thanks @lucamzanon)
  • Search: Searching from the unified All mail view finds sent mail too
  • Send: A draft saved without a subject reopens with an empty subject, so Send warns about it again instead of sending "(No Subject)" (#1189)
  • Send: When the server does not confirm that a message was sent, the draft is kept and the composer asks you to check Sent before sending again (#1019, thanks @lucamzanon)
  • Send: A message the server refuses shows the server's reason instead of "Invalid reference to non-existing object"
  • Send: A forward sent from another account's address no longer fails with blobNotFound. Its attachments and inline images are copied to the sending account first (#1142, thanks @lucamzanon)
  • Push: Push turns itself back on when the browser lost its subscription, retrying at most every 15 minutes (#1147, thanks @lucamzanon)
  • Push: The notification settings check push again when you come back to the tab, so push turned off in the browser or another tab no longer shows as on (#1148, thanks @lucamzanon)
  • Push: When the new message cannot be read, the notification no longer announces another unread message from the Inbox in its place, and a failed lookup shows a generic notification instead of none (#1041, thanks @lucamzanon)
  • Filters: "Stop processing further rules" also stops after "Delete silently" and "Reject", so later rules no longer file the message. Rules whose name contains double spaces, a tab or a trailing space no longer gain a copy on every save, and the copies earlier saves left are removed (#1153, thanks @dealerweb)
  • Filters: The forwarding limit counts the forwards one message can collect, instead of adding up every enabled rule, and warns when the rule order lets one message go over it (#1155, thanks @dealerweb)
  • Filters: A condition with several values wraps inside its card in the expanded rule view (#1139, thanks @dealerweb)
  • Filters: An open rule dialog or Sieve editor, and what was typed in it, survives a filter change from another tab or device (#1162, thanks @dealerweb)
  • Templates: A tab or device that had not reloaded no longer deletes templates created elsewhere when it saves its settings
  • Calendar: Duplicating an event keeps its meeting link (#1170)
  • Calendar: The Calendar Agenda plugin shows events from shared and group calendars (#1175, thanks @cybersmurf)
  • Files: Folders shared with you can be opened, and your own folders shared, in both folder layouts (#1181)
  • Files: Office editing works behind a reverse proxy where the editor and the browser reach the webmail at different addresses. The WOPI client URL may be an internal address (#1130)
  • Login: When Stalwart accepts a password and TOTP code but refuses to issue tokens, the login page points at the OAuth client settings instead of opening the browser's own sign-in dialog and reporting a wrong code
  • Branding: With APP_NAME set, the authenticator app entry for two-factor sign-in, the About card and the Files preview use the configured name and logo (#1177, thanks @cybersmurf)
  • UI: Text fields in dialogs keep the focus when the page behind updates, which happened every 30 seconds and on new mail (#1162, thanks @dealerweb)
  • UI: Buttons, menu items, tabs and other controls show the pointer cursor again (#1184, thanks @gwku)
  • UI: The account group labels in the From dropdown are readable in dark themes (#1157, thanks @dealerweb)
  • Translations: Czech is fully translated (#1174, thanks @cybersmurf), and missing placeholders are restored in Persian, Hebrew, Hungarian, Mongolian and Slovak (#1165, thanks @owgreen-dev)

  •  

v1.24.1-pre

7 Oktober 2026 om 20:28

This week's release includes Git tag creation, the ability to drag Terminal tabs into the Agent Panel, and pre-filling of the File Finder's search query with text selected in the editor or terminal.

Features

AI

  • Improved Agent Panel terminal support by allowing Terminal tabs to be dragged into it. (#60582; thanks cppcoffee)
  • Improved custom Amazon Bedrock model support with configurable tool use, images, and thinking. (#64953; thanks mpyuglgwkxcmodyrpo)
  • Improved memory and CPU usage while the agent responds in long threads. (#65244)

Git

  • Added a git: create tag at head command and a Create Tag… context menu action in Git history and Git Graph to create local tags on commits. Tags are not pushed automatically. (#61973, #65194; thanks cppcoffee)
  • Added gitiles as a Git hosting provider for Gitiles/Gerrit deployments, enabling permalinks and navigation from the Git blame diff view. (#63996; thanks JonathanBerkeley)
  • Added a side-by-side view for directory diffs opened with zed --diff. (#64967; thanks ian-h-chamberlain)
  • Added file counts to section headers in the Git Panel. (#65028; thanks mansoorkhan96)
  • Added self-hosted Gerrit repositories as a provider for permalinks. (#53832; thanks starsep)
  • Improved the Git Panel with a collapsible commit message editor, configurable with git_panel.commit_editor, and the Git Graph with collapsible commit details. (#63236; thanks mulhamna)
  • Improved Git Graph readability by moving refs from the description column into the graph. (#59839; thanks RemcoSmitsDev)
  • Improved Git Panel file actions for multiple selected files. (#64640; thanks Acd-kk)

Debugger

  • Improved the debugger variables view with distinct colors for values based on their type, such as integers and strings. (#64111; thanks syormon)

Languages

  • Added a Show Source option to the Markdown preview tab context menu. (#65081; thanks joshkent94)
  • Added a Go package-level test gutter button next to package declarations. (#56699; thanks cppcoffee)
  • Added support for language-server extensions to configure which language servers are enabled by default in extension.toml. See the extension documentation. (#65030)
  • Added markdown_preview.heading_font_weight to configure the font weight of headings in the Markdown preview. (#64421; thanks dremnik)
  • Added the mermaid_font_family setting to configure the font used in Mermaid diagrams. (#63430; thanks Sha1rholder)
  • Improved the column filter dropdown in the tabular data preview to sort values naturally (e.g., 2 before 10). (#64764; thanks HalavicH)

Remote Development

  • Improved remote server responsiveness when log or RPC response writes are blocked. (#65011; thanks Huliiiiii)

Linux

  • Reduced the Linux release binary size by about 23% on x86_64. (#65169)

macOS

  • Improved how Finder groups Zed on macOS by identifying it as a developer tool. (#65130; thanks kennyheard)

Other

  • Added an extension_suggestions setting to turn off extension suggestions. (#65109; thanks audinue)
  • Improved the File Finder to pre-fill its query with text selected in the editor or terminal. Disable this with file_finder.prefill_query_from_selection. (#64946; thanks AbyssWaIker)
  • Improved multi-cursor editing performance. (#64409; thanks Rani367)
  • Improved project search speed and memory usage over misclassified binary files. (#64549)
  • Improved the Extensions view so installed extensions appear even while offline or when the remote list is incomplete. (#64766)
  • Improved the font family pickers in the settings window to render each option in its own font as a preview. (#64199; thanks mizanisoffline)
  • Improved Zed startup time. (#65170)

Bug Fixes

  • Fixed .env files being treated as shell scripts and triggering shellcheck warnings. They now use the Env language. (#64242; thanks pleahmacaka)
  • Fixed a crash when editing a buffer while an inlay-hint request was pending. (#65193)
  • Fixed a crash when syntax parsing requested bytes inside a multibyte character. (#65273)
  • Fixed a ty language server panic when opening a Python file as a single-file project. (#60753; thanks MostlyKIGuess)
  • Fixed ACP session title clearing and prevented programmatic title updates from being saved as user renames. (#65195)
  • Fixed ChatGPT Subscription models disappearing when the model catalog takes longer than 5 seconds to load. (#64925; thanks dualfroz)
  • Fixed Command-clicking a symbol whose name matches its file name doing nothing. (#64892; thanks skmanoj322)
  • Fixed emoji, symbol, and non-Latin fonts rendering as empty boxes on Linux after being used as a font fallback. (#65269)
  • Fixed files created in a directory that was deleted and immediately recreated (for example by a build or test step that clears and repopulates an output directory) not appearing until the workspace was reloaded. (#61372; thanks marcalc)
  • Fixed files in symlinked directories opening in a separate worktree when a language server reports them by their canonical path. (#64895; thanks taburet)
  • Fixed hanging during remote project search. (#65257)
  • Fixed JSON completion ordering when typing the start of a key. (#65139; thanks ragen1337)
  • Fixed language association for file_type path globs with single-file worktrees. (#60307; thanks notpeter)
  • Fixed Markdown Preview ignoring pane-split actions when focused; splitting now opens another preview in the new pane. (#65136; thanks yskim308)
  • Fixed remote paths sometimes reusing a workspace connected to a different host. (#64145; thanks hamishc)
  • Fixed selected context being lost when added before an agent thread finished loading. (#64252; thanks porada)
  • Fixed the Git Panel offering to initialize a repository when a single file was opened as a project, which failed with "Not a directory". (#64948; thanks virajbhartiya)
  • Fixed the minimap thumb and cursor moving inconsistently. (#62087; thanks InfyniteHeap)
  • Fixed worktree creation on a Windows remote from a Unix client. (#63075; thanks lingyaochu)
  • Fixed "Scroll to User Message" so it lands on typed answers to AskUserQuestion. (#64007; thanks seth-wood)
  • Fixed editor: open docs failing to open local documentation when its file URL contained encoded characters. (#64317; thanks xdBronch)
  • Fixed envFile not being loaded when debugging Python projects with debugpy. (#52933; thanks davidalecrim1)
  • Fixed macro_rules! text flickering in the Rust completion menu. (#63185; thanks mTvare6)
  • Fixed shift-click and shift-up/shift-down selection in the Project Panel omitting folded directories or the starting entry. (#65266; thanks tsutoringo)
  • Fixed shift-enter in the JetBrains keymap not selecting the previous search match. (#65129; thanks codello)
  • Fixed an empty frame being drawn next to diff hunks in the Git Panel when the Stage/Restore buttons are disabled. (#65121; thanks kevin-pierik)
  • Fixed auto-closing brackets being inserted inside comments or strings at the end of a file. (#64840; thanks rn23thakur)
  • Fixed bracket colors flickering during agentic edits. (#65157)
  • Fixed copying Markdown code blocks nested inside blockquotes, lists, and callouts. (#64264; thanks julian-bruyers)
  • Fixed debugger error messages showing placeholders like {response_message} instead of the actual error text. (#65006; thanks SATVIKsynopsis)
  • Fixed dropping external files onto a specific directory in a folded path in the Project Panel. (#65259; thanks kevin-pierik)
  • Fixed identical Backspace and Delete icons in the Keymap Editor. (#65037; thanks GautamBytes)
  • Fixed LM Studio models not appearing when a Splash model is installed. (#64847; thanks dio-az)
  • Fixed Markdown Preview and the Agent Panel rendering the text between two --- separators as a YAML metadata block. (#64162; thanks meditationduck)
  • Fixed Markdown task-list checkboxes not appearing or sitting above the first line of text in Markdown Preview. (#53699, #65113; thanks AdamJedl and gitKashish)
  • Fixed missing reasoning options when applying a default model to an ACP agent session. (#65233)
  • Fixed navigation from agent file links opening the wrong file or workspace. (#64748)
  • Fixed selected radio indicator alignment in agent elicitation forms. (#63885; thanks itsfuad)
  • Fixed some inlay hints appearing at the wrong position while editing. (#64791; thanks HuaGu-Dragon)
  • Fixed SSH config hosts sometimes remaining missing or stale in the remote projects picker. (#65246; thanks egecemkirci)
  • Fixed text selection and copying in Thinking previews in agent threads. (#65231)
  • Fixed the Agent Panel's "Awaiting Confirmation" row jumping while its ellipsis animated. (#64952; thanks virajbhartiya)
  • Fixed the debugger panel stack-frame error banner persisting after a successful refresh. (#63977; thanks whitecat1331)
  • Fixed the default value shown for format_on_save in the settings popup. (#65167; thanks skatromb)
  • Fixed the which-key popup and pending keystrokes indicator showing disabled bindings or hiding actions that also start longer shortcuts. (#64935, #64942)
  • Fixed unhelpful tool-call error messages when a model returned an invalid or incomplete response. (#65245)

  •  

v1.23.2

7 Oktober 2026 om 20:27

This week's release includes the ability to preview JSONL and NDJSON files as tables.

Features

AI

  • Added the agent.max_idle_retained_threads setting 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 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

  • Added a folder-specific context menu in the Git Panel's tree view. (#59853; thanks Sondeyy)

Languages

  • Added JSONL and NDJSON support to the tabular data preview. Open previews alongside the source with cmd-k v (macOS) or ctrl-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

  • Added support for terminal.shell in remote sessions. (#61451; thanks quinn)

Other

  • Added alt-/ to show the bindings that can complete a pending multi-keystroke shortcut. (#64803)
  • Added a soft_wrap_indent setting ("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 next and editor: select previous to 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: spawn instead of the task name for bindings that spawn a task. (#64937; thanks frinyvonnick)
  • Fixed the Zed Cloud connection failing with UnknownIssuer behind 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 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 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 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_hover to restore opening on hover. (#48496; thanks pauldipietro)

  •  

Early Stable Update for Desktop

7 Oktober 2026 om 19:18

The Stable channel has been updated to 156.0.8078.12/.13 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

  •  

2026.10: You are here 📍

7 Oktober 2026 om 02:00

Home Assistant 2026.10! 🎉

Last week, Nabu Casa dropped: Big Tech ruined the cloud, so we’re renaming ours. Home Assistant Cloud is on its way to becoming Home Assistant Link. Same service, new name. I love that title, by the way. If you haven’t read the story behind it yet, go have a look, and tell us what you think. The change is planned for the December release, so there is still time. 🏎️

Now, I’ll let you in on a secret: I’m an automation person. Dashboards are lovely and I admire everyone who builds a pretty one, but for me, automationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more] are what make a smart home actually smart. So you can imagine how happy I am with what’s in this release. One of the most powerful features you never thought you’d need has been sitting in Home Assistant for years: trigger IDs. Give your triggersA trigger is the part of an automation that makes the automation start when something specific happens, for example, when the sun sets, a door opens, or a button is pressed. [Learn more] an ID, and one automation can do the job of two, three, or five. It was also tucked away in a menu, you had to invent the IDs yourself, and then remember which was which. Plenty of you never found it, and that’s on us.

Not anymore. Trigger IDs finally get a proper UI: you check the triggers you want in the condition, and Home Assistant takes care of the IDs behind the scenes. And if you like writing your own IDs in YAMLYAML is a human-readable data serialization language. It is used to store and transmit data in a structured format. In Home Assistant, YAML is used for configuration, for example in the configuration.yaml or automations.yaml files. [Learn more], nothing changes. Those keep working exactly as before. That makes it my favorite of this release. 🧠

Don’t get me wrong, the map is absolutely a cool feature too. Last release, every map in Home Assistant broke overnight when our map provider wanted an API key. We moved to OpenStreetMap, and it turns out that swapping out the map opens a lot of doors: a vector map that stays sharp at every zoom level, redesigned markers, and an overview of where everyone has been. You are here. 📍

There’s more: a tidier profile page, a panel for your Modbus connections, connecting your AI in one click, and 15 new integrationsIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more]! 🚀

Enjoy the release!

../Frenck

A huge thank you to all the contributors who made this release possible! And a special shout-out to @googanhiem and @piitaya who helped write these release notes. Also, @grischard, @moryoav, and @RaHehl for putting effort into tweaking its contents. Thanks to them, these release notes are in great shape. ❤️

Cloud becomes Link

In case you missed it, we’re making the move to rename Home Assistant Cloud to Home Assistant Link. Same service, new name.

We’re all pretty annoyed by how Big Tech has been ruining perfectly good smart home devices by making them reliant on the cloud. Ours has never locked anyone in, harvested their data, or turned working devices into e-waste, so a new name was in order. Home Assistant Link is all about being clearer that it does things differently. The change is planned for the December release, so tell us your thoughts before then.

The best link is a fast link. 🏎️ Nabu Casa has been hard at work making remote access even faster across the globe. They recently migrated all of their servers to bare metal and added more servers to boost their coverage of the world. This month, they added a latency checker that pings multiple servers on boot and picks the best connection for you.

A whole new map

Last release, something changed underneath every map in Home Assistant, and we barely mentioned it in the release notes. The map provider we relied on started stamping an “API key required” message across its map images, breaking every map in Home Assistant at once. Instead of hunting for another free tile provider, we switched from pre-rendered map images to vector tiles generated and served by the OpenStreetMap Foundation. Both maps use OpenStreetMap data, but your device now draws the map itself. The new Map tiles integration fetches and caches the tiles through your Home Assistant instance, so your browser does not contact external tile servers directly. Recently viewed parts of the map remain available through a short internet hiccup.

Guillaume Rischard (@grischard), the former chair of the OpenStreetMap Foundation who initiated and led its vector-tile initiative, joined us during the 2026.9 release party.

Swapping out the map underneath opened a lot of doors. This release walks through the first few.

Crisp at every zoom level

The map is drawn entirely on your device, as vectors, instead of being stitched together from pictures. Streets and labels stay sharp at any zoom level, and zooming in and out is smooth. The map also has a dedicated dark style, with colors designed for dark mode. Older devices that can’t render vector maps, like the old tablet on your wall, automatically fall back to the classic map.

Redesigned markers

The markers on the map got a complete redesign. People show up with their picture, zonesZones allow you to specify certain regions on a map. They enable zone presence-detection and can be used in automations. For example, to start the vacuum after you left home or start the heating at home when you leave the office. [Learn more] get a marker with their icon in their own color, and everyone in the same zone shares a single bubble on that zone, instead of a pile of markers stacked on top of each other. Zoom out far enough, and bubbles that would overlap merge into one.

Screenshot of the map with the redesigned markers, showing a person with their picture, two people sharing a bubble on the Home zone, and the Supermarket zone with its icon, next to the overview listing everyone on the People tab.

An overview for the Map dashboard

The Map dashboard now comes with an overview, next to the map on a desktop and as a sheet you pull up on your phone. It has three tabs: People, Devices, and Zones. Select someone to see their recent activity, with each stop colored by the zone they were in. Select a zone to see who’s there. On a phone, the map now also fills the whole screen, edge to edge.

Screenshot of the recent activity of a person in the map overview, with each entry marked in the color of its zone.

The same overview shows up when you put a map card in a panel view on your own dashboard.

Zones on the new map

The zone editor in Settings > Areas, labels & zones now uses the same new map. Your zones are sorted alphabetically, with Home always at the top, and they show the same icons and colors you see on the map.

Screenshot of the zone editor on the new map, with the list of zones sorted alphabetically and Home at the top.

The redesign follows an Open Home Foundation design concept for the Map dashboard.

Thanks to @maartenla, @matthiasdebaat, @bramkragten, and @bgoncal; @grischard for initiating vector maps on the OpenStreetMap side and for assisting us; and Paul Norman (@pnorman) for developing Tilekiln and the tile service. Thanks also to the OpenStreetMap Foundation and the MapLibre, Shortbread, and VersaTiles communities.

Like Home Assistant, OpenStreetMap is built in the open by people like you. Spot something in your neighborhood that’s missing or out of date? You can leave a note or edit the map yourself.

A tidier profile page

Select your name at the bottom of the sidebar, and you land on your User profile. Over the years, that page quietly turned into a bit of a junk drawer. Language, theme, date formats, sidebar order, push notifications, keyboard shortcuts: all stacked in one long General tab, with Security as its only neighbor. Everything was there. You just had to scroll past most of it to find the one thing you came for.

The profile page is now an overview, using the same kind of navigation you already know from Settings. At the top is a card with your account, followed by your Theme, and a short list of sections that each hold a handful of related settings:

  • Appearance: Your default dashboard and the order of your sidebar
  • Localization: Your language, time zone, and how dates, times, and numbers are shown
  • This browser (or This mobile app in the companion app): Notifications, display, and shortcuts for the device you’re using right now
  • Security: Your password, multi-factor authentication, and access tokens

Nothing was taken away. Every setting is still there, just grouped so it’s easier to find. Thanks, @pcan08 and @maartenla!

Screenshot of the redesigned user profile page, showing the account card, the theme picker, and the Appearance, Localization, and This browser sections.

That account card at the top learned a new trick, too. Until now, your own name and picture weren’t actually yours to change. Only an administrator could set them, tucked away in the person settings. Not an administrator, but you wanted a nicer picture of yourself in the sidebar? You had to go ask whoever runs your Home Assistant. A bit odd, for something that is literally your face.

Every user, administrator or not, now has an Edit profile button right next to Log out. Upload and crop a picture, change your name, and save. Your name is used for both your user and the person linked to it, so it’s the same everywhere you show up, from the sidebar to your dashboards and Assist. Your new picture shows up in the sidebar right away.

Screenshot of the Edit profile dialog, with the profile picture, a button to clear it, and a field to change your name.

The best automation feature you never used

Take a look at your automationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more], and chances are you’ll find a few that come in pairs. One turns the hallway light on when motion is detected, the other turns it off again when the motion stops. One sends a notification when the washing machine starts, the other when it’s done. Two automations, doing one job.

Home Assistant has had a way to combine those into one for years. Give each triggerA trigger is the part of an automation that makes the automation start when something specific happens, for example, when the sun sets, a door opens, or a button is pressed. [Learn more] an ID, and use the Triggered by conditionConditions check whether something is true at that moment, for example, whether a door is closed. You can use them in automations and scripts. If a condition is not met, the actions that come after it in the same sequence do not run. At the top level of an automation or script, this stops the automation or script. [Learn more] to do something different depending on which trigger fired. It’s one of the most powerful things you can do in the automation editor, and also one of the best-hidden. The trigger ID field sat in the menu of each trigger. You had to come up with an ID, type it in yourself, and then remember which ID belonged to which trigger when you picked them in the condition. Most people never found it, and honestly, we can’t blame them.

Not anymore. Add a Triggered by condition, and you check the triggers it should match. You see the triggers themselves, not some ID you made up, and each one is numbered by its position in your list, with the same number shown next to the trigger itself. So you always know which one is which. There are no IDs to come up with at all. Home Assistant takes care of those behind the scenes, and cleans up after itself when you remove a trigger.

Screenshot of the automation editor with two numbered triggers, Motion detected and Motion cleared, and a Triggered by condition where the first trigger, Motion detected, is checked.

If you set your trigger IDs yourself in YAMLYAML is a human-readable data serialization language. It is used to store and transmit data in a structured format. In Home Assistant, YAML is used for configuration, for example in the configuration.yaml or automations.yaml files. [Learn more], nothing changes. Those IDs keep working exactly as they did, sharing one ID between several triggers is still fine, and Home Assistant won’t add IDs to your YAML for you. The trigger ID field is gone from the automation editor, because you no longer need it there: to run the same actions for several triggers, check them all in one Triggered by condition.

The editor does keep an eye out for two things, but only in the Triggered by condition. If a condition points to a trigger that no longer exists, it flags it, so you can clear it. And if several triggers share the same ID, it shows a warning with a Fix that gives each trigger its own ID and updates your conditions to match. It’s a suggestion, not a repair, so if sharing an ID is what you want, you can leave it as it is.

This completes an Open Home Foundation roadmap opportunity to make referencing triggers in automations a lot easier. Thanks, @jpbede, @wendevlin, @marcinbauer-ohf, and @nielsrowinbik!

While you’re in the automation editor, you’ll notice your triggersA trigger is the part of an automation that makes the automation start when something specific happens, for example, when the sun sets, a door opens, or a button is pressed. [Learn more], conditionsConditions check whether something is true at that moment, for example, whether a door is closed. You can use them in automations and scripts. If a condition is not met, the actions that come after it in the same sequence do not run. At the top level of an automation or script, this stops the automation or script. [Learn more], and actionsAn action makes Home Assistant do something, for example, turn on a light, send a notification, or activate a scene. Automations and scripts run a list of actions. [Learn more] tell you a bit more at a glance. Each row now shows the details that used to be hidden until you opened it: the threshold a trigger or condition checks for, like “above 10 °C”, how long something needs to stay that way, the offset on a sunrise or sunset, and how long a wait action waits before it gives up. Thanks, @wendevlin and @MindFreeze!

Screenshot of triggers and a condition in the automation editor, each showing its details in the row: 10m before sunset, temperature above 10 °C for 5m, light brightness between 10 and 20%, and illuminance above 50 lx for 10m.

Integrations

Thanks to our community for keeping pace with the new integrationsIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] and improvements to existing ones! You’re all awesome 🥰

New integrations

We welcome the following new integrations in this release:

  • Axle Energy, added by @Herbertmt978
    Bring the grid event schedule of your Axle Energy account into Home Assistant. It tells you whether an upcoming event asks you to import from or export to the grid, and exactly when it starts and ends, so your automationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more] can get your home ready in time.

  • Bitvis Power Hub, added by @MandusBorjesson
    Read real-time electricity data from your smart meter using a Bitvis Power Hub, which plugs into the meter’s HAN port. The Power Hub pushes its measurements, like power, voltage, and current per phase, straight to Home Assistant over your local network. No cloud, no pollingData polling is the process of querying a device or service at regular intervals to check for updates or retrieve data. By defining a custom polling interval, you can control how frequently your system checks for new data, which can help optimize performance and reduce unnecessary network traffic. [Learn more].

  • Gree Infrared, added by @Dr-Blank, launching at 🥈 silver quality
    Control a Gree air conditioner using any infrared transmitter you already have set up in Home Assistant, like an ESPHome device with an infrared LED. Add an infrared receiver, and the climateThe Climate entity allows you to control and monitor HVAC (heating, ventilating, and air conditioning) devices and thermostats. [Learn more] entity follows along when someone uses the physical Gree remote. Gree builds air conditioners for many brands, so units sold as Onida, Sinclair, and others work as well.

  • INDI Allsky, added by @TN-1
    Connect your INDI Allsky camera server, an allsky camera system for astrophotography and keeping an eye on cloud cover. You get the latest capture as a camera, plus sensors for sky quality, the number of stars detected, exposure time, and whether it’s night.

  • KACO Modbus, added by @g4bri3lDev
    Connect a KACO new energy solar inverter directly over your local network using Modbus TCP. It shows what the inverter is producing right now, its lifetime energy counter for the Energy dashboard, and what it is doing, without any cloud account or manufacturer portal involved.

  • my-PV, added by @rrooggiieerr
    Control my-PV devices, like the AC•THOR range and AC ELWA 2, which turn your surplus solar power into hot water. Home Assistant talks to them locally and discovers them on your network automatically.

  • OSRAM Infrared, added by @freeDom-, launching at 🥈 silver quality
    Control OSRAM and LEDVANCE RGB lights that come with a 24-button infrared remote, using an infrared transmitter set up in Home Assistant. With an infrared receiver, the lightA light has a brightness you can control, and optionally color temperature or RGB color control. [Learn more] entity also picks up commands from the physical remote.

  • Persang Infrared, added by @Dr-Blank
    Control a Persang Bluetooth speaker using an infrared transmitter set up in Home Assistant, giving you a media player and buttons for its remote functions.

  • SolarEdge Modbus, added by @frenck, launching at 🏆 platinum quality
    Connect to your SolarEdge solar inverter over your own network, using the Modbus TCP interface built into the inverter. No account, no API key, no cloud. Readings arrive every few seconds instead of every few minutes, and keep arriving when your internet connection is down. You can also change the export limit and how your battery charges.

  • Sunsynk, added by @jamesridgway
    Bring your Sunsynk hybrid solar inverter and battery into Home Assistant using your Sunsynk Connect account. You get sensors for solar production, grid import and export, and your battery. Home Assistant can even discover the Sunsynk data logger on your network.

  • Theben Conexa Smart Meter Gateway, added by @mdluhosch
    Read your meter data locally from a Theben Conexa 3.0 smart meter gateway, using its built-in Home Area Network (HAN) interface. No cloud needed.

  • Threema, added by @LukasQ
    Send end-to-end encrypted messages from your automationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more] to people on Threema, the privacy-focused messenger that doesn’t need a phone number. It uses the Threema Gateway service, and each person you add as a recipient gets their own notify entity.

  • Vitesy, added by @chemelli74
    Connect the Vitesy Shelfy, an air purifier that lives in your refrigerator. See the air quality and temperature inside your fridge, how often the door was opened, and when the filter needs cleaning or replacing. You can even switch the purifier mode, for example to boost it after a grocery run.

  • Willow, added by @PaxPrz
    Keep an eye on the health of your indoor plants with Willow sensors. Temperature, humidity, soil moisture, and light levels come from the Willow cloud into Home Assistant, ready for your dashboards and automationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more]. Your plants can’t tell you they’re thirsty, but now Home Assistant can.

  • Zonneplan, added by @erwindouna
    Get the electricity and gas prices of your Zonneplan contract, a Dutch provider of dynamic energy contracts. Handy for running your appliances when energy is cheapest.

This release also has new virtual integrations. Virtual integrations are stubs that are handled by other (existing) integrations to help with findability. These ones are new:

Noteworthy improvements to existing integrations

It is not just new integrationsIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] that have been added; existing ones keep getting better too. Here are some of the noteworthy improvements this release:

  • Matter added switchesSwitches are things that have two states you can select between, such as turning on or off a socket. [Learn more] to turn the visual and audible alarms of supported leak sensors on or off, like the IKEA KLIPPBOK, and a switch for one-touch locking, so you decide whether a single touch on the keypad of your lock is enough to lock the door. DevicesA device is a model representing a physical or logical unit that contains entities. that measure electrical power now also report the frequency and power factor. Thanks, @wardmatter, @mmmspatz, and @lboue!
  • Tuya supports a lot more devicesA device is a model representing a physical or logical unit that contains entities. this release: two-channel DIN rail energy meters with readings per channel, circuit breakers, EV chargers (with their charging current, charging mode, and session energy), water valves (with water usage and temperature), and the keypad tone and alarm push settings of the Duosmart C30 alarm panel. Three-phase electricity meters now also report reactive power, apparent power, and power factor for each phase. Thanks, @keranm, @tmunzer, @o-borovets, @syl-craft, @ChayoteJarocho, @huangrenwei79, and @epenet!
  • Internet Printing Protocol (IPP) added page counters, so you can keep track of how many pages, impressions, and sheets your printer has gone through, split into color and black and white on printers that report it. Thanks, @brianegge!
  • ESPHome devicesA device is a model representing a physical or logical unit that contains entities. can now open the connection to Home Assistant themselves, so they work even when Home Assistant can’t reach them directly. Turn on the outgoing_connection option on your ESPHome device, and Home Assistant takes it from there, with the same encryption as always. Thanks, @bdraco!
  • HomeKit Bridge can now show your valve entitiesAn entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. [Learn more] in the Home app as a faucet, shower head, or sprinkler. How long a valve runs can now also come from any number entity, not just a number helperA helper is a virtual entity you create inside Home Assistant. It is not backed by a physical device. Helpers store values, track state, or do calculations that your automations and dashboards need. [Learn more]. Thanks, @louwii17!
  • Philips Hue added a switch to turn each MotionAware zone on or off, just like you can in the Hue app. Rooms and zones also gained a sceneScenes capture the states you want certain entities to be. For example, a scene can specify that light A should be turned on and light B should be bright red. [Learn more] select, showing which scene (or smart scene) is currently active, and letting you pick another one. Thanks, @marcelveldt and @sliekens!
  • Reolink can now control the pan and tilt lens of cameras that combine multiple lenses in one device, when connected to a Reolink NVR or Home Hub. Thanks, @starkillerOG!
  • Music Assistant announcements can now speak a message, not only play an audio file. The announcement action takes a message and a “text-to-speech”TTS (text-to-speech) allows Home Assistant to talk to you. [Learn more] entity to speak it, while keeping the pre-announcement chime and announcement volume that tts.speak doesn’t offer. The AI search tool can now also search inside artists, albums, and playlists. Thanks, @marcelveldt and @balloob!
  • Roborock wet and dry vacuums now update in real time, so docking or starting a cleaning shows up in Home Assistant right away. The Roborock Q10 can now also clean specific zones, drive to a spot you pick, and report where it is. Thanks, @piitaya and @hmmbob!
  • Z-Wave added three new conditionsConditions check whether something is true at that moment, for example, whether a door is closed. You can use them in automations and scripts. If a condition is not met, the actions that come after it in the same sequence do not run. At the top level of an automation or script, this stops the automation or script. [Learn more] to the automation editor, with proper fields to fill in: check a device’s node status, the value of a configuration parameter, or any other Z-Wave value. Z-Wave triggersA trigger is the part of an automation that makes the automation start when something specific happens, for example, when the sun sets, a door opens, or a button is pressed. [Learn more] got the same treatment. Thanks, @raman325!
  • UniFi Network now reports the battery level and runtime of your UniFi UPS, along with its output power, current, voltage, and power factor. Thanks, @jimstrang!
  • Broadlink now supports the RM5 Plus, which used to fail with a “device not supported” error. Thanks, @DAB-LABS!
  • UniFi Protect now supports the key fob, with an event entityAn event entity represents a momentary occurrence without a lasting state, for example, when you press a doorbell or a button on a remote control. Instead of a state such as on or off, the event entity keeps track of when the last event was detected and its event type, such as a single press or a long press. [Learn more] that fires on every button press, and shows each relay input as its own binary sensorA binary sensor is an entity that reports one of two mutually exclusive states, on or off. The device class determines how those states are labeled in the UI. For example, open/closed for a door or detected/clear for motion. [Learn more]. The API key only mode now also handles motion and smart detections, smart sensors, sirens, relays, and several camera and floodlight settings. Thanks, @sbesh91, @igoraugustynski, and @RaHehl!
  • OpenAI added support for the GPT-6 Astra and GPT-Image-2.5 models. GPT-Image-2.5 Flare is now the default for generating images with AI Task. Thanks, @Shulyaka!
  • SwitchBot Bluetooth added support for the Lock Ultra Max, the Universal Remote, and the RGBICWW Light Bars, and lets you set how fast your SwitchBot curtains move. Thanks, @Onero-testdev and @joostlek!
  • SwitchBot Cloud added support for the Lock Ultra Max. Thanks, @XiaoLing-git!
  • LIFX now supports LIFX lights that connect over ThreadThread is a low-power mesh networking standard that is specifically designed for smart home applications. It is a protocol that defines how devices communicate. [Learn more], and the signal strength sensor works for those lights too. Thanks, @Djelibeybi!
  • Proxmox VE added “update entities”An update entity is an entity that indicates if an update is available for a device or service. [Learn more] for your Proxmox nodes, showing when updates are available and how many Proxmox and other packages are waiting. Installing them from Home Assistant is not possible yet. Thanks, @CoMPaTech!
  • LinkPlay speakers that follow another speaker in a multiroom group now show the title, artist, album, and album art of what’s playing. Each speaker keeps its own volume. Thanks, @MagicMicky!
  • Apple iCloud brings your iCloud calendars and Reminders into Home Assistant. Each calendar shows up as a calendar entityA calendar entity represents a schedule of events coming from a local or external calendar source. It can be used to trigger automations based on the start or end of an event, react to offsets (like 15 minutes before), or retrieve event details through services. [Learn more], and each Reminders list as a to-do list, where you can add, complete, and remove items that sync right back to your Apple devices. Thanks, @FezVrasta!
  • Hikvision added “event entities”An event entity represents a momentary occurrence without a lasting state, for example, when you press a doorbell or a button on a remote control. Instead of a state such as on or off, the event entity keeps track of when the last event was detected and its event type, such as a single press or a long press. [Learn more] that tell you what triggered a smart event: a human, a vehicle, or a pet. Great for getting notified about people at your gate, while ignoring passing traffic. Thanks, @ptarjan!
  • Opower now uses the import and export readings from your meter itself for your grid statistics. Before, grid import was worked out from your net usage, which undercounted it for homes with solar panels, and could even show no import at all on a sunny day. Thanks, @tronikos!
  • TP-Link Omada now shows your Omada controller as a deviceA device is a model representing a physical or logical unit that contains entities., with its status and an “update entity”An update entity is an entity that indicates if an update is available for a device or service. [Learn more] for its firmware. Thanks, @rubempoli!
  • EnergyZero can now use quarter-hourly electricity prices, and added all-in electricity prices next to the market prices. Thanks, @klaasnicolaas!
  • Bosch SHC grew a lot this release. Micromodule shutters, awnings, and blinds now show up as coversCovers are devices such as blinds, garage doors, etc that can be opened and closed and optionally set to a specific position. [Learn more], and there are new switches for child locks, the alarm bypass of door and window contacts, the silent mode of thermostats, the intrusion alarm of the Smoke Detector II, and the settings of the Motion Detector 2, Door/Window Contact II Plus, Micromodule Relay, and Camera Eyes. A new sensor counts the open doors and windows in your home, thermostats show their valve position, and motion detectors now fire an event for every motion. Thanks, @mosandlt!
  • Midea added water heaters, a lock switch, a pump switch for dehumidifiers, a sensor for when the water pump of an air conditioner is running, and salt, AI mode, time remaining, and door warning entities for the appliances that support them. Thanks, @chemelli74, @rokam, @mattrossman, and @peterdey!
  • Teslemetry can now control things locally: your Powerwall over your own network, and your vehicle over Bluetooth. Commands try the local route first and fall back to the cloud, so they are faster, and vehicle commands even work when the car has no connection. Thanks, @Bre77!
  • Peblar chargers can now install firmware updates from Home Assistant, and you can manage the RFID cards and the autocharge vehicles allowed to charge, and authorize a charge session, all from actionsAn action makes Home Assistant do something, for example, turn on a light, send a notification, or activate a scene. Automations and scripts run a list of actions. [Learn more]. Chargers with a buzzer or status light also get selects for the buzzer volume and LED brightness. Thanks, @syphernl and @frenck!
  • MELCloud Home added the outdoor temperature and a switch to put your unit in standby. Thanks, @erwindouna!
  • Universal Devices ISY/IoX added “event entities”An event entity represents a momentary occurrence without a lasting state, for example, when you press a doorbell or a button on a remote control. Instead of a state such as on or off, the event entity keeps track of when the last event was detected and its event type, such as a single press or a long press. [Learn more] for Insteon buttons and keypads, so you can automate on a press, a double press, or a long press. Thanks, @shbatm!
  • LG Infrared air conditioners gained swing modes, switches for the ion generator and auto clean, a select for the energy limit, and buttons for features like Jet mode and Eco mode. Thanks, @Dr-Blank!
  • Samsung Infrared now supports air conditioners. Thanks, @elax46!
  • Weheat added the air outlet temperature, domestic hot water target and control method, the electricity used by the indoor unit, and what your heat pump is doing while it cools. Thanks, @barryvdh!
  • LED Infrared added support for generic 10-key LED candle remotes. Thanks, @tr4nt0r!
  • Collection image gained actionsAn action makes Home Assistant do something, for example, turn on a light, send a notification, or activate a scene. Automations and scripts run a list of actions. [Learn more] to jump to the first, last, next, or previous image in the folder, alongside picking a random one. Thanks, @karwosts!
  • Homevolt added a select to change the battery mode, and controls for the power setpoint and grid import and export limits. Thanks, @Danielhiversen!

Integration quality scale achievements

One thing we are incredibly proud of in Home Assistant is our integration quality scale. This scale helps us and our contributors to ensure integrations are of high quality, maintainable, and provide the best possible user experience.

This release, we celebrate several integrationsIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] that have improved their quality scale:

This is a huge achievement for these integrations and their maintainers. The effort and dedication required to reach these quality levels is significant, as it involves extensive testing, documentation, error handling, and often complete rewrites of parts of the integration.

A big thank you to all the contributors involved! 👏

Now available to set up from the UI

While most integrationsIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] can be set up directly from the Home Assistant user interface, some were only available using YAML configuration. We keep moving more integrations to the UI, making them more accessible for everyone to set up and use.

The following integrations are now available via the Home Assistant UI:

Farewell to the following

Time for a little cleaning, and no, we did not wait for spring! The following “integrations”Integrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] are no longer available as of this release:

  • Dublin Bus has been removed. It relied on the Real-Time Passenger Information API, which the National Transport Authority shut down in September 2020, so it has not worked since. For scheduled departures, the GTFS integration can use the timetable data published by Transport for Ireland.
  • Etherscan has been removed. It relied on version 1 of the Etherscan API, which has been shut down, so its sensors only showed False instead of a balance. To keep tracking a wallet balance, you can use the RESTful sensor with the Etherscan V2 API and your own free API key.
  • Melnor RainCloud has been removed. Melnor discontinued the original RainCloud WiFi Timer in April 2026, and its cloud service no longer responds.
  • Orange and Rockland Utility (ORU) has been removed. The endpoint it relied on stopped returning meter data years ago. Orange and Rockland customers can use the Opower integration instead.
  • Sigfox has been removed. It relied on version 1 of the Sigfox backend API, which Sigfox retired.
  • SolarEdge Local has been removed. It relied on a local web API that SolarEdge disabled in inverter firmware updates starting in 2020. Use the SolarEdge integration, or the new SolarEdge Modbus integration if you want to keep things local.
  • Travis-CI has been removed. It relied on the travis-ci.org API, which Travis CI shut down in June 2021.
  • Zestimate has been removed. Zillow retired the API it relied on, and its replacement is aimed at commercial use, so the integration could not simply be updated.

If you still have any of these in your YAMLYAML is a human-readable data serialization language. It is used to store and transmit data in a structured format. In Home Assistant, YAML is used for configuration, for example in the configuration.yaml or automations.yaml files. [Learn more] configuration, you can remove them.

Other noteworthy changes

There is even more packed into this release. Here are some of the other changes worth a mention:

  • The Home dashboard now shows active alerts too. The alerts you set up for the Security dashboard last release, like a door left open or a smoke detector going off, now also show up right on your Home dashboard, so you don’t miss them. Thanks, @timmo001!
  • Tile cards gained a slider feature for input selects and select entities, so you can slide between options, in the same style as the toggle for input booleans. This was @Jump-333’s very first contribution to Home Assistant. Thanks, and welcome!
  • The Energy dashboard now shows the discharge of each battery separately in the energy usage graph, just like it already did for charging. Thanks, @MindFreeze!
  • Calendar cards can show a button to add an event again, so you can put something on the calendar right from your dashboard, and you pick where the button sits. Thanks, @Phil0L!
  • Lawn mower entities gained a stop action and an idle state, so you can cancel a mower’s current task instead of only pausing it or sending it home. The automation editor has a matching trigger and condition, too. MQTT lawn mowers support it as well, and Husqvarna Automower and Husqvarna Automower BLE mowers already report when they are idle. Thanks, @piitaya, @Thomas55555, and @alistair23!
  • Binary sensor has a new glass break device class. Glass break sensors are treated as security sensors, so they show up on the Security dashboard and in your home security summary. HomematicIP Cloud, SimpliSafe, Z-Wave, and Hive already use it. Thanks, @catellie!
  • Template got two nice additions this release. Thanks, @Petro31!
    • Template entities can now be climate entities, so you can build your own thermostat from other entities. Think of a heat pump or air conditioner that an integration only exposes as a loose collection of switches, sensors, and numbers. Create one as a helperA helper is a virtual entity you create inside Home Assistant. It is not backed by a physical device. Helpers store values, track state, or do calculations that your automations and dashboards need. [Learn more] from the UI, pick templatesA template is an automation definition that can include variables for the action or data from the trigger values. This allows automations to generate dynamic actions. [Learn more] for the current temperature, target temperature, and HVAC mode, and choose the actions that run when you change them. In YAMLYAML is a human-readable data serialization language. It is used to store and transmit data in a structured format. In Home Assistant, YAML is used for configuration, for example in the configuration.yaml or automations.yaml files. [Learn more], you can take it further with fan, preset, and swing modes, and humidity. The template climate documentation has all the details.
    • Binary sensor template helpers now let you set a delay before they turn on or off, right from the UI. Until now, that was only possible in YAMLYAML is a human-readable data serialization language. It is used to store and transmit data in a structured format. In Home Assistant, YAML is used for configuration, for example in the configuration.yaml or automations.yaml files. [Learn more].
  • Templates gained a timedelta_string function, which turns a duration into readable text like “1 hour 30 minutes”, the same way time_since and time_until do. Thanks, @cnotin!
  • Automation traces got a fresh look that matches the automation editor, with the real icon for each triggerA trigger is the part of an automation that makes the automation start when something specific happens, for example, when the sun sets, a door opens, or a button is pressed. [Learn more], conditionConditions check whether something is true at that moment, for example, whether a door is closed. You can use them in automations and scripts. If a condition is not met, the actions that come after it in the same sequence do not run. At the top level of an automation or script, this stops the automation or script. [Learn more], and actionAn action makes Home Assistant do something, for example, turn on a light, send a notification, or activate a scene. Automations and scripts run a list of actions. [Learn more], and a clear view of branches that didn’t finish. Drag the divider to give the graph or the details more room, the step buttons now float on top of the graph, and screen readers describe each step. Thanks, @jpbede!
  • The Z-Wave network map can now show the real mesh. Turn on the new neighbors toggle, and it draws the connections between your devices, not just the routes they use. It’s off by default, because large networks get busy fast. Thanks, @MindFreeze!
  • Calendar events from CalDAV, Local calendar, and Google Calendar now include whether they are confirmed or tentative, so your automationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more] can tell the difference. Remote calendar now also leaves out canceled events. Thanks, @1358!
  • Climate fan modes can now be set by voice, through a conversation agent, like “set the fan mode to auto”. Thanks, @synesthesiam!
  • Units keep growing: atmospheres (atm) for pressure, and therms (thm) for energy, the unit many US utilities bill natural gas in. Weather entities can now also report pressure in kilopascals (kPa), which most weather services in Canada use. Thanks, @Bre77, @virtitnerd, and @RussellAult!
  • Password managers, including the one built into Firefox, can fill in your details on the Home Assistant login page again. Thanks, @MindFreeze!
  • On phones with a notch or rounded corners, tables, filter bars, settings cards, headers, and pop-up messages now reach the edges of the screen, while everything you read or tap stays clear of the cutout. Thanks, @bgoncal!
  • Tables, like the ones listing your devicesA device is a model representing a physical or logical unit that contains entities. and entitiesAn entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. [Learn more], now show placeholder rows while they load. And if something fails to load, you now see an error, instead of an empty list that looks like you have nothing set up. Thanks, @timmo001!
  • YAML configuration errors now suggest what you probably meant. Mistype command_topci, and the error asks: did you mean command_topic? Error messages also show the path to the file relative to your configuration folder, so they are easier to read. Thanks, @frenck and @emontnemery!

Show a card only when it matters

Dashboards can show or hide a card, badge, or section based on conditionsConditions check whether something is true at that moment, for example, whether a door is closed. You can use them in automations and scripts. If a condition is not met, the actions that come after it in the same sequence do not run. At the top level of an automation or script, this stops the automation or script. [Learn more]: only on a phone, only for a certain user, only when the washing machine is running. Those conditions were always a smaller set than the ones you know from automations.

This release, the Visibility tab offers the same conditions as the automation editor, including Template, Sun, Zone, and Device, and the conditions integrations bring along. They sit right next to the ones that only make sense on a dashboard, like Screen and User, and you can mix them freely. Show the garden lights card only after sunset, and only on a phone. Each row now also describes what it checks, just like in the automation editor, and you can drag the rows into a different order. Your existing visibility conditions keep working as they are.

And no more guessing why a card is hiding. The top of the Visibility tab tells you whether the card is visible right now, and each condition shows whether it currently passes. Thanks, @MindFreeze and @timmo001!

Screenshot of the Visibility tab of a tile card, showing that the card is currently visible because all conditions are met, with a check mark on each condition: a template, a zone, a device, and the sun.

A panel for your Modbus connections

Last release, we started modernizing Modbus: integrations that already know how your device talks Modbus, so you pick your device in the UI instead of writing register maps by hand. Those integrations share a single connection to each device, which is great for devices that only accept a few connections at once. It also meant there was no single place to see which integrations were talking to what.

The new Modbus panel under Settings > Connectivity fixes that. It lists every Modbus connection Home Assistant has, serial ports and network gateways alike, along with the devicesA device is a model representing a physical or logical unit that contains entities. on it and the integrations using them. Connections set up in YAMLYAML is a human-readable data serialization language. It is used to store and transmit data in a structured format. In Home Assistant, YAML is used for configuration, for example in the configuration.yaml or automations.yaml files. [Learn more] show up here too. A connection that’s closed isn’t a problem, by the way. It opens again the next time an integration needs it. The Serial panel links straight to it for ports that carry Modbus. Thanks, @balloob!

Screenshot of the Modbus panel, listing a serial port shared by a Flexit and a SolarEdge device, and a network connection to a Fronius inverter.

The list of integrations built this way keeps growing. This release adds two new ones: SolarEdge Modbus, launching straight at platinum, and KACO Modbus, thanks to @g4bri3lDev. STIEBEL ELTRON now shares its connection through the Modbus integration as well, and Sofar climbed all the way to platinum, thanks to @darkrain-nl.

Connect your AI in one click

Home Assistant can act as a Model Context Protocol server, which lets AI apps like Claude, ChatGPT, or Cursor talk to your home. Getting there was a bit of a hunt, though: add the integrationIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more], pick which parts of Home Assistant to expose, and then figure out which URL to hand to your AI app.

The AI tasks page under Settings > System is now called AI, and it gained a Model Context Protocol card. Turn the server on in a single click, and the card lists the URLs to paste into your AI app, each with a button to copy it. New setups expose everything Home Assistant has to offer, including anything added later, and only allow administrator accounts to connect. You can change both whenever you like, without removing and re-adding the integration.

Screenshot of the AI settings page with the new Model Context Protocol card, listing the URLs to add to your AI agent, each with a button to copy it.

It also works the other way around. Apps that run their own MCP server are now discovered automatically by the Model Context Protocol integration, so connecting Home Assistant to them only takes a confirmation.

And your AI got a lot better at finding music. Ask it to play something, and instead of blindly playing the first search result, it now gets a list of results and picks the best match. It can even search inside an artist, album, or playlist to find that one specific song. Search itself improved along the way: artists, albums, and playlists from Music Assistant can now be searched inside, just like results from Jellyfin and Squeezebox, local media now finds matching folders too, and Radio Browser puts the 100 most popular stations first.

Thanks, @balloob!

If your home runs on KNX, your AI can now dig into that too. The KNX integration brings its own set of AI tools, which you can hand to your conversation agent, or to your AI app through the Model Context Protocol server. Ask about the group addresses, devices, and functions in your ETS project, go through the history of telegrams on your bus, or decode a value you don’t recognize. It can even read and write values on the bus directly. Thanks, @martinhoefling!

Name an entity after its device

Some entitiesAn entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. [Learn more] are the whole point of their deviceA device is a model representing a physical or logical unit that contains entities.. Calling the smoke sensor of a smoke detector “Smoke detector Smoke detected” doesn’t help anyone. Integrations already give their main entity the name of the device, but if you wanted to do the same for another entity, there was no clean way to do it. If you cleared its name, it jumped right back to the name the integration gave it.

The entity settings now have a Use device name switch. Turn it on, and the entity goes by the name of its device. The switch also shows you what that device name is, with a link to rename the device if you’d like. Turn it off, and you’re back to the entity’s own name, filled in with the default from the integration. If you change your mind, a restore button takes you back to the default. Thanks, @piitaya and @matthiasdebaat!

Screenshot of the entity settings for a smoke detector, with the Use device name switch turned on and the name field hidden.

Timers, one tap away

Timer helpersA helper is a virtual entity you create inside Home Assistant. It is not backed by a physical device. Helpers store values, track state, or do calculations that your automations and dashboards need. [Learn more] are now a lot easier to control from your dashboard. Tile cards have two new features for them: Timer actions adds buttons to start, pause, and cancel a timer (and optionally finish it), and Timer presets starts a timer with a preset duration in a single tap. Presets show up as a row of buttons, or as a dropdown, handy for a longer list. You manage the presets from the timer itself: open its more info dialog and select Edit presets from the menu.

That more info dialog got a fresh look too, and when a timer finishes, you’ll see a small animation. Thanks, @maartenla!

Screenshot of two tile cards for a timer, one with the timer actions buttons to start, pause, and cancel it, and one with a row of preset buttons for 2, 5, and 10 minutes.

Patch releases

We will also release patch releases for Home Assistant 2026.10 in October. These patch releases only contain bug fixes. Our goal is to release a patch release once a week, aiming for Friday.

2026.10.1 - October 10

2026.10.2 - October 16

Need help? Join the community

Home Assistant has a great community of users who are all more than willing to help each other out. So, join us!

Our very active Discord chat server is an excellent place to be, and don’t forget to join our amazing forums.

Found a bug or issue? Please report it in our issue tracker to get it fixed! Or check our help page for guidance on more places you can go.

Are you more into email? Sign up for the Open Home Foundation Newsletter to get the latest news about features, things happening in our community, and other projects that support the Open Home straight into your inbox.

Backward-incompatible changes

We do our best to avoid making changes to existing functionality that might unexpectedly impact your Home Assistant installation. Unfortunately, sometimes it is inevitable.

We always make sure to document these changes to make the transition as easy as possible for you. This release has the following backward-incompatible changes:

Authentication

The deprecated legacy mode of the Home Assistant authentication provider has been removed. Usernames are now always handled in their normalized form: lowercase, and without spaces at the start or end. If Home Assistant showed you a repair about usernames that are not normalized, change those usernames to match.

(@gjohansson-ST - #175613) (Authentication documentation)

easyEnergy

The hours_priced_equal_or_lower and hours_priced_equal_or_higher sensors are now named Periods priced equal or lower and Periods priced equal or higher, and no longer have h as their unit of measurement. Their values count price periods, not hours.

If you have “templates”A template is an automation definition that can include variables for the action or data from the trigger values. This allows automations to generate dynamic actions. [Learn more] or dashboard cards that rely on the unit of these sensors, update them to handle a count without a unit. The values, entity IDs, and unique IDs are unchanged, so automationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more] that only compare the numbers need no changes.

(@klaasnicolaas - #181431) (easyEnergy documentation)

EnergyFlip

EnergyFlip shut down the API version the integration used, so the integration has moved to the new version. The new API no longer provides the additional electricity measurements, so only the current power sensor remains for electricity.

(@DieEneSchrodinger - #179723) (EnergyFlip documentation)

EnergyZero

The hours_priced_equal_or_lower electricity sensor is now named Periods priced equal or lower, and no longer has h as its unit of measurement. Its value counts price periods, not hours.

If you have “templates”A template is an automation definition that can include variables for the action or data from the trigger values. This allows automations to generate dynamic actions. [Learn more] or dashboard cards that rely on the unit of this sensor, update them to handle a count without a unit. The value, entity ID, and unique ID are unchanged, so automationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more] that only compare the number need no changes.

(@klaasnicolaas - #181492) (EnergyZero documentation)

Google Sheets

Reading an empty worksheet now returns {"range": [[]]} instead of {"range": []}. If you have automationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more], scriptsA script is a saved list of steps that runs when you start it, for example, from a dashboard, with Assist, or from an automation. Unlike an automation, a script has no triggers, so it doesn’t start by itself. [Learn more], or “templates”A template is an automation definition that can include variables for the action or data from the trigger values. This allows automations to generate dynamic actions. [Learn more] that check for an empty worksheet, update them to match.

(@JamieMagee - #181692) (Google Sheets documentation)

Google Wifi

The uptime sensor is deprecated and will be removed in a future release. Use the new last restart sensor instead.

(@EReaso - #177525) (Google Wifi documentation)

IoTaWatt

Reactive power sensors now use the reactive power device class, which changes their unit of measurement from VAR to var. You have these sensors if an output on your IoTaWatt is configured with the unit VAR.

If such a sensor has recorded long-term statisticsHome Assistant keeps statistics for sensors that have a state class, such as measurement, total, or total increasing. Every 5 minutes, it saves short-term statistics, which are deleted after 10 days by default. Every hour, it saves long-term statistics, which are never deleted automatically. The Energy dashboard and statistics cards use them. [Learn more], Home Assistant creates a repair about the changed unit after the update. Pick the offered option to update the statistics to the new unit. No data is lost. In return, these sensors are now shown as reactive power, and you can display them in mvar, var, or kvar.

(@agners - #180913) (IoTaWatt documentation)

Libre Hardware Monitor

Libre Hardware Monitor versions older than 0.9.5 are no longer supported. If you run an older version, update Libre Hardware Monitor to keep using the integration.

(@Sab44 - #181928) (Libre Hardware Monitor documentation)

Linode and Tank Utility

The Linode and Tank Utility integrationsIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] have been disabled and no longer start.

Both depend on Python libraries that have not been maintained for years (the Linode one was last updated in 2018, the Tank Utility one in 2023) and no longer work with current Python packaging tools. Keeping them running meant holding back those tools for every other integration, so they have been switched off instead.

If you use either integration, you can remove it from your configuration. If the underlying libraries are updated, or replaced with maintained alternatives, the integrations can be activated again. Community contributions to make this happen are very welcome.

(@frenck - #182842) (Linode documentation) (Tank Utility documentation)

Mealie

Mealie 3.2 or newer is now required. Version 3.2 was released in September 2025, and the Mealie appApps are additional standalone third-party software packages that can be installed on Home Assistant OS. [Learn more] and official container are already well past it, so most of you don’t need to do anything. If your Mealie server runs an older version, update it before you update Home Assistant.

(@andrew-codechimp - #180609) (Mealie documentation)

MQTT

The mqtt.publish and mqtt.dump actions now require an administrator account, just like mqtt.reload already did.

AutomationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more], scriptsA script is a saved list of steps that runs when you start it, for example, from a dashboard, with Assist, or from an automation. Unlike an automation, a script has no triggers, so it doesn’t start by itself. [Learn more], and scenesScenes capture the states you want certain entities to be. For example, a scene can specify that light A should be turned on and light B should be bright red. [Learn more] that publish on their own are not affected, because they run without a user context. What changes is a call a non-admin user makes themselves: from a dashboard button, from the developer tools, or by starting a script or automation by hand. Those now fail with “Unauthorized”. If a non-admin user needs to be able to publish, let the automation run on its own trigger instead of having that user start it.

(@frenck - #182045) (MQTT documentation)

OpenEVSE

The Charging status sensor now reports a fixed set of states in snake_case, such as charging, not_connected, and gfci_self_test_failure, instead of the raw values from the charger, such as Charging or not connected. If you have automationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more] or scriptsA script is a saved list of steps that runs when you start it, for example, from a dashboard, with Assist, or from an automation. Unlike an automation, a script has no triggers, so it doesn’t start by itself. [Learn more] that check for the old values, update them to match the new ones.

(@firstof9 - #180329) (OpenEVSE documentation)

Proxmox VE

The Uptime sensor of nodes, virtual machines, and containers now shows a timestamp of when it started, instead of the time since it started in seconds. If you have automationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more], scriptsA script is a saved list of steps that runs when you start it, for example, from a dashboard, with Assist, or from an automation. Unlike an automation, a script has no triggers, so it doesn’t start by itself. [Learn more], or “templates”A template is an automation definition that can include variables for the action or data from the trigger values. This allows automations to generate dynamic actions. [Learn more] that use the number of seconds, update them to work with the timestamp.

(@erwindouna - #169704) (Proxmox VE documentation)

Rejseplanen

Rejseplanen now uses version 2.0 of the Rejseplanen API, which requires an API key. You can apply for an API key with Rejseplanen Labs. The integration is now set up from the UI instead of YAMLYAML is a human-readable data serialization language. It is used to store and transmit data in a structured format. In Home Assistant, YAML is used for configuration, for example in the configuration.yaml or automations.yaml files. [Learn more].

All extra attributes have been removed from the sensors. If you have “templates”A template is an automation definition that can include variables for the action or data from the trigger values. This allows automations to generate dynamic actions. [Learn more] or dashboard cards that use them, you need to update them.

(@Jawar19 - #152200) (Rejseplanen documentation)

Sofar

Sofar inverters that report no energy meter no longer get these six energy sensors: Load consumption today, Load consumption total, Import energy today, Import energy total, Export energy today, and Export energy total.

They never held real readings on those inverters. The inverter itself marks those values as invalid, and on a PV-only inverter, Load consumption total simply repeated the solar generation total. If you used these sensors on your Energy dashboard, or in “templates”A template is an automation definition that can include variables for the action or data from the trigger values. This allows automations to generate dynamic actions. [Learn more] or automationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more], remove them. Hybrid inverters and PV inverters with a meter keep all six.

(@darkrain-nl - #181729) (Sofar documentation)

State conditions

State conditionsConditions check whether something is true at that moment, for example, whether a door is closed. You can use them in automations and scripts. If a condition is not met, the actions that come after it in the same sequence do not run. At the top level of an automation or script, this stops the automation or script. [Learn more] that combine the for option with a state attribute, a list of states, or a state taken from another entity now fail validation. These combinations don’t support a duration, so you get an error when the configuration is checked, instead of a condition that doesn’t do what you expect.

(@emontnemery - #174083)

Synology DSM

The synology_dsm.reboot and synology_dsm.shutdown actions now require an administrator account.

AutomationsAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more] and scriptsA script is a saved list of steps that runs when you start it, for example, from a dashboard, with Assist, or from an automation. Unlike an automation, a script has no triggers, so it doesn’t start by itself. [Learn more] that run on their own triggers are not affected, because they run without a user context. What changes is a call a non-admin user makes themselves: from a dashboard button, from the developer tools, or by starting a script or automation by hand. Those now fail with “Unauthorized”. If a non-admin user needs to be able to restart or shut down the NAS, let the automation run on its own trigger instead of having that user start it.

(@frenck - #182050) (Synology DSM documentation)

Telegram bot

When you pass a directory_path to the telegram_bot.download_file action, that directory now has to be in your allowlist_external_dirs. If the action starts failing, add the directory to your configuration:

homeassistant:
  allowlist_external_dirs:
    - /media/telegram

If you leave out directory_path, nothing changes. Files are still saved to the telegram_bot folder in your configuration directory, without an allowlist entry.

(@frenck - #182460) (Telegram bot documentation)

Teslemetry

Vehicles that stream their data no longer get the entitiesAn entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. [Learn more] that can only be updated by pollingData polling is the process of querying a device or service at regular intervals to check for updates or retrieve data. By defining a custom polling interval, you can control how frequently your system checks for new data, which can help optimize performance and reduce unnecessary network traffic. [Learn more]. Updating those required a paid API call, which most people did not expect.

(@Bre77 - #181351) (Teslemetry documentation)

UniFi Network

You can no longer reconfigure the UniFi Network integrationIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] by adding the same site again through Add integration. Use the dedicated Reconfigure option of the integration instead.

(@robinsiep - #182201) (UniFi Network documentation)

UpCloud

The option to configure the pollingData polling is the process of querying a device or service at regular intervals to check for updates or retrieve data. By defining a custom polling interval, you can control how frequently your system checks for new data, which can help optimize performance and reduce unnecessary network traffic. [Learn more] interval has been removed from UpCloud. The integration now always polls every 60 seconds. If you had set a longer interval, this means more API calls: a 300 second interval, for example, becomes five times as many calls.

If you need a different update frequency, you can set your own polling interval.

(@KingLizard1020 - #181327) (UpCloud documentation)

Xbox

The Subscribed to Xbox Game Pass binary sensorA binary sensor is an entity that reports one of two mutually exclusive states, on or off. The device class determines how those states are labeled in the UI. For example, open/closed for a door or detected/clear for motion. [Learn more] has been removed, because it never worked. The Xbox API always reported false, whether you or your friends were subscribed to Game Pass or not.

(@tr4nt0r - #182734) (Xbox documentation)

If you are a custom integration developer and want to learn about changes and new features available for your integration: Be sure to follow our developer blog. The following changes are the most notable for this release:

All changes

Of course, there is a lot more in this release. You can find a list of all changes made here: Full changelog for Home Assistant Core 2026.10.

  •  

Coaches: Tourist Jobs

Door: Petr
7 Oktober 2026 om 17:00

In one of our previous blogs, we gave you a closer look at the Quick Jobs and Contract Jobs you will be able to take on with Coaches when the DLC releases. But these won't be the only opportunities available to you. Today, we'd like to tell you more about Tourist Jobs!

Tourist Jobs will offer a different gameplay experience from Quick Jobs and Contract Jobs, as well as from the jobs you are used to doing with your truck. As the name suggests, you will step into the role of a bus driver, taking passengers who are enjoying their day off on trips from a bus station to an interesting landmark.


These destinations may include beautiful natural scenery, city centers where passengers can enjoy some sightseeing, or occasionally even industrial depots where they can take a guided tour. Of course, some of these destinations often have their own opening hours, and the arrival times take this into account.

Tourist Jobs are distinguished by whether the landmarks they visit are locally or globally known, which in turn determines the length of the journey. When you arrive at the final destination, you will be able to enjoy a scenic viewpoint accompanied by a short cutscene, giving you a taste of what your passengers came to see and providing even more incentive to discover these places for yourself.

Many of these viewpoints will also feature a short description of the location, allowing you to learn something new about the place you have just visited.

Once you have given your passengers some time to take in the sights, don't forget to bring them safely back home! Compared to Contract Jobs, Tourist Jobs offer a more leisurely schedule. This gives you more freedom to take your time, enjoy the scenery, and make the journey itself part of the experience.

Looking forward to being part of the journey and experiencing a new gameplay perspective when Coaches is released? Then don't forget to add the Coaches DLC to your Steam wishlist! 

Also, make sure to keep track of future updates by following us on X/Twitter, Facebook, Instagram, Bluesky, and YouTube, or sign up for our newsletter to stay in touch with the latest news. Until next time, safe travels!

  •  
❌