2025.5: Two Million Strong and Getting Better
Home Assistant 2025.5! 🎉
It’s time for the May release, and we have a lot to talk about! But before we do, I want to quickly touch on things that happened in the last month that you might have missed…
We recently hosted our State of the Open Home event—a live streamed show
2,000,000 active installations of Home Assistant worldwide! 🎉
Read more about the State of the Open Home in this summarized blog post
A community of 2 million households is something to celebrate! And we are
doing that by gathering together in person on Home Assistant Community Day
Check out the Home Assistant Community Day 2025 blog post for more information!
Ok, the May release, really, I love this one! It is filled to the brim with quality of life improvements that I’m sure you will love. 🥰
The quest for a great backup system is continuing this release, shipping
quite the list of improvements, most notably the ability to set a retention
policy per backup location! Nabu Casa
But… there is more! Z-Wave gets Long Range support 📶, you can now copy and paste YAML automation snippets directly in our automation UI, a new tool to monitor the device discovery process in Home Assistant, and–my personal favorite–the improved experience when you pick an entity anywhere in the UI. 🤩
Enjoy the release!
../Frenck
- Another iteration of the backup system
- Lots of new text-to-speech voice variants for Home Assistant Cloud subscribers
- Picking entities
- Z-Wave Long Range support and improved Smart Start
- Integrations
- Other noteworthy changes
- Badges on the dashboard can now be wrapped or scrolled
- Improved UI experience when using templates in automations & scripts
- Pasting automations and scripts YAML directly into the UI
- Discover what Home Assistant is discovering
- Need help? Join the community!
- Backward-incompatible changes
- All changes
Another iteration of the backup system
In our January release, we did the first overhaul of the backup system. In the February release, we did an iteration based on your feedback. In this release, we dedicated even more time to iterate and improve backups even further.
Let’s dive in!
Per location backup retention policy settings
This release adds a much-requested feature: the ability to set a backup retention policy per location. This is particularly useful if you have multiple backup locations configured in Home Assistant.

It might be that one of your backup locations has more storage space than another, or that you want to keep more backups in one location than another. For example, maybe you have space to store the last 3 backups in your Google Drive, but you want to keep 25 backups on your local NAS server.
Backup before upgrading the Home Assistant Operating System
Updating the Home Assistant Operating System is as easy as clicking a button. And while the upgrade process has a fallback mechanism in case the upgrade process fails, it is always a good idea to have a recent backup in multiple locations before you start the upgrade process.
To help you with that, the update dialog for the Home Assistant Operating System now includes the option to create a backup before starting the upgrade process. Selecting this will create a backup that follows the same settings as your automatic backups (and if you don’t have that configured yet, it will just backup your settings, history, and add-ons), uploading this to all enabled backup locations before starting the upgrade process.

This way, you can be sure that you have a backup of your system before upgrading, even if something goes wrong beyond the safeguards of the operating system upgrade.
Set the default backup preference for upgrades
The above option to backup before upgrade is great, but the feedback on the toggle to create a backup before upgrade is mixed. Some of you prefer to always backup before upgrading, while others rely on their scheduled backups and don’t want to be bothered with the backup process whenever they upgrade a part of Home Assistant.
To please both groups, we have added a new setting to the backup settings page to set the default behavior for the backup before upgrade toggle.

When you set the option to “Backup before upgrade”, the toggle will be enabled by default, otherwise it will default to disabled. There is an additional option to set this behavior for add-ons as well, so you can tweak it to your liking.
Waiting for the backup to finish on restarts
Another small but important improvement is that if you initiate a restart of Home Assistant while a backup is in progress, your system will wait for the backup to finish before restarting.

This prevents the unintended situation where a backup is in progress, and you abort the process by restarting Home Assistant.
Lots of new text-to-speech voice variants for Home Assistant Cloud subscribers
If you are subscribed to Home Assistant Cloud
This release extends the already staggering number of text-to-speech voices, but also now includes voice variants and styles. This means that you can now choose between different voice styles and tones, such as “friendly”, “angry”, “sad”, “whisper”, etc., allowing you to customize your announcements to fit the mood and context of the situation.

Overview of new voice options
We’ve expanded our voice selection dramatically, with some languages seeing huge increases in available options:
Language | Old choices | New choices |
---|---|---|
Assamese (India) new | 0 | 2 |
German (Germany) | 15 | 17 |
English (United Kingdom) | 14 | 20 |
English (India) | 2 | 13 |
English (United States) | 25 | 132 |
Spanish (Spain) | 15 | 18 |
Spanish (Mexico) | 15 | 23 |
French (Canada) | 3 | 4 |
French (France) | 14 | 22 |
Hindi (India) | 2 | 12 |
Italian (Italy) | 15 | 24 |
Inuktitut (Canadian Aboriginal Syllabics, Canada) new | 0 | 2 |
Inuktitut (Latin, Canada) new | 0 | 2 |
Japanese (Japan) | 7 | 10 |
Korean (Korea) | 8 | 10 |
Oriya (India) new | 0 | 2 |
Punjabi (India) new | 0 | 2 |
Portuguese (Brazil) | 15 | 17 |
Serbian (Latin, Serbia) new | 0 | 2 |
Chinese (China) | 21 | 142 |
Picking entities
We are working on improving the context of things shown in the UI. This is to ensure you always know which device or entity you are looking at, no matter where you are in the Home Assistant interface.
In the last release, we already had a small noteworthy change regarding this. We added the device and area to the entity information dialogs, so you always know exactly which entity you are viewing.
In this release, we have improved the context provided within the entity pickers in our UI. This is the dropdown you see when you select an entity in, for example, a card, automation, or script. This picker will now show the device and area name as well!

This enhancement gradually eliminates the need for you to manually rename entities or devices to include location information—giving you a much better out-of-the-box experience with less setup work.
Not only has the visual appearance of the picker improved, but the search functionality has been completely overhauled too! 🔎 Finding the exact entity you’re looking for is now significantly easier thanks to a smarter search algorithm and the addition of more contextual information in the matching process.
You might notice that the entity ID isn’t shown in the picker anymore!
We think we are at a point where you may solely rely on the UI and the entity ID is not needed anymore. However, if you do prefer to see the entity ID in this drop down, you can enable it in your profile settings.

To do so, select your profile picture in the bottom left corner of the Home Assistant UI, and under User settings enable the Display entity IDs in picker option.
Z-Wave Long Range support and improved Smart Start
We are providing quite a few enhancements to the Z-Wave integration and
experience in this release. Our commercial partner Nabu Casa
This release, we improved the whole experience in setting up new Z-Wave devices, including improved support for setting up new Z-Wave devices by scanning the Smart Start QR code.
Z-Wave Smart Start QR scanning now works natively in our mobile companion apps, removing browser limitations. Added devices are immediately visible in Home Assistant, even if the device is not yet powered on. Once powered on or rebooted, the device will automatically be added to your Z-Wave network.
The most exciting part of this release is the addition of Z-Wave Long Range support. This is a new Z-Wave technology that allows devices to communicate over much longer distances than traditional Z-Wave devices. This is especially useful if you have a specific device that needs to be placed far away, for example, a contact sensor on a gate or mailbox up your driveway.
You can choose if you want to add the Z-Wave device to the existing mesh network
or connect it directly using Long Range.
After scanning the QR code of a Long Range capable device, you will get the option to either add it to the existing mesh network or connect it directly using Long Range. Both have pros and cons, mesh networking is recommended for most devices, but if you have a device that needs to be placed far away, Long Range might be the better option.
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:
-
AWS S3, added by @tomasbedrich
Use an Amazon S3 storagebucket as a backup location for your Home Assistant backups. -
Imeon Inverter, added by @Imeon-Energy
Integrates your Imeoninverter, allowing you to monitor your home battery and solar usage in the energy dashboard. -
Miele, added by @astrandb
Monitor and control your Miele home appliances, including washing machines, dryers, dishwashers, and more! -
ntfy, added by @tr4nt0r
Integrates with ntfy.sh, a simple HTTP-based pub-sub notification service that allows you to send notifications to your phones or desktops. -
Rehlko, added by @PeteRager
Monitor the status of your Rehlko (formerly Kohler Energy Management) enabled Kohler generator.
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:
-
Balay, provided by Home Connect, added by @Diegorro98
-
Constructa, provided by Home Connect, added by @Diegorro98
-
Gaggenau, provided by Home Connect, added by @Diegorro98
-
Google Gemini, provided by Google Generative AI, added by @tronikos
-
Maytag, provided by Whirlpool, added by @abmantis
-
National Grid US, provided by Opower, added by @tronikos
-
Neff, provided by Home Connect, added by @Diegorro98
-
Pitsos, provided by Home Connect, added by @Diegorro98
-
Profilo, provided by Home Connect, added by @Diegorro98
-
Siemens, provided by Home Connect, added by @Diegorro98
-
Thermador, provided by Home Connect, added by @Diegorro98
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 integrations are also being constantly improved. Here are some of the noteworthy changes to existing integrations:
- The OpenAI Conversation integration now supports PDFs in the
openai_conversion.generate_content
action, meaning it can now, for example, summarize PDF reports for you. Great work @Shulyaka! -
@allenporter
added a new LLM tool for fetching to-do list items, enabling you to interact with the contents of your to-do lists via voice or chat assistants. Awesome! - The HomeKit Bridge integration now has support for air purifiers!
Thanks @MaartenStaa
! -
@frenck
extended the YouTube integration, allowing you to monitor your own YouTube channel 📺. Nice! - The HEOS integration received multiple improvements from @andrewsayre
, including the ability to add items to the play queue and remove queued items. - Thanks to @Danielhiversen
, the Mill integration now includes statistics, making it possible to track your heating energy usage over time. Great! - The Xiaomi BLE integration now supports the Body Composition Scale S400,
thanks @zry98
! -
SwitchBot now supports Roller Shade
and HubMini Matter devices. Nice job @zerzhang ! -
@lezmaka
worked on the Synology DSM integration, which now includes support for external USB drives, allowing you to monitor external storage. Nice! - The La Marzocco integration has been extended with additional sensors and
statistic entities, providing better insights into your coffee machine’s performance.
Great additions @zweckj
!
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:
-
4 integrations reached platinum 🏆
-
Ohme, thanks to @dan-r
-
Vodafone Station, thanks to @chemelli74
-
ESPHome, thanks to @bdraco
-
Enphase Envoy, thanks to @catsmanac
-
Ohme, thanks to @dan-r
-
2 integrations reached silver 🥈
-
2 integrations reached bronze 🥉
-
Whirlpool, thanks to @abmantis
-
UptimeRobot, thanks to @chemelli74
-
Whirlpool, thanks to @abmantis
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 integration is now available via the Home Assistant UI:
-
STIEBEL ELTRON, done by @ThyMYthOS
Farewell to the following
The following integrationsIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] are also no longer available as of this release:
- Oncue by Kohler has been removed because the app by Kohler has been discontinued.
Other noteworthy changes
There are many more improvements in this release; here are some of the other noteworthy changes this release:
- Did you know Home Assistant actually has keyboard shortcuts for all kinds of
things? No? Well… if you are curious to learn, after upgrading, press
?
anywhere in the UI to see a list of all available keyboard shortcuts. Nice addition @jpbede! - Support for the Matter 1.4 water heater device type has been added.
Thanks, @lboue
! - When setting up a new device in Home Assistant, you can now directly name
it during the setup process. Nice! Thanks, @bramkragten
! - Media players now have an action to search using the
media_player.search_media
action. Thanks, @zweckj! -
@piitaya
added a device_name
template function to get the name of a device in Home Assistant. Cool! - The
floor_id
andarea_id
template methods have been enhanced by @formatBCEto also look for floors or area aliases. Awesome! - We now have support for trigger-based template entities for switches and
lights. Amazing work @Petro31
! - Support for modern YAML-syntax was also added to the cover template entities
by @Petro31
. Nice! -
@frenck
added support for detecting Home Assistant Container installation types not running in host networking mode. This is important for Home Assistant to function properly. It raises a repair issue if it detects this. - A long-standing issue with iOS and the dropdown items in our user interface has been fixed! No longer will it select the wrong item when you tap on it while the dropdown is open and the keyboard is shown.
Badges on the dashboard can now be wrapped or scrolled
A cool little new feature for dashboards landed this release, which we don’t want to rush past unnoticed. The behavior of the badges in the header of a dashboard view can now be configured to either wrap or scroll.
Wrap was the original and is still the default behavior, but if you have a lot of badges and primarily use a mobile device, scrolling might be a better option for you.

Improved UI experience when using templates in automations & scripts
If you are a power-user, using templates in your automations and script, you are probably familiar with the fact that the UI falls back to using YAML for any action block that contains a template.
@karwosts
So, instead of falling back to pure YAML for the whole block, it now only falls back to a code editor for fields containing an action template. This means the rest of the UI—for all other action fields—remains intact and you can still use the UI to edit the rest.
As you can see in this screenshot below, the brightness is set using a template, which is no problem, as the rest of the action is still editable in the UI.

This is a great improvement for power users, as it allows you to use the UI for most of the automation or script, while still being able to use templates where needed. It also makes it easier to understand the automation or script, as you can see the context of the template in the UI.
Great improvement there @karwosts
Pasting automations and scripts YAML directly into the UI
Found this great automation or script example in our documentation or the community forums, but it is shared in YAML format? No problem! You can now paste the YAML directly into the UI.
When you are editing an automation, you can now simply paste the YAML directly into the UI editor and it will be converted to the UI format. This is regardless of whether the pasted example is a full-blown automation or just a single trigger, condition, or action.
An amazing quality of life improvement, contributed by @jpbede
Discover what Home Assistant is discovering
Home Assistant is constantly scanning your network for new devices and integrations using all sorts of discovery protocols. This greatly improves your experience, as it allows you to easily add new devices to your Home Assistant installation.
However, sometimes, you might want to know what Home Assistant is seeing
or wonder why a certain device is not being discovered. To help with that
@bdraco

You can find these new tools in Settings > System > Network. At the bottom of that page, you will find the ability to browse all the things Home Assistant is seeing on your network for each of the discovery protocols.
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 at, and don’t forget to join our amazing forums.
Found a bug or issue? Please report it in our issue tracker
Are you more into email? Sign-up for our Building the Open Home Newsletter to get the latest news about features, things happening in our community and other news about building an 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:
Theming & Typography
In this release, we’ve made foundational updates to our theming system, which include backwards incompatible changes:
-
Polymer Components Removed: Legacy Polymer-based components have been fully removed. As a result, all related
paper-*
CSS variables have also been removed.- Some variables have been migrated to new theme tokens.
- Others were outdated and have been removed entirely.
-
New Typography Variables: We’ve introduced a new set of typography CSS variables to lay the groundwork for a more consistent and modern UI.
- These are part of an ongoing refactor and are not yet in use everywhere. More adoption will follow in future releases.
If you’re maintaining custom cards or themes, please update any usage of the following variables accordingly.
✅ New tokens
--ha-font-family-body
--ha-font-family-heading
--ha-font-family-code
--ha-font-family-longform
--ha-font-size-scale
--ha-font-size-2xs
--ha-font-size-xs
--ha-font-size-s
--ha-font-size-m
--ha-font-size-l
--ha-font-size-xl
--ha-font-size-2xl
--ha-font-size-3xl
--ha-font-size-4xl
--ha-font-weight-light
--ha-font-weight-normal
--ha-font-weight-medium
--ha-font-weight-bold
--ha-font-weight-body
--ha-font-weight-heading
--ha-font-weight-action
--ha-line-height-condensed
--ha-line-height-normal
--ha-line-height-expanded
--ha-font-smoothing
❌ Removed tokens
--paper-font-common-nowrap_-_text-overflow
--paper-font-display1_-_letter-spacing
--paper-font-headline_-_letter-spacing
--paper-font-common-base_-_font-family
--paper-font-common-base_-_-webkit-font-smoothing
--paper-font-common-code_-_font-family
--paper-font-common-code_-_-webkit-font-smoothing
--paper-font-common-nowrap_-_white-space
--paper-font-common-nowrap_-_overflow
--paper-font-title_-_overflow
--paper-font-title_-_text-overflow
--paper-font-title_-_text-overflow
--paper-font-title_-_white-space
--paper-item-body-two-line-min-height
--paper-time-input-justify-content
--paper-item-body-three-line-min-height
--paper-item-icon-width
--paper-card-header-color
--paper-dialog-color
--paper-font-headline_-_white-space
--paper-font-headline_-_overflow
--paper-font-headline_-_text-overflow
--paper-font-subhead_-_white-space
--paper-font-subhead_-_overflow
--paper-font-subhead_-_text-overflow
--paper-item-icon-active-color
--paper-listbox-background-color
🔄 Migrated tokens
--code-font-family → --ha-font-family-code
--paper-font-title_-_-webkit-font-smoothing → --ha-font-smoothing
--paper-font-headline_-_-webkit-font-smoothing → --ha-font-smoothing
--paper-font-display1_-_-webkit-font-smoothing → --ha-font-smoothing
--paper-font-subhead_-_-webkit-font-smoothing → --ha-font-smoothing
--paper-font-body1_-_-webkit-font-smoothing → --ha-font-smoothing
--paper-font-display1_-_font-family → --ha-font-family-body
--paper-font-display1_-_font-size → --ha-font-size-4xl
--paper-font-display1_-_font-weight → --ha-font-weight-normal
--paper-font-display1_-_line-height → --ha-line-height-condensed
--paper-font-headline_-_font-family → --ha-font-family-body
--paper-font-headline_-_font-size → --ha-font-size-2xl
--paper-font-headline_-_font-weight → --ha-font-weight-normal
--paper-font-headline_-_line-height → --ha-line-height-condensed
--paper-font-title_-_font-family → --ha-font-family-body
--paper-font-title_-_font-size → --ha-font-size-xl
--paper-font-title_-_font-weight → --ha-font-weight-medium
--paper-font-title_-_line-height → --ha-line-height-normal
--paper-font-subhead_-_font-family → --ha-font-family-body
--paper-font-subhead_-_font-size → --ha-font-size-l
--paper-font-subhead_-_font-weight → --ha-font-weight-normal
--paper-font-subhead_-_line-height → --ha-line-height-normal
--paper-font-body1_-_font-family → --ha-font-family-body
--paper-font-body1_-_font-size → --ha-font-size-m
--paper-font-body1_-_font-weight → --ha-font-weight-normal
--paper-font-body1_-_line-height → --ha-line-height-normal
--paper-item-icon-color → --state-icon-color
17TRACK
The previously deprecated state attributes for the 17TRACK entities have been removed.
If you relied on these attributes in your automations or scripts, you will need to update them to use the dedicated sensors instead.
(@joostlek
AVM FRITZ!SmartHome
The AVM Fritz!Smarthome has a concept of devices and units. A device can have multiple units with different features. We now merge all units of a device into one entry representing the physical device.
As this might remove existing devices and create new ones, you should check your automations and scripts to see if they need to be adjusted to the new device registry entries.
(@mib1185
All the extra state attributes of the climate entity got migrated to their own entities. With this these attributes are deprecated and will be removed in Home Assistant 2025.11.
If you rely on these attributes in your automations or scripts, you will need to update them to use the dedicated sensors instead.
(@mib1185
Generic Thermostat
The switch targeted by the Generic Thermostat is now only turned on when the current temperature falls outside the target temperature range (target_temp +- tolerances).
Previously, it would also turn on when the temperature was equal to the limit of the target range.
(@esand
HomeKit Bridge
The name configured in Home Assistant now takes precedence for the following HomeKit child accessories:
- Fan presets (switches)
- Media player sources (switches)
- Power strips (Input Select, etc) (outlets)
- Triggers (stateless programmable switches)
This fixes an issue where the name is missing in HomeKit for these child accessories. The downside is that the name provided by Home Assistant has to be changed in Home Assistant (where applicable).
(@bdraco
Google Maps Travel Time
Google has deprecated the Distance Matrix API. The new Routes API does not
provide the state attributes Destination addresses
and Origin addresses
anymore.
The amount of free requests got halved, resulting in the sensor now refreshing every 10 minutes instead of every 5 minutes.
(@eifinger
La Marzocco
La Marzocco released the gateway firmware v5 last month, which stopped supporting local communication. We now fully support this firmware; support for older firmware has been dropped.
The following entities and controls are missing, either because they are no longer supported by the app or not part of the new library version yet:
- Steam & coffee boiler temperatures
- Shot timer sensor
- Scale support
- Steam temperature number
- Prebrew & Preinfusion numbers
(@zweckj
Network UPS Tools (NUT)
The status sensor has changed, providing the state from the UPS Display.
Previously, multiple states would be concatenated using a space, which made them harder to read and process. As of this release, multiple statuses are separated using a comma instead.
(@bonanitech
The scan interval option has been removed from NUT. Scans default to once every 60 seconds. If needed, an integration-independent and common method can be used to set a custom polling interval.
(@tdfountain
Opower
If you return energy to the grid, you will have to reconfigure your energy dashboard.
For improved experience in the energy dashboard, negative energy consumption/cost values have been separated into two dedicated return/compensation statistics.
Add Opower {utility name} elec {account number} return
under
Return to grid to see return energy statistics. Track return compensation
using Opower {utility name} elec {account number} compensation
.
(@parkerbxyz
Overkiz
Previously, for Atlantic Electrical Towel Dryer devices, the ‘auto’ HVAC mode in Home Assistant was mapped to the ‘prog’ mode in Overkiz.
Now, the ‘auto’ mode in Home Assistant will correspond directly to the ‘auto’ mode in Overkiz, while the ‘prog’ mode can be selected using presets.
(@iMicknl
Persistent notifications
Persistent notifications are no longer created when devices are discovered.
Automations that trigger on the persistent notification
config_entry_discovery
should be updated to instead trigger on the
event config_entry_discovered
.
(@emontnemery
Total Connect
The previously deprecated state attributes for the Total Connect alarm control panel have been removed.
If you relied on these attributes in your automations or scripts, you will need to update them to use the dedicated sensors instead.
(@joostlek
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 2025.5