Upgrade Path

Home Assistant Core 2025.4.0 → 2025.5.0

5 versions, 12 breaking changes in 1 version, 0 required stops

Version by version, oldest first

2025.4.1 – 2025.4.4: no action items (4 versions)

2025.5.0 2025-05-07

Quoted from www.home-assistant.io/blog/2025/05/07/release-20255/#backward-incompatible-changes

Breaking

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

Breaking

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 - #142622) (documentation)

Breaking

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 - #142845) (documentation)


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 - #143394) (documentation)

Breaking

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 - #138209) (documentation)

Breaking

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 - #142531) (documentation)

Breaking

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 - #140691) (documentation)

Breaking

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 - #142098) (documentation)

Breaking

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 - #141335) (documentation)


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 - #141845) (documentation)

Breaking

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 - #135258) (documentation)

Breaking

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 - #143243) (documentation)

Breaking

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 - #141546)

Breaking

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 - #142625) (documentation)

Full release notes for 2025.5.0

Release notes from github.com/home-assistant/core/releases, and the official release blog, checked 18 hours ago. Only text the vendor marks as breaking, or puts in a warning/caution/important note, is shown; read the full notes for anything else. Home Assistant lists its breaking changes in the “Backward-incompatible changes” section of each monthly release post on home-assistant.io (2020.12 onward). Each entry of that section is quoted as “Breaking” on the x.y.0 release, under the integration name the post gives it. The post’s “Farewell to the following” section (integrations removed in that release, 2020.12–2024.5) is quoted whole as “Note”. The post's separate section for custom integration developers is not quoted. Patch releases are listed but their notes (lists of fixes) are not quoted. Versions come from PyPI (package homeassistant).