Skip to content

Releases

Right Time, Right Place

Choose a tag to compare

@github-actions github-actions released this 14 Nov 00:16
659d755

Version 1.4.0 gives every feed date a time-zone-aware companion, keeps your last feed on screen when a poll fails, and tightens how links and local files are handled.

Dates with a time zone

  • Every date now has an ISO 8601 companion. Dates left the integration only as text in your date_format, and the default format has no time zone, so a card had to guess. published, updated, created and expired, in entries and in channel, now come with published_iso and so on, for example 2026-11-13T19:12:37+00:00. The formatted value and date_format stay as they were. The companion follows its source key through inclusions, can be dropped on its own through exclusions, and is never shortened by max_text_length.
  • rss-accordion uses the new fields. The card now prefers the _iso values, so times are correct across time zones and a custom format such as %d.%m.%Y no longer breaks them. It still works with feeds from before this version.

A feed that survives a failed poll

  • The sensor keeps the last feed when a poll fails. Before, a failed poll made the sensor unavailable and the whole entries list vanished from cards. Now the sensor stays available, keeps the last good feed and sets stale: true until the next poll succeeds. A feed that never loaded is still unavailable. If an automation uses unavailable as an outage signal, use the stale attribute instead.

Links and local files

  • Relative links in the text are resolved too. Relative href and src values in the summary, content and subtitle HTML used to point at your Home Assistant host. They are now joined with the feed URL, as link and links[].href are. URLs such as javascript: are still removed.
  • Relative entry links are resolved. A relative link or links[].href is now joined with the feed URL even when the feed library supplies it.
  • file:// feeds are limited to allowed folders. Before, any file the Home Assistant user could read could be used as a feed. Now only the config directory and folders in allowlist_external_dirs work. Anything else is refused with an error that says how to allow the folder. The README lists which file:// feeds are allowed.

Smaller history, quieter log

  • Entries and channel stay out of the recorder. They were written to the history on every change. They are now left out, so the database stays small. The live state is unchanged and feed_url is still recorded.
  • The size warning measures what is recorded. It claimed the history would lose its attributes even for verbose feeds. It now only appears for an absurdly long feed URL, and says so.
  • Repeated problems are logged once. "No entries found" and "Unable to parse date" were warnings on every poll. The first occurrence per feed is still a warning, repeats go to debug.

Fixes and upkeep

  • README corrections. The example used description under inclusions where the key is summary, the date_format default was missing %Y, and scan_interval is a time period with a default of one hour, not hours.
  • Marketplace category. The integration is now filed under news and social media in Home Assistant 2026.11's Marketplace.
  • Home Assistant 2026.11 typing. The device info is built in a way that works on both older and newer Home Assistant.

Requirements

Unchanged: Home Assistant 2026.9.3 or newer.

Upgrading

Nothing to do after updating. New _iso attributes appear on the next poll. If you read local file:// feeds from outside the config directory, add that folder to allowlist_external_dirs. If an automation treats unavailable as a failed poll, switch it to the stale attribute.

Ready for 2026.11

Choose a tag to compare

@github-actions github-actions released this 03 Nov 11:39

Version 1.3.1 prepares the integration for Home Assistant 2026.11. Your feeds look and behave exactly as before.

Upkeep

  • The feed library follows Home Assistant. The integration asked for exactly the version of the feed library that Home Assistant's own Feed Reader ships. Once Home Assistant moves to a newer one, that exact request would no longer match. It now asks for that version or newer, so it keeps using the copy Home Assistant already has.
  • Installing from the Marketplace. Home Assistant 2026.11 replaces HACS with the built-in Marketplace. The README now explains how to add this integration there as a custom repository, and in HACS on earlier versions.

Under the hood, the setup and options dialogs now use Home Assistant's current validation library directly.

Requirements

Unchanged: Home Assistant 2026.9.3 or newer.

No Longer Turned Away

Choose a tag to compare

@github-actions github-actions released this 25 Sep 23:29

Version 1.3.0 gets feeds past servers that refused them, and when a feed still can't be added, the setup dialog tells you why.

Feeds that said no

  • Feeds that blocked the integration load again. [#7] Some servers refused the integration's requests, so feeds like aidoende.nl couldn't be added at all. The integration now asks in a way those servers accept, both when you add a feed and on every update.
  • Clear error messages. [#7] Every failure used to say "Failed to connect". The setup dialog now tells you whether the server refused access, needs a login, or has no feed at that address. The same messages appear when you move a feed to a new URL with Reconfigure.

Devices and parsing

  • A feed shows up as a service. Home Assistant now lists each feed under the integration's services instead of its devices. It's the same device, with the same name and area.
  • More robust parsing. The feed library is updated to the version Home Assistant's own Feed Reader uses. It fixes a crash on badly formed feeds, and Home Assistant doesn't need to install a second version of it.

If you already have feeds

Nothing to do. Entity IDs, names and history stay as they are. Worth knowing:

  • Feed devices move to the services list after the first start. They keep their name and area.
  • Templates that read the feed's icon from its attributes get nothing back now. The icon looks the same in the UI; only the icon attribute is gone, unless you set an icon yourself.
  • Home Assistant 2026.9.3 or newer is required. HACS doesn't offer the update to older versions.

Safer Feeds, Smaller Sensors

Choose a tag to compare

@github-actions github-actions released this 11 Sep 18:19

Version 1.2.0 takes what a feed publishes seriously: markup is cleaned before it ever reaches a card, and a feed can no longer fill its sensor with more than Home Assistant is willing to store. Feeds also stop being write-once — one can be pointed at a new address without being rebuilt, and every sensor now says which feed it polls.

What a feed can put on your dashboard

  • Feed content is cleaned before it leaves the integration. Scripts, style blocks, event handlers such as onerror and javascript: links are removed from every value the sensor exposes — summaries, content, titles, authors and the feed level values. A feed could previously put a script into a dashboard through any card that renders its HTML. Feed markup is still publisher content and deserves the same caution as before, but it no longer arrives live.
  • Link, image and audio URLs are checked too. They end up as an href or a src, so a javascript: or data: URL is dropped rather than handed to a card.

A history the recorder actually keeps

  • Fewer entries are kept, by default. Feeds added through the UI used to keep up to 9999 entries with the full article text, which pushed the sensor past the recorder's 16 KiB limit — so its history was stored without any attributes at all. The new default is the newest 5, and you can raise show_topn again whenever you like.
  • Long text is shortened to 250 characters. The new max_text_length option controls it; set it to 0 to keep the full article text. Text is cut at a tag boundary and any open markup is closed again, so a shortened summary never ends inside a tag. Links, images, audio URLs and ids are never shortened.
  • Download diagnostics. The config entry now offers a diagnostics download: the settings in effect, whether the last poll worked, how many entries and which fields came out of it, and how close the sensor is to that 16 KiB limit. Entry texts are left out and the feed URL is reported redacted, so the file is safe to attach to an issue.

Feeds you can find, read and move

  • A feed can be pointed at a new URL. [#5] Use Reconfigure on the integration entry to change the address a feed is polled from — a new domain, a reverse proxy in front of a self hosted feed, a changed subscription token. The sensor keeps its entity id, its history, its name and its area, so the cards, templates and automations that use it keep working. Until now the only way was to delete the feed and add it again, which left all of that behind.
  • Each sensor shows which feed it polls. [#5] A feed_url attribute carries the address, on UI and YAML feeds alike, so state_attr('sensor.my_feed', 'feed_url') or Developer tools > States answers it without opening the feed's configuration.
  • Every feed gets its own device. A feed added through the UI appears as a device named after the feed, linking to the feed URL, with its sensor attached. Sensors keep the names and entity ids they had.
  • YAML feeds appear in the entity registry. They can be renamed, hidden or assigned to an area like any other entity. As long as you leave name and feed_url alone, the sensor keeps its entity id and everything you set on it.

Setting one up

  • An address has to actually serve a feed. Adding a feed now checks that the URL returns RSS or Atom. An ordinary web page is rejected with a clear message instead of becoming an entry whose sensor sits at 0 forever. The same check runs when you change a feed's URL.
  • Inclusions and Exclusions are pickers. Instead of typing a comma separated list, you pick field names from a dropdown and can still type your own. Feeds configured the old way are converted on upgrade and keep filtering exactly as before.
  • German translations. The setup, reconfigure and options forms are all available in German.

Fixes

  • Dates that cannot be read are left out. A date the parsers did not understand used to be replaced with the current time, so the entry looked freshly published and moved on every poll. It now simply has no date, and the log names the value that could not be read.
  • Two awkward feed dates no longer take the poll down. A malformed date could raise out of the parser and leave the whole feed unfetched rather than costing that one entry its timestamp.
  • An entry with nothing left in it is skipped. Inclusions narrow enough to empty an entry used to leave a blank item in the list.

Good to know

Upgrading changes two settings on feeds you already have, and only where nobody chose them. A UI feed still carrying 9999 entries — the old form's own default, not a choice — is moved to 5, as is any stored value below 1, which showed nothing at all. A number you picked yourself is left alone. YAML feeds are not capped: they keep every entry unless you set show_topn yourself, because their state is the number of entries and capping it would rewrite what their recorder history means.

Changing name or feed_url on a YAML feed — or removing it from configuration.yaml — still creates a new entity and leaves the old one behind as unavailable; delete it under Settings > Devices & Services > Entities. If you want a rename to keep the sensor's identity, use a UI entry, which is identified by its config entry rather than by its name.

Your Feeds, Your Schedule

Choose a tag to compare

@github-actions github-actions released this 10 Aug 22:23

New Feature: Set the update interval per feed, right in the UI.

Every feed now has its own Update interval (minutes) field — both when you add it and later under Configure. Anything from 1 minute to a full week. A Gitea feed you want checked every couple of minutes and a news feed that only changes a few times a day no longer have to share one schedule.

Requested in #3.

Why it matters:
Until now the interval was only reachable from YAML. Worse, UI-configured feeds ignored the intended one-hour default entirely and polled every 30 seconds — Home Assistant's platform default — which meant every feed you added through the UI was being fetched 120× more often than intended.

⚠️ After upgrading, feeds added through the UI poll every 60 minutes. If you relied on the old fast polling, set the interval explicitly under Configure. YAML scan_interval keeps working unchanged.

Under the hood:
Fetching and parsing moved behind a DataUpdateCoordinator, the pattern Home Assistant recommends for polling integrations.

  • Feeds are now fetched with aiohttp through Home Assistant's shared client session; the requests and requests-file dependencies are gone.
  • Fetching (api.py), parsing (parser.py) and polling (coordinator.py) are separate modules, so the sensor holds no I/O logic.
  • A feed that fails temporarily now recovers on its own at the next poll, and a feed that is unreachable at startup retries with backoff instead of failing silently.

No configuration changes are required. Existing feeds, YAML and UI alike, keep working.

Year-Proofing RSS Dates

Choose a tag to compare

@github-actions github-actions released this 06 Apr 05:59

Bug Fix: Added explicit year (%Y) to the default date format.

Why it matters:
Omitting the year in previous versions caused frontend Lovelace cards (like the RSS Accordion) to occasionally guess the wrong year. By enforcing an explicit year from the backend, your dashboard will now parse and render the correct timestamp every time.

No 500 when modifying

Choose a tag to compare

@github-actions github-actions released this 06 Apr 04:35

What's Changed

  • Fix Configuration Error 500 when modifying Integration Options Flow (#2)
  • Updates deprecations related to the newer Home Assistant Architecture configurations

Smarter Parsing, Robust Images, and Better Compatibility

Choose a tag to compare

@github-actions github-actions released this 27 Mar 07:00

Enhancements

  • Nested Attribute Support [#1]: Parses complex, duplicate XML tags natively. Lists and dicts from feeds are now directly exposed as Home Assistant sensor attributes instead of being ignored.
  • Improved Image URLs: Automatically resolves relative image links into absolute URLs, fixing broken thumbnails for feeds like Telegraaf.nl.

Bug Fixes

  • Enhanced Feed Reliability: Relaxed restrictive HTTP Accept headers. This prevents servers like FD.nl from confusing the parser by serving internal XSLT/backend XML layouts instead of standard RSS feeds.

Add Brand logo

Add Brand logo Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Mar 10:22

Add brand assets, bump version, improve entity naming, and refactor config flow initialization

Seamless Feed Access

Choose a tag to compare

@github-actions github-actions released this 18 Feb 11:33

This release focuses on improving connection reliability and bypassing common security filters encountered with certain RSS feed providers.

Improvements

  • Enhanced Cloudflare Bypass [#1]: Implemented a comprehensive set of browser-like headers and a realistic User-Agent to prevent "403 Forbidden" errors when fetching feeds protected by Cloudflare or similar services.
  • Improved Validation: The configuration flow now uses the same robust connection logic to ensure feeds are correctly validated during setup.
  • Version Alignment: Synced internal versioning across manifest, project metadata, and sensor code for consistency.