โŒ

Lees weergave

v0.8.15

What's Changed

  • feat(device): hold Back or Forward to scroll sideways with the main wheel (0x1b04 raw wheel) by @AprilNEA in #1828
  • test(gui): draw dialogs at rest before clicking their buttons by @AprilNEA in #1832
  • feat(desktop): offer hold-to-scroll-sideways for Back and Forward by @AprilNEA in #1835
  • feat(device): smooth a mouse's main wheel by diverting it (0x2121) by @AprilNEA in #1837
  • feat(desktop): add a per-device smooth wheel switch to the Scrolling card by @AprilNEA in #1839
  • feat(device): reach Litra lights over HID++ 0x1990 with read-back by @AprilNEA in #1841
  • fix(gui): show the Actions Ring tab for keyboards with a Keys panel by @4ni1ak in #1844
  • fix(gui): retain observed connection icons for offline devices by @i0ntempest in #1830
  • fix(cli): drop a paired device with no identity from fixture capture by @4ni1ak in #1861
  • fix(gui): recognize the MX Ergo precision-mode button slot by @4ni1ak in #1855
  • fix(agent): log thumb-wheel continuous-scroll dispatch by @4ni1ak in #1852
  • fix(i18n): translate the hold-modifiers and tap-key actions in Czech by @Imbecile6197 in #1850
  • feat(gui): add a Next / Previous Desktop thumb-wheel preset by @Rothschildiuk in #1848
  • fix(agent): write a light only when a reload changes its settings by @AprilNEA in #1865
  • feat(agent): keep a change made on a Litra as its setting and publish it by @AprilNEA in #1866
  • feat(gui): add device default option for keyboard bindings by @clifinger in #702
  • fix(linux): report input access as denied when the event node is unreadable by @AalmanSadath in #787
  • fix(gui): embed the Sleep action's moon glyph by @AalmanSadath in #790
  • feat(gui): add a Reset to defaults button to the F-key binding panel by @4ni1ak in #1255
  • fix(gui): enlarge About panel logo by @4ni1ak in #1364
  • fix(hid): open HID++ channels concurrently, not one node at a time by @4ni1ak in #1443
  • feat(gui): add Power User actions to the Action Ring editor by @4ni1ak in #1445
  • fix(inject): give the Windows Screenshot action its own Win+PrtScn chord by @AprilNEA in #1867
  • fix(linux): keep "pen" out of the uinput device names by @AprilNEA in #1868
  • fix(linux): grab a mouse again after it reconnects or appears late by @AprilNEA in #1869
  • feat(desktop): save a change made on a Litra as its setting by @AprilNEA in #1870
  • fix(hook): fall back to a recent device attribution on macOS by @andybateman in #805
  • fix(hid): suppress duplicate Bolt pairing slots by @xcouturecc in #963
  • fix(gui): allow clearing function-key bindings by @xcouturecc in #962
  • feat(gui): show the receiver slot on each device card by @garysassano in #1802
  • fix(gui): fold leftover receiver pairings into one device card by @garysassano in #1801
  • fix(hid): capture the M720 Triathlon's multiplatform gesture button by @kurtlieber in #1613
  • fix(i18n): route hardcoded GUI labels through the catalog by @eibidia in #1331
  • fix(macos): preserve fractional wheel distance by @li-shch in #1154
  • feat(linux): route window-manager native actions through KWin D-Bus on KDE by @werwolf2303 in #1087
  • feat(linux): support Hyprland native remaps by @shawnyeager in #1152
  • fix(agent): include MiddleClick in the macOS HID++ gesture ownership by @tims2002 in #1380
  • test(inject): cover the macOS Lock Screen chord by @AprilNEA in #1885
  • feat(overlay): show keyboard backlight level by @nathan-fontenele in #1695
  • ci(macos): lint the macOS cfg with clippy by @AprilNEA in #1883
  • chore: drop stale lint suppressions and reject module-wide #![allow] by @AprilNEA in #1884
  • feat(core,gui): allow middle click gesture mode by @PedroDiogo in #1738
  • feat(hidpp): add scrolling force control for smartshift enhanced mice by @pedrohgmacedo in #1636
  • fix(core,agent): chain swipes within one gesture-button hold by @sarat03 in #1652
  • feat(linux): ship a Flatpak bundle with each release by @AalmanSadath in #767
  • ci: sweep stale #[allow] on Linux, Windows, and macOS weekly by @AprilNEA in #1887
  • feat(overlay): show a notice when a device's battery runs low by @AprilNEA in #1891
  • feat(overlay): show an indicator when a keyboard turns a lock key on or off by @AprilNEA in #1898
  • fix(device): drop a lock-state read that answers after a reconnection by @AprilNEA in #1899
  • fix(overlay): draw one Actions Ring per display on Wayland by @AprilNEA in #1906
  • feat(core,gui): share per-app profiles across platforms with [apps] aliases by @AprilNEA in #1907
  • chore: release v0.8.15 by @AprilNEA[bot] in #1831

New Contributors

Full Changelog: v0.8.14...v0.8.15

  •  

v25.12.6

Hi,

The OpenWrt community is proud to announce the sixth service release of the OpenWrt 25.12 stable series.

Download firmware images using the OpenWrt Firmware Selector:

Download firmware images directly from our download servers:

Main changes between OpenWrt 25.12.5 and OpenWrt 25.12.6

Only the main changes are listed below. See the full changelog for details.

Security fixes

This release fixes several remotely triggerable vulnerabilities in core network
services that are enabled by default. Updating is strongly recommended.

Many optional packages in the packages feed were also updated to new versions with
security fixes, among them curl 8.22.0, OpenSSH 10.6p1, unbound 1.26.1, BIND 9.20.29,
OpenVPN 2.7.7, strongSwan 6.0.7, HAProxy 3.2.21, expat 2.8.4, nghttp2 1.70.0,
libssh 0.12.2, c-ares 1.34.8, Tor 0.4.9.13, Knot DNS 3.5.7, PowerDNS 4.9.17,
PowerDNS Recursor 5.2.13, Exim 4.100.1, Python 3.13.15, Node.js 22.23.2, xz 5.8.3
and rsync 3.5.1. These packages are not part of the default images; update the
installed packages to get these fixes.

Beyond the issues listed above, this release fixes a number of further security
problems for which no CVE number or dedicated advisory was assigned. We strongly
recommend upgrading to the latest OpenWrt release and installing all available
package updates
.

Important changes

WiFi: GCMP-256 and SAE-EXT-KEY are no longer offered by default

OpenWrt 25.12.0 to 25.12.5 offered the GCMP-256 pairwise cipher and, in some configurations, the SAE-EXT-KEY key management (SAE with a group-dependent hash, also called SAE-GDH) on WPA3 networks with WiFi 6 (HE) or WiFi 7 (EHT), but not in the way the Wi-Fi Alliance "WPA3 and Wi-Fi Enhanced Open Deployment and Implementation Guide" describes it. This configuration caused connection problems, for example with Pixel 10 phones (#21486) and with 802.11r Fast Transition (#22200).

The WPA3 specification makes GCMP-256 and SAE-EXT-KEY mandatory for WiFi 7 and recommends them otherwise. When the configuration recommended by the Wi-Fi Alliance was enabled in the OpenWrt development branch, it turned out that about 15% of the client devices in use are not compatible with it. For example:

  • Some clients cannot connect when GCMP-256 is offered, already on WiFi 6, for example Nanoleaf devices, a Motorola/Unisoc phone and Linux laptops using iwd.
  • With 802.11r Fast Transition enabled, FT-SAE-EXT-KEY prevents some clients from connecting (for example a Samsung Galaxy Tab S10 FE) or makes them reboot shortly after connecting (for example a Poco X6).

See the discussion on the hostap mailing list (https://lists.infradead.org/pipermail/hostap/2026-July/045277.html) and pull request #23009 (#23009) for details.

Starting with 25.12.6, GCMP-256 and SAE-EXT-KEY are no longer offered by default in WPA3-Personal (sae) and WPA2/WPA3 mixed (sae-mixed) mode; only CCMP and plain SAE are offered. The old rsn_override option was removed.

We recommend using WPA3-Personal (sae) or WPA2/WPA3 mixed mode (sae-mixed). If some clients have problems with these modes, use the new WPA3-Personal Compatibility Mode (sae-compat, "WPA2-PSK/WPA3-SAE Compatibility Mode" in LuCI): WPA2 clients see a normal WPA2 network, while clients that support RSN overriding use WPA3.

Only enable GCMP-256 and SAE-EXT-KEY if you need them and if they do not cause problems with your clients. In LuCI, they are on the "Wireless Security" tab of the wireless network as "GCMP-256 pairwise cipher" and "SAE-EXT-KEY (SAE-GDH)". On the command line (replace default_radio0 with the name of your wifi-iface section):

uci set wireless.default_radio0.gcmp256='1'
uci set wireless.default_radio0.sae_ext_key='1'
uci commit wireless
wifi reload

gcmp256 offers GCMP-256 in addition to CCMP, but only if the WiFi driver supports GCMP-256. sae_ext_key offers SAE-EXT-KEY, and also FT-SAE-EXT-KEY when 802.11r is enabled.

DHCP client: the client identifier can be selected

Since OpenWrt 25.12.0, every device generates a random, UUID-based DUID on first boot and stores it in network.globals.dhcp_default_duid. The DHCPv6 client uses it as its DUID, and the DHCPv4 client sends it together with an interface-specific IAID as client identifier (DHCP option 61). This default follows the recommendation of RFC 4361 (https://www.rfc-editor.org/rfc/rfc4361) that DHCPv4 clients use the same DUID as DHCPv6, so the device is identified in the same way for DHCPv4 and DHCPv6. The UUID-based DUID format is defined in RFC 6355 (https://www.rfc-editor.org/rfc/rfc6355). OpenWrt 24.10 sent no client identifier with DHCPv4 and used a DUID-LL derived from the MAC address for DHCPv6. Some DHCP servers, including servers of some ISPs, do not work correctly with the new client identifier, and until now there was no way to go back to the old behavior.

OpenWrt 25.12.6 adds the new per-interface option sendclientid:

  • auto (default): use the client ID configured with the clientid option, else the default DUID of the device, else the MAC address. This is the behavior of 25.12.0 to 25.12.5 and follows RFC 4361.
  • global: always use the default DUID of the device, even if clientid is set.
  • hardware: use the MAC address of the interface (DHCPv4) or a DUID-LL derived from it (DHCPv6).
  • none (DHCPv4 only): do not send a client identifier at all.

We recommend keeping the default auto, which matches the behavior of OpenWrt 25.12.5. Only if the DHCP server of your ISP does not work with it, switch back to the behavior of OpenWrt 24.10 by setting none on the DHCPv4 interface and hardware on the DHCPv6 interface:

uci set network.wan.sendclientid='none'
uci set network.wan6.sendclientid='hardware'
uci commit network
service network reload

In LuCI, the option is called "Preferred client ID" and is on the "Advanced Settings" tab of the interface (Network โ†’ Interfaces โ†’ Edit). Select "None" for the DHCPv4 interface (wan) and "Hardware address" for the DHCPv6 interface (wan6). Note that the DHCP server sees a changed client identifier as a new client, so you may get a different IPv4 address or IPv6 prefix.

Device support

New devices supported in 25.12.6:

  • ipq806x: Aruba AP-324 / AP-325 (also Siemens Scalance W1750D)
  • mediatek (filogic): Airtel AirFiber AAP4221ZY (Zyxel EX3310-T0)
  • mediatek (filogic): Cudy WR3000U v1
  • mediatek (filogic): Globitel BT-R320
  • mediatek (filogic): Hiveton H5000M (Airpi H5000M)
  • mediatek (filogic): JioRouter AX6000 JIDU6J01 / JIDU6201
  • mediatek (filogic): Livinet Li320
  • mediatek (filogic): netis N6 V2
  • mediatek (filogic): Teralink TL3020 (256 MB)
  • mediatek (filogic): WAVLINK WL-WNT100X3 (stock layout and OpenWrt U-Boot layout)
  • qualcommax (ipq50xx): CMCC MR3000D-CI
  • ramips (mt7621): TP-Link ER605 v1 (TL-R605 v1)
  • ramips (mt76x8): Cudy LT500 Outdoor v1
  • rockchip: FriendlyARM NanoPi R2S Plus

New image variants for already supported devices:

  • mediatek (filogic): Cudy M3000 v1/v2 - add OpenWrt U-Boot layout (ubootmod) image, which uses the full NAND size
  • mediatek (filogic): Cudy M3000 v2 with Motorcomm YT8821 PHY - add OpenWrt U-Boot layout (ubootmod) image

Device fixes:

  • ath79: GL.iNet GL-E750 (Mudi) V2 - fix the 5 GHz WiFi radio, which did not come up because of missing calibration data
  • bcm53xx: fix sysupgrade losing the configuration on NAND devices (see "Upgrading" below)
  • bcm47xx, imx (Gateworks Ventana), layerscape (Traverse Ten64): fix Attended Sysupgrade (ASU) support
  • kernel: add support for FudanMicro FM25G01B/FM25G02B SPI-NAND (fixes a boot loop on new revisions of Keenetic KN-1812 / Netcraze NC-1812) and HeYangTek HYF1GQ4UDACAE SPI-NAND (found on some Keenetic KN-3411 units)
  • mediatek: MT7986 - correct the system timer rate, fixing clock drift (e.g. NTP running at the +500 ppm limit on the GL.iNet GL-MT6000)
  • mediatek (filogic): Cudy devices with DDR3 RAM - run the RAM at its rated speed of 1866 MT/s
  • mediatek (filogic): JioRouter AX6000 JIDU6101 - fix silently failing sysupgrade (SPI-NAND writes) and the U-Boot environment layout
  • mediatek (filogic): Keenetic / Netcraze devices - fix NMBM reserved block count, fixing boot on some units
  • mediatek (filogic): Comfast CF-WR632AX - fix NMBM configuration mismatch (#24546)
  • mediatek (filogic): Cudy WR3000S v1 - light up the Internet LED
  • mediatek: ipTIME AX3000SE - WLAN LED now shows activity of both radios
  • ramips: ipTIME A8004T - fix PCIe after a warm reboot
  • ramips: fix Ethernet interrupt handling with busy polling / interrupt deferral (#25742)
  • mpc85xx: Freescale P2020RDB - switch to DSA (see "Upgrading" below); TP-Link TL-WDR4900 v1 - the WiFi on/off switch now works; Enterasys WS-AP3715i - fix boot and allow access to the U-Boot environment
  • mvebu: Turris MOX - fix sysupgrade, squashfs boot and USB 2.0 device detection; WiFi (mwifiex SDIO) and Bluetooth drivers are now included in the image
  • qualcommax: ASUS RT-AX89X - use LAN1 instead of the SFP port in failsafe mode (#23633)
  • qualcommbe: ipq95xx - check the image metadata on sysupgrade
  • realtek: D-Link DGS-1210-28P/MP - fix fan control
  • rockchip: NanoPi R3S (1 GB) - fix the PCIe link to the RTL8111H Ethernet chip
  • sunxi: H5 boards (e.g. NanoPi NEO 2) - fix USB
  • airoha: new PCS implementation, Ethernet LRO and HW-GRO support, many Ethernet driver fixes, AN7583 USB/PCIe PHY support, updated pin controller driver and thermal settings

WiFi fixes and improvements

  • The WPA3 defaults were reworked to follow the WPA3 specification and deployment guide:
    • GCMP-256 and SAE-EXT-KEY are no longer offered by default in sae and sae-mixed mode (see "Important changes" above)
    • Beacon protection is now enabled by default on supported devices when management frame protection (PMF / 802.11w) is enabled
    • SAE now offers the groups 19, 20 and 21 by default
    • New WPA3-Personal Compatibility Mode (sae-compat): WPA2 clients see a normal WPA2 network, while clients that support RSN overriding use WPA3
    • New transition_disable option to tell clients to stop falling back to older security modes on a WPA3-only network
    • On 6 GHz, SAE uses H2E only, and WPA2-only configurations are automatically switched to WPA3 so the radio comes up
    • LuCI shows the new options in the wireless settings and hides encryption modes that are not allowed on 6 GHz
  • WiFi client (wpa_supplicant) with WPA-Enterprise: fix EAP inner methods such as EAP-MSCHAPV2 (#24086), fix server certificate checks (altsubject_match, domain_match, domain_suffix_match), and accept the old priv_key / priv_key_pwd option names again, so EAP-TLS client configurations from 24.10 work again (#22599)
  • hostapd: fix EAP-TLS client mode with Mbed TLS 3.6.3 and newer
  • wifi-scripts: restore 802.11ad (60 GHz) support
  • wifi-scripts: the multicast_to_unicast option works again
  • hostapd: restore Link Measurement Report handling; beacon reports via ubus support the reporting detail parameter and include the raw report data
  • mac80211: update to 6.18.55 with many upstream fixes for ath10k, ath11k, iwlwifi, rtw88 and other drivers
  • ath9k: reset the hardware on init again, fixing problems on some devices
  • rtw88 (USB/SDIO): use a longer TX report timeout, fixing repeated "failed to get tx report from firmware" warnings in access point mode
  • mt76: backport fixes from Linux 6.18.55
  • iwinfo: fix corrupt scan results when wpa_supplicant is running; add new device IDs
  • iw: show RSN Override elements in scan results

Network and service improvements

  • DHCP client: new per-interface option sendclientid to choose the DHCPv4/DHCPv6 client identifier (see "Important changes" above)
  • ppp: on-demand dialing (demand option) works again. It was broken since the update to ppp 2.5.0 (#24454).
  • uhttpd: stricter and more robust HTTP parsing, lower latency (TCP_NODELAY), can bind to addresses that are not yet configured, and supports SNI-based redirects
  • umdns: many robustness fixes
  • L2TP: fix heavy packet fragmentation, seen for example with batman-adv over an L2TP tunnel over IPv4
  • Mobile broadband: uqmi and umbim now report the DNS servers in ifstatus also with peerdns disabled; support for the Quectel EG120K-EA modem (qmi_wwan); NCM support for Fibocom FG621-EA modems (e.g. ASUS 4G-AX56, TP-Link TL-MR500 v1)
  • adb: fix RSA authentication with Mbed TLS

Other changes

  • LuCI: new optional theme luci-theme-footstrap; the optional luci-mod-dashboard got live charts and a configurable layout; new apps luci-app-librespeed and luci-app-weechat

Core component updates

  • Linux kernel: update from 6.12.94 to 6.12.112
  • OpenSSL: update from 3.5.7 to 3.5.9 (multiple security fixes, see above)
  • Mbed TLS: update from 3.6.6 to 3.6.7 (multiple security fixes, see above)
  • wolfSSL: update from 5.9.1 to 5.9.4 (multiple security fixes, see above)
  • mac80211: update from 6.18.26 to 6.18.55
  • wireless-regdb: update from 2026.05.30 to 2026.09.03
  • nilfs-utils: update from 2.2.12 to 2.2.17
  • ca-certificates: update from 20260601 to 20260816 (refreshed root CA bundle)
  • wireguard-tools: update from 1.0.20250521 to 1.0.20260223
  • uhttpd, rpcd, umdns, odhcp6c and iwinfo: updated to newer upstream versions

Upgrading to 25.12.6

Upgrading from 24.10 to 25.12 should be transparent on most devices, as most configuration data has either remained the same or will be translated correctly on first boot by the package init scripts.
For upgrades within the OpenWrt 25.12 stable series, Attended Sysupgrade is also supported, which allows preserving the installed packages.

  • Sysupgrade from 23.05 or earlier to 25.12 is not officially supported.

  • Cron log level was fixed in busybox. system.@system[0].cronloglevel should be set to 7 for normal logging. 7 is the default now. If this option is not set, the default is used and no manual action is needed. fc0c518

  • Bananapi BPI-R4: Interface eth1 was renamed to sfp-lan or lan4, and interface eth2 was renamed to sfp-wan to match the labels. You have to upgrade without saving the configuration. cd8dcfe

  • DHCP client identifier: Since 25.12.0, the DHCP clients identify the device with a UUID-based DUID instead of the MAC address. If your ISP's DHCP server has problems with this, set the new sendclientid option to get the behavior of OpenWrt 24.10 back, see "Important changes" above.

  • bcm53xx devices with NAND flash: Since 24.10, sysupgrade lost the configuration on these devices. This is fixed in 25.12.6, but because the fix is in the firmware that does the flashing, the upgrade to 25.12.6 loses the configuration one last time. Back up your configuration before upgrading and restore it afterwards. 67b18c1

  • Freescale P2020RDB: The switch was converted from swconfig to DSA. The configuration cannot be migrated, so upgrade without keeping the settings (sysupgrade -n).

  • TP-Link RE355 v1, RE450 v1 and RE450 v2: The partition layout and block size changed in OpenWrt 25.12.1 to fix configuration loss on sysupgrade. Users upgrading from OpenWrt 25.12.0 or earlier must use sysupgrade -F to force the upgrade. The image must not exceed 5.875 MB (6016 KiB).

  • Meraki MX60: Direct sysupgrade to 25.12.6 is not possible without manual preparation โ€” meraki_loadaddr must be changed before upgrading, as the default value is insufficient to boot OpenWrt 25.12+. See the device wiki page for instructions.

  • Sitecom WLR-7100 (X7 AC1200): This device was moved from the ath79/generic target to the ath79/tiny target in OpenWrt 25.12.4. Users upgrading from 25.12.3 or earlier need to flash the new image from the ath79/tiny target (use sysupgrade -F).

Known issues

  • Zyxel EX5601-T0: the WAN interface was renamed from eth1 to wan โ€” check and update your network configuration after upgrading.
  • SQM CAKE MQ (cake_mq): throughput may be unexpectedly low on some configurations. #22344
  • qualcommax/ipq50xx: Ethernet ports do not work. #25975

Full release notes and upgrade instructions are available at
https://openwrt.org/releases/25.12/notes-25.12.6

In particular, make sure to read the known issues before upgrading:
https://openwrt.org/releases/25.12/notes-25.12.6#known_issues

For a detailed list of all changes, refer to
https://openwrt.org/releases/25.12/changelog-25.12.6

To download the 25.12.6 images, navigate to:
https://downloads.openwrt.org/releases/25.12.6/targets/
Use OpenWrt Firmware Selector to download:
https://firmware-selector.openwrt.org?version=25.12.6

As always, a big thank you goes to all our active package maintainers, testers, documenters and supporters.

Have fun!

The OpenWrt Community


To stay informed of new OpenWrt releases and security advisories, there
are new channels available:

  •  

v0.8.14

What's Changed

  • fix(gui): prefer the Buttons panel over Keys when kind resolution is wrong by @4ni1ak in #1702
  • docs(readme): add Spanish translation by @eibidia in #1314
  • fix(gui): let the theme card name shrink so the badge fits by @4ni1ak in #1435
  • fix(hook): carry the mouse's vendor/product ID onto its uinput mirror by @4ni1ak in #1453
  • fix(cli): let macOS prompt for Input Monitoring before diag opens a device by @4ni1ak in #1256
  • fix(gui): draw the client-side titlebar only where the compositor declines one by @4ni1ak in #945
  • fix(inject): distinguish Linux Capture Region from Screenshot by @4ni1ak in #1433
  • fix(hook): preserve low-res wheel events during Linux pass-through by @nathan-fontenele in #1693
  • fix(i18n): use Spain's Spanish terms in the es catalog by @eibidia in #1326
  • docs(i18n): add Portuguese README translation by @obrenoalvim in #1371
  • fix(windows): enable HID++ side-button gestures by @c1m-Chenym in #1635
  • fix(agent): emit scroll input queued across a smoothing toggle instead of dropping it by @isleofgreg in #1721
  • fix(agent): honor an overflow cancel from a generation the scroll worker has not seen by @isleofgreg in #1720
  • feat(device): Detect Logitech G735 headset dongle by @xvilo in #1040
  • fix(i18n): translate the custom-action input error in Czech by @Imbecile6197 in #1728
  • fix(overlay): set the macOS activation policy before gpui_platform starts by @4ni1ak in #1692
  • fix(hid): capture alternate gesture controls by @4dux in #1561
  • feat(camera): expose pan, tilt, gain and backlight compensation by @yuzi-co in #1020
  • feat(gui): add precise camera control entry by @vinayaksodar in #1047
  • fix(device): omit raw-xy flags when diverting or restoring keyboard controls by @henius98 in #1726
  • fix(inject): send hi-res wheel events for Linux scroll actions (by @RisenID) by @Fede2782 in #1719
  • fix(assets): resolve variants for depots whose manifests key on depot name or stem by @felipecadal in #1295
  • fix(gui): render camera depots that ship no hotspot metadata by @MattijsE in #1265
  • fix(inject): give App Expose/Mission Control/Show Desktop/Launchpad a GNOME implementation by @4ni1ak in #1446
  • fix(gui): open the config folder from the fail-closed config screen by @yuzi-co in #942
  • fix(gui): give MenuRow-based list rows an accessible name by @4ni1ak in #1448
  • fix(camera): collapse a Brio's IR node into one Linux camera entry by @4ni1ak in #1234
  • docs: add Turkish README translation by @4ni1ak in #1734
  • feat(hook): reverse the wheel in software for devices without 0x2121 by @4ni1ak in #847
  • feat(gui): add custom-shortcut Tap/Hold recorder to the button picker by @fahadjibransheikh in #1396
  • fix(agent): reapply volatile settings on device reconnection and retry disagreeing DPI writes by @isleofgreg in #1270
  • fix(overlay): properly position and scale Actions Ring on Windows mixed-DPI displays by @c1m-Chenym in #1745
  • fix(camera): pass the pan/tilt payload by value by @SMRehan in #1740
  • feat(core): add an action that holds modifiers and taps the key once by @Rick0525 in #1161
  • feat(gui): update macOS through Sparkle by @AprilNEA in #1744
  • docs(ipc): move PROTOCOL_VERSION once per release by @AprilNEA in #1760
  • fix(hidpp): write 0x1990 non-linear level tables whole by @AprilNEA in #1765
  • fix(hidpp): read the 0x4530 platform with function 0 by @AprilNEA in #1766
  • fix(hidpp): write each 0x0007 name chunk at its own offset by @AprilNEA in #1767
  • fix(hidpp): preserve device state OpenLogi does not own on writes by @AprilNEA in #1753
  • fix(device): encode 0x8080 tail frames and 0x8070 fixed colour per device by @AprilNEA in #1758
  • fix(device): write SmartShift torque and DPI only as the device advertises by @AprilNEA in #1759
  • fix(device): give the Litra Beam its own brightness range by @AprilNEA in #1763
  • fix(device): stop misreading 0x1000 and 0x1001 battery states by @AprilNEA in #1768
  • fix(device): stop committing 0x8080 frames the keyboard rejected by @AprilNEA in #1764
  • fix(device): own RGB software control for the agent session by @AprilNEA in #1769
  • fix(hidpp): require the 0x8081 zone echo before reporting a write by @AprilNEA in #1771
  • fix(hidpp): refuse short 0x1990 info and level replies by @AprilNEA in #1772
  • fix(device): confirm the haptic repair from the device's reply by @AprilNEA in #1773
  • fix(device): confirm SmartShift writes from the device's reply by @AprilNEA in #1775
  • fix(agent-core): close the RGB release races left by #1769 by @AprilNEA in #1770
  • fix(hidpp): require the sensor echo in DPI replies by @AprilNEA in #1776
  • fix(device): end a thumb-wheel roll whose Stop never arrives by @AprilNEA in #1777
  • docs(hidpp): say that a None remap keeps the current mapping by @AprilNEA in #1778
  • fix(hidpp): hold 0x8060 and 0x8061 rates to what the features define by @AprilNEA in #1779
  • fix(hidpp): decode every 0x2121 capability flag and the horizontal delta by @AprilNEA in #1780
  • fix(hidpp): decode 0x1c00 empty actions and status, and 0x4531 OS bits by @AprilNEA in #1781
  • fix(hidpp): keep 0x0003 firmware entity types without a name by @AprilNEA in #1783
  • fix(hidpp): refuse a short 0x40A3 reply instead of zero-filling it by @AprilNEA in #1782
  • fix(hidpp): treat a Bolt protocol byte in 0x41 as an encrypted link by @AprilNEA in #1784
  • fix(device): reconcile inventory on 0x1000/0x1001 battery broadcasts by @AprilNEA in #1787
  • fix(device): wait for the Unifying lock to open before searching by @AprilNEA in #1785
  • fix(device): report no percentage for a 0x1004 battery without a gauge by @AprilNEA in #1788
  • fix(hidpp): check the echoed index in 0x8070/0x8071 info and 0x0007 name reads by @AprilNEA in #1789
  • fix(hidpp): read a non-BCD 0x0003 firmware version as binary by @AprilNEA in #1790
  • fix(device): re-read settings the device changes itself by @AprilNEA in #1791
  • fix(device): drive Fn-lock on keyboards that only have 0x40a0 by @AprilNEA in #1792
  • fix(device): play only the haptic waveforms the device advertises by @AprilNEA in #1796
  • feat(camera): name webcams that report no USB product string by @DonovanMontoya in #1793
  • chore(deps): bump rustls to 0.23.46 by @AprilNEA in #1805
  • feat(device): keep multi-platform keyboards on the host OS layout by @AprilNEA in #1806
  • feat(device): adjust the report rate of mice with 0x8060 or 0x8061 by @AprilNEA in #1808
  • feat(device): set keyboard backlight automatic brightness, level and battery saving by @AprilNEA in #1811
  • feat(desktop): control the keyboard backlight from the Device tab by @AprilNEA in #1812
  • fix(device): refuse haptic plays while 0x19b0 reports a non-zero status by @AprilNEA in #1817
  • fix(linux): settle the uinput action device before its first emit by @4ni1ak in #1810
  • fix(device): don't let a stuck Empty host-slot status refuse a real pairing by @4ni1ak in #1813
  • fix(agent): divert a keyboard key explicitly bound to Action::None by @4ni1ak in #1819
  • fix(device): discard the stale first raw-XY report of every gesture hold by @DonovanMontoya in #1786
  • fix(scroll): post phaseless continuous scroll events on macOS by @isleofgreg in #1157
  • fix(gui): gate debug diagnostics imports in release builds by @gitsacha in #1815
  • fix(agent): anchor the recovery-scan timer to scan start, not scan end by @4ni1ak in #1809
  • fix(agent): queue HID requests before response timeout by @sh3ll3x3c in #936
  • fix(linux): open the Actions Ring at the cursor on Wayland by @AalmanSadath in #1004
  • fix(agent): hand off capture across receiver routes by @justinechang39 in #1198
  • Horizontal Scroll Reversed #1120 by @romanr in #1140
  • feat(device): read Easy-Switch host names and OS, and rename hosts (0x1815) by @AprilNEA in #1824
  • fix(overlay): configure accessory policy after GPUI initialization by @gitsacha in #1814
  • fix(hook): keep software scroll inversion applied when the agent intercepts the wheel by @4ni1ak in #1749
  • feat(desktop): show Easy-Switch hosts on the Device tab and rename them by @AprilNEA in #1825
  • fix(hook): keep the pixel delta when inverting a macOS wheel event by @AprilNEA in #1827
  • chore: release v0.8.14 by @AprilNEA[bot] in #1718

New Contributors

Full Changelog: v0.8.13...v0.8.14

  •  

LEDVANCE joins Works with Home Assistant

LEDVANCE joins Works with Home Assistant

Prepare to be dazzled, because this month LEDVANCE join the Works with Home Assistant program as our newest partners ๐ŸŽ‰ And whatโ€™s more, they bring a huge lineup of certified devices (116, to be exact!) to our community, which means plenty of new ways to light up your home ๐Ÿ’ก

A century of bright ideas

We love welcoming established brands as much as newer names to the Works with Home Assistant program, and LEDVANCE areโ€ฆ wellโ€ฆ both! The company was created in 2016 when OSRAM, one of the lighting industryโ€™s oldest and most respected names, spun off its general lighting business as an independent entity. Its name combines โ€œLEDโ€ and โ€œadvance,โ€ a nod to the shift toward modern LED lighting and the possibilities that came with it.

Since then, LEDVANCE have grown into a global name in their own right, with offices in more than 50 countries and customers in more than 140. They carry forward more than 100 years of lighting experience, and still sell products under the OSRAM brand through a licensing agreement.

But while their heritage is strong, their focus is firmly on the future. Their OSRAM SMART+ range brings that expertise into the modern smart home (and now our program ๐ŸŽ‰), embracing Matter to give you more freedom to illuminate your environment around the way you live. With so many devices to choose from, whatever youโ€™re picturing for your home, chances are thereโ€™s a LEDVANCE light that can help you make it happen.

Setting the standard

Every LEDVANCE device certified to the program uses Matter with a Wi-Fi connection, making the devices simple to integrate into your existing setup. For any newcomers, Matter is an open standard developed by the Connectivity Standards Alliance. It lets devices from different brands work together locally, so youโ€™re never locked into one companyโ€™s ecosystem and your data stays where it should be โ€“ in your home.

Since LEDVANCEโ€™s Matter devices use Wi-Fi, you wonโ€™t need any extra gear to get started. Just add them to your network and theyโ€™ll talk to Home Assistant directly, ensuring an easy setup and the option to create automations with the devices you already have. Itโ€™s great to see our new partners prioritizing open standards, showing they care as much as we do about helping our community control their smart homes on their own terms.

โ€œWe believe that openness and interoperability are essential for the future of smart homes. By joining the Home Assistant community, we want to make SMART+ products more accessible to users who value flexibility and local control, while learning from the community and collaborating to create better smart home experiences.โ€

โ€“ Pulkit Dhanuka, Product Manager at LEDVANCE

Devices

LEDVANCEโ€™s certified devices cover everything from filament-style bulbs, spotlights, and recessed and track downlights, to ceiling and wall lights, floor lamps, and flexible LED strips for adding a glow under kitchen cabinets or behind the TV. In fact, there are so many options that the list is too long to include in this blog, so head to the certified device list to check out all the details!

Set the scene for a comfy night in with LEDVANCEโ€™s smart lights. Set the scene for a comfy night in with LEDVANCEโ€™s smart lights.

To give you a snapshot, most of the range is tunable white or full color, so your lights can go from a cozy evening glow to crisp morning brightness (or a full rainbow, if the mood strikes). There are also IP-rated options for bathrooms and the garden, including floodlights and outdoor spots, so you can automate your lights beyond the back door, for example to turn your security lights on when a sensor detects motion. And if you prefer to use what you already have, the SMART+ Plug can turn any ordinary lamp or appliance into something you can automate, while smart wall switches do the same for your ceiling lights: replace the switch on the wall, keep the bulbs you have.

As with every device certified to the program, LEDVANCEโ€™s products have been rigorously tested by our in-house team to make sure they comply with our core requirements of local control and privacy. LEDVANCE have also committed to providing long-term support for our community, so you can be confident your setup will keep working for the long run.

Lighting that lasts

Sustainability is one of the core principles of the Open Home Foundation, the non-profit organization that runs Works with Home Assistant. A big part of that is making sure devices stay useful for as long as possible. Since LEDVANCEโ€™s devices donโ€™t need a cloud service to function, you donโ€™t have to worry about a far-off server shutdown turning your lights into e-waste.

And because Matter works across platforms, youโ€™ll still be able to use your tech if you ever change smart home systems. Lighting that keeps shining whatever happens to a platform: thatโ€™s the kind of partner we love to welcome, and itโ€™s what this program is all about.

All systems glow

Weโ€™re thrilled to have LEDVANCE join our community, and canโ€™t wait to see what you light up with their range of devices. Want to see more partners like them on board? A Home Assistant Link (formerly Home Assistant Cloud) subscription gives you secure, remote access to your smart home, and directly supports the Open Home Foundation to expand our program. Because the more brands that join, the more choice you have to design your space exactly the way you like. Hereโ€™s to plenty more switched-on homes ๐Ÿ’ก Welcome, LEDVANCE!

FAQs

Q: If I have a device that is not listed under Works with Home Assistant does this mean itโ€™s not supported?

A: No! It just means that it hasnโ€™t gone through a testing schedule with our team or doesnโ€™t fit the requirements of the program. It might function perfectly well but be added to the testing schedule later down the road, or it might work under a different connectivity type that we donโ€™t currently test under the program.

Q: OK, so whatโ€™s the point of the Works with program?

A: It highlights the devices we know work well with Home Assistant and the brands that make a long-term commitment to keeping support for these devices going. The certification agreement specifies that the devices must have the functionality you would expect within Home Assistant, operate locally without the need for cloud and that they will continue to do so long-term.

Q: How were these devices tested?

A: All of LEDVANCEโ€™s certified devices were tested using Home Assistant over a standard Wi-Fi connection with our certified Matter integration. If you have another setup or integration thatโ€™s not a problem, but we test this way as itโ€™s the most effective method for our team to certify within our ecosystem.

Q: Will you be adding more LEDVANCE devices to the program?

A: Why not! Weโ€™re thrilled to foster a close relationship with the team at LEDVANCE to work together on any upcoming releases or add in further products that are not yet listed here.

  •  

v0.8.13

What's Changed

  • fix(linux): add a Spanish comment to the desktop entry by @eibidia in #1468
  • fix(agent): let a thumb-wheel swipe fire Volume Up/Down more than once by @4ni1ak in #1455
  • feat(hid): recognise Powerplay receiver 046d:c53a by @FelipeIzui in #1267
  • feat(hid): add G733 battery and power-state support by @d-tatianin in #1601
  • fix(i18n): improve Turkish catalog wording by @volkanncicek in #1415
  • docs(core): clarify persisted device identifier scope by @yuzi-co in #670
  • fix(macos): respect the selected Apple developer directory by @4ni1ak in #1457
  • fix(gui): restore the config-error folder action by @4ni1ak in #1458
  • fix(core): resolve connection transport from live routes by @4ni1ak in #1367
  • feat(gui): add custom actions to the mouse picker by @4ni1ak in #1452
  • fix(gui): show friendly names for Windows app profiles by @4ni1ak in #1463
  • feat(hidpp): implement pointer motion scaling by @Chernicharo in #1347
  • fix(inject): restore macos 27 space swipes by @4ni1ak in #1703
  • fix(hook): identify unbundled macos applications by @4ni1ak in #1469
  • chore: release v0.8.13 by @AprilNEA[bot] in #1716

New Contributors

Full Changelog: v0.8.12...v0.8.13

  •  

v0.8.12

What's Changed

  • test(agent): cover a BLE mouse that wakes as a new node by @kohjunhao in #1649
  • fix(gui): seed the DPI editor from config while the live read is pending by @4ni1ak in #1628
  • fix(hid): recognize Lightspeed receiver 046d:c541 by @hamfield-eu in #1679
  • fix(gui): truncate the function-row key callout's name instead of overflowing by @4ni1ak in #1691
  • fix(gui): wrap the device-enabled caption so the switch stays in the card by @Imbecile6197 in #1670
  • feat(fixture): add an MX Ergo Unifying fixture by @Chernicharo in #1374
  • fix(gui): set text color on mouse pairing passkey click icons by @ZOZiBoi in #1640
  • fix(hidpp): tell another protocol's reports apart from malformed HID++ by @Chernicharo in #1373
  • fix(macos): log the candidate displays when Space state has no match by @4ni1ak in #1694
  • fix(agent): phase horizontal thumb-wheel scroll when smoothing is off by @nredd in #1689
  • feat(i18n): add Czech locale by @Imbecile6197 in #1669
  • fix(core): write config through symlinks instead of replacing them by @FunJim in #1642
  • fix(hook): keep the short budget for tap teardown after a probe break by @TheMedpreneur in #1600
  • fix(i18n): name the real update-check host in the consent dialog by @4ni1ak in #1629
  • fix(agent): restore ring toggle and publish expired sessions by @isleofgreg in #1665
  • fix(gui): scale configuration labels with interface text by @4ni1ak in #1627
  • fix(agent): fall back to focus when the pointer target is unidentified by @kohjunhao in #1648
  • fix(gui): anchor scrollbar overlays in action ring editor and app picker by @lynicis in #1360
  • fix(i18n): track the locale catalogs as build inputs by @zmingxie in #1327
  • fix(gui): wrap the About page's link row instead of clipping it by @crnst8 in #885
  • fix(cli): replace the stale receiver note with a Linux udev hint by @Chernicharo in #1348
  • fix(gui): show wheel controls without adjustable dpi by @minatoaquaMK2 in #1369
  • fix(gui): recognize MX Ergo's DPI slot name for the mouse diagram by @armandodollia in #1391
  • fix(macos): write the scroll point delta last so pixel precision survives by @isleofgreg in #1156
  • chore: release v0.8.12 by @AprilNEA[bot] in #1646

New Contributors

Full Changelog: v0.8.11...v0.8.12

  •  

2026.10: You are here ๐Ÿ“

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.

  •  

NVIDIA Driver 617.42

Release Highlights:
Although GeForce Game Ready Drivers and NVIDIA Studio Drivers can be installed on supported notebook GPUs, the original equipment manufacturer (OEM) provides certified drivers for your specific notebook on their website. NVIDIA recommends that you check with your notebook OEM for recommended software updates for your notebook.

Game Ready for Call of Duty: Modern Warfare 4
This new Game Ready Driver provides the best gaming experience for the latest new games and updates supporting DLSS and RTX technologies including Call of Duty: Modern Warfare 4, STAR WARS: Galactic Racer, Dragonโ€™s Dogma 2: Dark Arisen, Microsoft Flight Simulator 2024, and Valor Mortis.

Fixed Gaming Bugs
  • Assassin's Creed Shadows may crash to desktop after extended gameplay after updating to driver 616.56 [6685219]

Fixed General Bugs
  • N/A

Learn more in our Game Ready Driver article here.

Game Ready Driver

  •  

Big Tech ruined the cloud, so weโ€™re renaming ours

Big Tech ruined the cloud, so weโ€™re renaming ours

From ever-increasing subscription prices to outages and data harvesting: we donโ€™t like what the cloud has come to represent. So weโ€™re redefining what an online service should be: private, optional, and free from lock-in or walled gardens.

Thatโ€™s why today Nabu Casa is renaming Home Assistant Cloud to more accurately describe what the service actually does, and to better reflect our values. Allow us to introduce:

Home Assistant Link

Iโ€™m Carl, Vice President of Commercial at Nabu Casa. You probably know us as the folks making all that sleek, highly optimized Home Assistant hardware. Beyond hardware, we also manage and run Home Assistant Link, and as one of the Open Home Foundationโ€™s commercial partners, weโ€™re here to help fund all their amazing work. We feel pretty passionately about the word cloud, and weโ€™d love to explain how the old name never fit, and why Link finally does.

Created for the community

Home Assistant began with a group of core developers working nights and weekends alongside their regular jobs to create the platform โ€“ a good recipe for burnout, and one that has ended plenty of similar open source projects. So in 2018, we founded Nabu Casa and created Home Assistant Cloud to make sure that didnโ€™t happen.

Home Assistant Cloud set out to make Home Assistant easier for more people to use, starting with a problem many of you had: reaching your Home Assistant when youโ€™re not at home, without having to spend a weekend on it. It was also built to make Home Assistantโ€™s development sustainable.

The intent was never to just ask for donations, but to build an optional service that benefited the community and funded the work at the same time. The majority of profits from subscriptions now fund the Open Home Foundation. That money supports everyone working on Home Assistant โ€“ from salaried staff to volunteers โ€“ keeping the project sustainable. That shift took Home Assistant from a passion project to one that could invest back into its community, and one that could stick around for the long haul.

A breath of fresh air

The Nabu Casa logo without the word cloudWe even took it out of the Nabu Casa logoโ€ฆ did we take this too far? ๐Ÿค”

We had a service that we and the community loved, but the name just didnโ€™t feel right. For example, there were times when Paulus, founder of Home Assistant and President of the Open Home Foundation, was on stage saying โ€œdonโ€™t buy products that require the cloud to work,โ€ then in the next breath having to explain how Home Assistant Cloud is different, despite the name. That created unnecessary friction.

It also caused confusion, since some new users thought (and continue to think) Home Assistant Cloud is a way to run Home Assistant in the cloud. This has never been the case, because we believe Home Assistant should always be run locally, in your home.

Big Tech has given the cloud a bad name, and while Link does run online, it is very different from other cloud-powered smart home services:

Home Assistant Link A Big Tech cloud
Optional: your smart home will still work without it, lights and all. Required: all or most features wonโ€™t work without it.
No lock-in: you can use this service or someone elseโ€™s, and youโ€™ll never be stuck. A walled garden: youโ€™ll be locked into that one service, and all its outages or price increases.
Your dataโ€™s private: your data is yours, and will always stay that way. Your dataโ€™s monetized: youโ€™re the product, and your data is used for ads, AI training, and sometimes sold to third parties.
Funds a nonprofit: Nabu Casa contributes the majority of profits from subscriptions to the Open Home Foundation, supporting their fight for privacy, choice, and sustainability. Funds investors first: profits flow to shareholders, debt repayment, and a bunch of other stuff first, and funding developers is an afterthought.

Your subscriptions help sustain Home Assistant, but weโ€™ve been clear from the beginning that you do not need Link to use the platform. We hate what Big Tech has done to smart devices, turning them into paperweights when they drop support. Thermostats that canโ€™t be scheduled or cameras that canโ€™t detect motion, giving the smart home a bad reputation and making a mountain of e-waste. By not using Link, youโ€™ll miss out on some extras, but thatโ€™s all they are: extras. And if you do use Link but have to unsubscribe, your smart home will keep working.

Big Tech treats your data as a commodity and a tool for mass surveillance: sold to advertisers, used to train AI, and dealt to third parties for the best price. We think this is morally bankrupt. Thatโ€™s why when you use Home Assistant Link, your data is encrypted, and only you have the key. Neither Nabu Casa nor the Open Home Foundation want your data, and we work hard to never have an opportunity to see it.

This is what tech serving people looks like: data thatโ€™s yours, and a smart home that answers to you โ€“ not corporate shareholders.

Choose your own path

Many of you build DIY projects to customize your setup, and Home Assistant isnโ€™t going anywhere on that front. But for those whoโ€™d like a simpler approach, Link makes using Home Assistant easier, opening up the local and private smart home to more people. For example, connecting to Alexa and Google Home can be complex to set up yourself, but Link allows you toโ€ฆ ahemโ€ฆ link them to Home Assistant without the hassle. Not having the time or know-how shouldnโ€™t be a barrier to using the platform, and Link ensures it isnโ€™t.

On top of things that can only be done online, there are other features that just work better with Linkโ€™s connected services. For instance, online speech-to-text tends to be faster, supports more languages, and is more reliable than self-hosted alternatives. Likewise, Link offers a way to store a backup online, so your data is always recoverable while remaining private. Plus, if you run into trouble with a feature, we have real humans you can contact to help you out. You heard that right. A real person.

The new Nabu Casa account pageSee everything at a glance on our new account page.

Weโ€™re also constantly improving the service and are now working to add new features. You may have noticed the new, easier-to-use account page, the speech-to-text Labs test, or the new settings page in Home Assistant with a setup wizard. What you probably wonโ€™t notice is the massive backend update to improve the responsiveness of your remote access (weโ€™ve migrated to a new bare-metal setup that always tries to get you on the closest server, and itโ€™s fast ๐ŸŽ๏ธ). Most importantly, these updates let us add new security features, account management tools, and more.

Whatโ€™s in a name?

In the end, our actions speak louder than product names, and weโ€™ll continue to run a subscription thatโ€™s about privacy, transparency, and not locking users in, all the while supporting the development of Home Assistant.

Whenever features get renamed, we always come to you, the community, first. Even though this is a service from Nabu Casa, Home Assistant is a community project, and we value your opinion and thoughts. Love the new name? Something we didnโ€™t consider? Weโ€™re all ears. We intend to make the name change official in the December 2026.12 release, so please provide all your feedback well before then! ๐Ÿ‘‡

  •  

v0.8.11

What's Changed

  • fix(macos): press Back and Forward as the frontmost app's menu item by @AprilNEA in #1622
  • chore(nix): update flake.lock by @AprilNEA[bot] in #1217
  • fix(agent): recognize an overlay tenant by any image we ever shipped by @AprilNEA in #871
  • feat(linux): add verified release installer by @AprilNEA in #1109
  • ci(nix): only run Nix CI on flake and packaging changes by @davidbudnick in #1250
  • fix(macos): confirm desktop switches with private space APIs by @AprilNEA in #1586
  • fix(macos): drive the device-I/O gate from powerd instead of workspace notifications by @AprilNEA in #1323
  • fix(core): match Actions Ring layouts with the per-app selector by @AprilNEA in #643
  • chore: release v0.8.11 by @AprilNEA[bot] in #1637
  • fix: clear the lints rustc 1.99 raises on untouched code by @AprilNEA in #1638
  • chore: release v0.8.11 by @AprilNEA in #1643
  • chore: release v0.8.11 by @AprilNEA in #1644

Full Changelog: v0.8.10...v0.8.11

  •  

v0.8.10

What's Changed

  • feat(keyboard): key controls by HID++ control ID, fix Keys tab and Fn-lock by @AprilNEA in #1604
  • fix(macos): keep the hook from hearing the keys OpenLogi posts by @AprilNEA in #1618
  • fix(gui): unpair a forgotten receiver device so it stays deleted by @AprilNEA in #1617
  • fix(macos): press shortcut keys where the active layout types them by @guslipkin in #948
  • feat(core): add a Super modifier and make Win/Meta name it by @sungyongcho in #1387
  • fix(agent): re-arm a crash respawn instead of going dormant by @AprilNEA in #1619
  • fix(hook): give the macOS tap's capability probes their own watchdog budget by @hyspacex in #1282
  • fix(hook): give the callback watchdog the same watched-time rule by @AprilNEA in #1624
  • chore: release v0.8.10 by @AprilNEA[bot] in #1616

New Contributors

Full Changelog: v0.8.9...v0.8.10

  •  

v0.8.9

What's Changed

  • fix(gui): swap the thumb-wheel volume preset labels onto the pairing they describe by @4ni1ak in #1436
  • fix(hook): stop the GNOME frontmost observer leaking a socket per renewal by @sungyongcho in #1418
  • fix(gui): rebuild the agent's launchd registration when its job is gone by @raphaeljostan in #1303
  • fix(hook): hit-test the window under the pointer through AppKit by @pseudoseed in #1568
  • chore: release v0.8.9 by @AprilNEA[bot] in #1599

New Contributors

Full Changelog: v0.8.8...v0.8.9

  •  

v0.8.8

What's Changed

  • feat(hid): recognise Nano receiver 046d:c534 (MK270, MK295) by @4ni1ak in #1456
  • fix(agent): divert a single-bound gesture button by @pseudoseed in #1569
  • fix(gui): restore per-app profile removal and add reset controls by @AprilNEA in #1580
  • fix(gui): prefer firmware codename over catalog name for M650 variants by @4ni1ak in #1366
  • refactor(gui): simplify variant name correction ownership by @AprilNEA in #1585
  • chore: release v0.8.8 by @AprilNEA[bot] in #1573

New Contributors

Full Changelog: v0.8.7...v0.8.8

  •  

NVIDIA Driver 617.14

Release Highlights:
Although GeForce Game Ready Drivers and NVIDIA Studio Drivers can be installed on supported notebook GPUs, the original equipment manufacturer (OEM) provides certified drivers for your specific notebook on their website. NVIDIA recommends that you check with your notebook OEM for recommended software updates for your notebook.

Game Ready for CONTROL Resonant, Gears of War: E-Day, The Witcher 3: Wild Hunt โ€“ Remastered & AION 2
This new Game Ready Driver provides the best gaming experience for the latest new games supporting DLSS and RTX technologies including CONTROL Resonant, Gears of War: E-Day, The Witcher 3: Wild Hunt โ€“ Remastered and AION 2.

Fixed Gaming Bugs
  • Judgement/Lost Judgement/ Virtua Fighter 5 R.E.V.O. may fail to launch after updating to driver 616.56 [6681537]

Fixed General Bugs
  • No picture on Samsung Odyssey G95NC monitor when connected via HDMI after updating to R615 drivers [6771206]
  • Certain monitors may not wake from sleep when connected via DisplayPort after updating to R615 drivers [6757568]

Learn more in our Game Ready Driver article here.

Game Ready Driver

  •  

v0.8.6

What's Changed

  • refactor(gui): split app_icon around an AppIconExt trait by @AprilNEA in #1422
  • fix(gui): hold a config reload until the agent connects by @AprilNEA in #1416
  • refactor(ipc): own the client handshake once and guard it with ast-grep by @AprilNEA in #1424
  • refactor(core): name the process roles, host profiles, and environment knobs once by @AprilNEA in #1426
  • refactor(ipc,cli): bound the handshake once and give the CLI one agent door by @AprilNEA in #1427
  • refactor(core): build every worker runtime in one place by @AprilNEA in #1428
  • refactor(core): spell the app bundle's layout once by @AprilNEA in #1429
  • docs(infra): add openlogi workflow skills by @AprilNEA in #1409
  • docs(infra): refine agent guidance and diagnostic workflows by @AprilNEA in #1485
  • refactor(cli): give the command modules that carry code a file of their own by @AprilNEA in #1494
  • refactor(hidpp): split the pending-request queue and the mock channel out of channel.rs by @AprilNEA in #1495
  • refactor(hook): split the macOS backend by responsibility by @AprilNEA in #1496
  • refactor(hook): split the Linux backend into the evdev hook and the foreground watcher by @AprilNEA in #1497
  • chore: drop an unused dependency, a dead parameter, and stale docs by @AprilNEA in #1487
  • refactor(gui): let state mutators own their events and views share one relevance filter by @AprilNEA in #1505
  • refactor(gui): give write-on-release sliders one component by @AprilNEA in #1506
  • refactor(ipc): own the observe loop's connection state in one Observer by @AprilNEA in #1507
  • perf(gui): resolve each device's assets once per asset generation by @AprilNEA in #1508
  • refactor(gui): say what the state types are by @AprilNEA in #1509
  • refactor(core): give the key vocabulary one owner by @AprilNEA in #1488
  • refactor(core): give seven copied decisions one owner each by @AprilNEA in #1489
  • refactor(xtask): spell xtask's waits and its bundle builder in the workspace's vocabulary by @AprilNEA in #1490
  • ci(windows): run the tests on Windows by @AprilNEA in #1491
  • refactor(device): drop the capture paths nothing calls and type the session errors by @AprilNEA in #1500
  • refactor(core): split the config module by concern by @AprilNEA in #1511
  • refactor(device): split the inventory and probe modules by responsibility by @AprilNEA in #1512
  • refactor(device): call durations that bound a wait timeouts by @AprilNEA in #1513
  • refactor(device): run gesture and keyboard capture through one session skeleton by @AprilNEA in #1501
  • refactor(device): share one pending-restore token between capture and host switch by @AprilNEA in #1502
  • refactor(agent): run the capture watchers on one harness and name the device-access handles by @AprilNEA in #1503
  • refactor: say what eight identifiers are by @AprilNEA in #1517
  • refactor(camera): suffix the macOS backends like the other platforms' by @AprilNEA in #1518
  • refactor(gui): move the F-key geometry into function_row/key_points.rs by @AprilNEA in #1525
  • refactor(agent): move the device list and re-apply plan into orchestrator/devices.rs by @AprilNEA in #1526
  • refactor(gui): split the AppState tests by what they exercise by @AprilNEA in #1527
  • refactor(inject): run scripts and workflows once, over four platform hooks by @AprilNEA in #1529
  • refactor(core): split the config tests by what they exercise by @AprilNEA in #1530
  • refactor(device): split the inventory and gesture capture tests by what they exercise by @AprilNEA in #1531
  • refactor(agent): split the orchestrator tests by what they exercise by @AprilNEA in #1532
  • refactor(hidpp): split the channel tests by what they exercise by @AprilNEA in #1533
  • refactor(device): move the host-switch session's tests to host_switch/tests.rs by @AprilNEA in #1535
  • refactor(agent): move the button runtime's worker loop into button/worker.rs by @AprilNEA in #1536
  • refactor(inject): break the macOS injector into scroll, browser and SPI modules by @AprilNEA in #1537
  • refactor(gui): move the mouse view's binding labels and tests out of view.rs by @AprilNEA in #1538
  • refactor(gui): move the camera panel's row builders into controls/rows.rs by @AprilNEA in #1539
  • feat(gui): detect and display installation sources by @AprilNEA in #1515
  • docs(gui): mend the desktop crate's intra-doc links by @AprilNEA in #1541
  • chore: release v0.8.6 by @AprilNEA[bot] in #1481

Full Changelog: v0.8.5...v0.8.6

  •  

v0.8.5

What's Changed

  • fix(gui): resolve depot metadata named only by the manifest by @4ni1ak in #836
  • docs(gui): adopt upstream gpui kit skills by @AprilNEA in #1400
  • fix(linux): keep the generated systemd unit out of the user's tier by @AalmanSadath in #796
  • fix(hidpp): stop HID++ replies landing on the wrong request by @isleofgreg in #1286
  • feat(gui): enable supported button gestures by @juan-apa in #1167
  • fix(gui): restore stacked card layout under gpui-kit 0.6 by @AprilNEA in #1408
  • chore: release v0.8.5 by @AprilNEA[bot] in #1399

Full Changelog: v0.8.4...v0.8.5

  •  

v0.8.4

What's Changed

  • feat(i18n): migrate catalogs to semantic TOML keys by @AprilNEA in #1169
  • perf(i18n): avoid copying borrowed translations by @AprilNEA in #1184
  • fix(i18n): polish supported locale copy by @AprilNEA in #1180
  • fix(i18n): localize DPI steps and correct count labels by @AprilNEA in #1292
  • fix(i18n): polish Brazilian Portuguese profile and settings copy by @uricholiveira in #1276
  • fix(i18n): refine French asset and control descriptions by @didlawowo in #1278
  • fix(hid): keep pairing phase after device selection by @AprilNEA in #1181
  • refactor(gui): model camera preview lifecycle states by @AprilNEA in #1182
  • refactor(agent): consolidate capture manager slots by @AprilNEA in #1183
  • docs(linux): fix the Debian install command and the bug form's platform note by @AalmanSadath in #791
  • docs: add Russian README translation by @MonteNegroX in #1039
  • Fix typo in installation guide by @mikevankuik in #1189
  • fix(i18n): correct mistranslations in the Spanish catalog by @eibidia in #1315
  • feat(i18n): Updated French README.md file by @DimitriDR in #1271
  • fix: add Debian runtime dependencies by @MauricioSilv in #1249
  • fix(hook): normalize Windows cursor position to DIP scale by @fly530 in #1246
  • fix(agent): restore diverted HID++ controls on a clean shutdown by @4ni1ak in #1106
  • refactor(hook): type windows cursor dpi normalization by @AprilNEA in #1318
  • fix(linux): declare F13-F20 in uinput key capabilities by @costantinoai in #1224
  • fix(core): stop seeding Back/Forward with a divertable default by @litityum in #1225
  • fix(agent): fence queued pairing discovery after selection by @AprilNEA in #1320
  • fix(agent): avoid capture recovery deadline busy loops by @AprilNEA in #1321
  • test(gui): cover camera preview lifecycle by @AprilNEA in #1322
  • fix(gui): place Windows actions ring correctly across mixed-DPI monitors by @AprilNEA in #1319
  • fix(gui): stop linking SMAppServiceErrorDomain so macOS 13 and 14 can launch by @AprilNEA in #1324
  • feat(hid): add hardware-aware mock device record and replay by @AprilNEA in #1165
  • test(agent): cover native and browser side-button profiles by @AprilNEA in #1325
  • fix(macos): bind Safari navigation to press-time process by @foleykyle01 in #1082
  • fix(camera): surface startup failures and retry preview by @yuzi-co in #1069
  • chore(gui): upgrade to gpui kit 0.6.1 and published pre adapters by @AprilNEA in #1338
  • feat(hid): add rgb-effects lighting and receiver routing by @LuisUrrutia in #351
  • fix(gui): keep update consent buttons visible by @AprilNEA in #1398
  • fix(linux): preserve gesture capture across receiver probes by @yvvlee in #1043
  • chore: release v0.8.4 by @AprilNEA[bot] in #1179

New Contributors

Full Changelog: v0.8.3...v0.8.4

  •  

NVIDIA Driver 616.92

Release Highlights:
Although GeForce Game Ready Drivers and NVIDIA Studio Drivers can be installed on supported notebook GPUs, the original equipment manufacturer (OEM) provides certified drivers for your specific notebook on their website. NVIDIA recommends that you check with your notebook OEM for recommended software updates for your notebook.

Game Ready for 007 First Light, Active Matter, Aniimo & WARDOGS
Game Ready Driver which provides the best gaming experience for 007 First Lightโ€™s Path Tracing Update as well as the latest new games and updates supporting DLSS and RTX technologies including Matter, Aniimo, PUBG, and WARDOGS.

Fixed Gaming Bugs
  • N/A

Fixed General Bugs
  • Intermittent flicker may be observed in browsers when navigating to certain websites [6673430]
  • Fixed an issue where virtual displays could not be created after updating to driver 616.56 [6674464]
  • Remote Desktop Protocol (RDP) sessions may display a black screen after updating to driver 616.56 [6687328]

Learn more in our Game Ready Driver article here.

Game Ready Driver

  •  
โŒ