Anniversaries is a calendar-first Home Assistant integration for birthdays, weddings, memorials and other yearly or one-time dates. It creates a countdown sensor for each date, a native aggregate calendar and optional calendars per group.
Version 8 requires Home Assistant 2026.7 or newer. Existing version 7 and older entries are consolidated automatically into one integration with anniversary subentries. Existing sensor entity IDs and unique IDs are preserved.
- Configure every anniversary from the Home Assistant UI.
- Use a fixed date, a
date/input_datetimeentity or a tracked template. - Choose birthday, wedding, memorial or custom as the anniversary type.
- Organize dates into groups such as Family or Work; each group gets a calendar.
- Choose how 29 February behaves in non-leap years: 28 February, 1 March or leap years only.
- Show optional half-anniversary calendar events and attributes.
- Create, edit and remove dates from Home Assistant's native calendar UI.
- Export and restore the full collection as CSV or iCalendar text.
- Repair an invalid dynamic date source directly from Home Assistant Repairs.
- Download privacy-safe diagnostics: names, dates, entity IDs and templates are excluded.
- Enable the disabled-by-default date sensor when an automation needs the next occurrence as a native date value.
- Open HACS and search for Anniversaries.
- Install the integration and restart Home Assistant.
- Go to Settings > Devices & services > Add integration and select Anniversaries.
- Download
anniversaries.zipfrom the latest release. - Create
/config/custom_components/anniversariesif it does not exist. - Extract the contents of the zip into that directory.
manifest.jsonshould end up at/config/custom_components/anniversaries/manifest.json. - Restart Home Assistant and add the integration from Devices & services.
The integration has one top-level entry. Open it and use Add entry to add an anniversary. Each item can be reconfigured or removed independently.
Accepted fixed date formats are:
YYYY-MM-DDwhen the original year is known, for example1988-04-12.MM-DDwhen the year is unknown, for example04-12.
A one-time date must include a year. A dynamic entity must be from the date or
input_datetime domain. A template must render either of the accepted formats.
The integration updates immediately when the source entity or template changes.
Legacy YAML remains accepted and is imported into the UI automatically:
anniversaries:
sensors:
- name: Shakespeare's Birthday
date: "1564-04-23"
- name: Unknown year
date: "11-27"
anniversary_type: wedding
group: FamilyUI configuration is recommended for new installations.
Each anniversary creates a sensor whose state is the number of days until the
next occurrence. With Count up enabled it instead reports the days since the
most recent occurrence. The sensor uses Home Assistant's native d unit.
Useful attributes include date, next_date, weeks_remaining,
years_at_anniversary, current_years, anniversary_type, group and, when
enabled, half_anniversary_date and days_until_half_anniversary.
calendar.anniversaries expands every recurring date across the complete time
range requested by Home Assistant. Events use stable UIDs, are all-day events
and show the milestone year in the summary when the original year is known.
Calendar edits always apply to the complete anniversary series. A generated half-anniversary event cannot be edited separately.
Use Home Assistant's calendar trigger so notifications remain fully under your control:
automation:
- alias: Anniversary reminder
triggers:
- trigger: calendar
entity_id: calendar.anniversaries
event: start
offset: "-24:00:00"
actions:
- action: notify.mobile_app_phone
data:
title: Anniversary tomorrow
message: "{{ trigger.calendar_event.summary }}"Two response actions are available under Developer tools > Actions:
anniversaries.exportreturnscontent,formatandcount. Choosecsvfor a complete Anniversaries backup oricsfor calendar portability.anniversaries.importaccepts exportedcontentand itsformat. Matching stable IDs are updated; new IDs are created, so restoring the same export does not create duplicates.
Dynamic sources are exported as their currently resolved fixed date. This makes the export portable to another Home Assistant instance without requiring the same helper entities or templates.
- Multiple legacy integration entries become subentries beneath one hub.
- Existing registered sensor entity IDs remain linked during migration.
- Group calendars and the optional next-occurrence date sensors are new entities; adjust their entity IDs if Home Assistant resolves a name conflict.
- YAML keys
unit_of_measurement,date_formatandid_prefixremain accepted for migration but are ignored afterward. - A backup of Home Assistant before a major upgrade is always recommended.
Every change is checked with Ruff, a Home Assistant 2026.7 test environment, Hassfest, HACS validation and a 95% coverage threshold. See QUALITY.md for the maintained quality checklist.
Report problems through GitHub Issues. Please include the integration diagnostics from Home Assistant, which are safe to share but may still be reviewed before posting.