The Group integration in Home Assistant gets a new member type: calendars. Joakim Plate's change, merged on 21 October 2026, lets you combine several calendar entities, for example work, school and family, into a single calendar entity. It is in the development branch, so it should ship with Home Assistant 2026.11.

Until now, automations and dashboards had to handle each calendar on its own. A group gives them one entity to watch.

How the group behaves

The group's state is on while any member calendar has an event in progress and off otherwise. It becomes unavailable only when none of its member calendars is available. Its attributes show the current event, or the next upcoming one, across all members, the same way a single calendar entity does.

Groups can contain other calendar groups. Home Assistant expands them so each underlying calendar is used once, which also stops a group from looping back into itself through its members.

The group is read-only. You cannot create, edit or delete events through it. Those changes still go to the original calendars.

Setting it up

In the UI, a calendar group is created like other group helpers, under Settings > Devices & services > Helpers. The group type list gains a "Calendar group" option, with a preview, a member list and the usual "Hide members" switch. The draft documentation also shows a YAML version:

calendar:
  - platform: group
    name: "Family"
    entities:
      - calendar.work
      - calendar.school

A detail behind the scenes

The pull request explains why the group reads its members as full calendar entities instead of copying their states. A calendar's state attributes drop the UTC offset of the event, and calling calendar.get_events makes polling calendars refresh after every call. Working with the entities directly avoids both problems. Live updates also reach only the group directly above a member when the member reports an unchanged state; groups further up catch up on the next real state change.

The documentation for calendar groups was still waiting for review when the code was merged.