Hi all,
Annuals is an integration for tracking yearly-recurring events — birthdays, holidays, anniversaries, name days, memorials, pet birthdays, work anniversaries, or anything custom (even one-time events).
Why you’d want this
- Never miss a birthday or anniversary again — get notified the morning of, or a week ahead of a milestone, using whatever notification setup you already have (mobile app, TTS, Alexa, …) or the bundled reminder blueprint, which sets that up for you with no YAML.
- Know at a glance which occurrence it is — “Anna turns 30” instead of just “Anna’s birthday”, computed automatically from the year you entered once.
- Highlight who and what matters most — flag close family as VIP so they always stand out, and let round-number milestones (18th, 30th, 50th, …) mark themselves as Important automatically — no manual bookkeeping every year.
- Import a whole country’s public holidays in a few clicks, categorized (public, bank, school breaks, religious, …), with a choice between each holiday’s actual date, its practically-observed date (many countries shift a weekend holiday to a nearby weekday), or both.
- Bring in a whole contact list at once via CSV, ICS calendar, or vCard import, instead of adding entries one by one.
- See it all on your dashboard, styled to match your setup, without touching YAML (incl. your existing calendars).
Everything is config-flow/UI driven — no YAML required anywhere, including a very flexible dashboard card and the bundled reminder blueprint.
What it does
For every event you add, Annuals reports how many days until its next occurrence, and — if you gave it a year — which occurrence number that will be (e.g. someone’s 30th birthday). Each event becomes its own sensor, and every event type also gets its own aggregate calendar entity, so you can drop it straight onto the built-in Calendar dashboard.
Features
8 event types out of the box: birthday, anniversary, name day, wedding anniversary, memorial, pet birthday, work anniversary, custom — each with its own icon
VIP annual — flag one event to always stand out, independent of type or occurrence number
Important annual — automatic milestone detection (18th/30th/50th birthday, 25th anniversary, …), fully customizable per event type
Per-type calendars (calendar.annuals_<type>) for a native calendar view, plus asensorper event with days-remaining, occurrence number, VIP/Important flags
CSV import — add a whole contact list at once, VIP flag included
ICS and vCard import — add a whole contact/event list at once
Holidays import - covers 250+ countries and territories and 150+ languages, with the choice to import each holiday’s actual date, its practically-observed date (e.g. a Saturday US federal holiday, observed the preceding Friday), or both as separate events
Reminder blueprint — a ready-made automation blueprint for lead-time notifications (mobile push, HA notifications, TTS, to-do list, or your own custom actions), no YAML required
One-click “delete all Annuals data” if you want to start over
Translated UI in 15 languages (English, German, French, Dutch, Polish, Spanish, Italian, Portuguese (BR), Russian, Swedish, Chinese, Czech, Norwegian, Danish, Turkish)
Custom dashboard card
custom:annuals-card , bundled with the integration — no separate frontend install, just search “Annuals Card” in the card picker. Everything’s set through a full visual editor: event filters, VIP/Important-only views, colors, fonts, highlight tinting, badges, background…
Every color/font it exposes is also a --annuals-* CSS variable with a theme fallback, so you can theme every card at once — no card-mod required , though it still works if you use it.
That’s the default out-of-the-box layout:
…and you can go wild with detailed customization without card-mod or yaml edit:
Including animated icons and a Compact mode:
![]()
![]()
…and a handy timeline visualization
Installation
Annuals is part of the default HACS integration list:
- Open HACS in Home Assistant
- Search for “Annuals”
- Click the “Download” button
- Restart HA
The dashboard card registers itself automatically, no extra step. Manual installation works the same way — see the README.
Feedback, issues, and feature requests are very welcome on GitHub.
If you find it useful and want to support development, there’s a Buy Me a Coffee link on the repo — totally optional.







