Week Planner Card

January 25, 2026 ยท View on GitHub

GitHub Release GitHub Downloads (all assets, all releases) GitHub commit activity GitHub License Static Badge

Custom Home Assistant card displaying a responsive overview of multiple days with events from one or multiple calendars

Example Week Planner Cards

Table of Content

Installation

  1. Make sure HACS is installed and working.
  2. Search for week-planner-card.
  3. Download and install using HACS.

Manual

  1. Download and copy week-planner-card.js from the latest release into your config/www directory.
  2. Add the resource reference to Home Assistant configuration using one of these methods:
  • Edit your configuration.yaml Add:
    resources:
      - url: /local/week-planner-card.js?version=1.14.1
    type: module
    
  • Using the graphical editor
    1. Make sure advanced mode is enabled in your user profile
    2. Navigate to "Settings" -> "Dashboards".
    3. Click on the 3 vertical dots in the top right corner and select "Resources".
    4. Click on the "Add resource" button in the bottom right corner.
    5. Enter URL /local/week-planner-card.js and select type "JavaScript Module".
    6. Restart Home Assistant.

Configuration

Main Options

NameTypeDefaultSupported optionsDescriptionVersion
typestringRequiredcustom:week-planner-cardType of the card1.0.0
titlestringoptionalAny stringCard title1.6.0
daysnumber | string7Any positive integer number | monthThe number of days to show1.0.0
maxEventsnumber0Any positive integer numberThe maximum number of events to show (0 is no maximum)1.11.0
maxDayEventsnumber0Any positive integer numberThe maximum number of events to show per day (0 is no maximum)1.11.0
startingDaystringtodaytoday | tomorrow | yesterday | sunday | monday | tuesday | wednesday | thursday | friday | saturday | monthDay to start with1.2.0
startingDayOffsetnumber0Any integer numberAdd or subtract days from starting day1.7.0
hideWeekendbooleanfalsefalse | trueDo not show Saturday and Sunday1.2.0
noCardBackgroundbooleanfalsefalse | trueDo not show default card background and border1.0.0
eventBackgroundstringvar(--card-background-color, inherit)Any CSS colorBackground color of the events1.0.0
compactbooleanfalsefalse | trueUse compact mode, decreasing several spacings and font sizes1.2.0
updateIntervalnumber60Any positive integer numberSeconds between checks for new events1.0.0
calendarsobject listRequiredSee CalendarsCalendars shown in this card1.0.0
textsobject list{}See TextsTexts used in the card1.0.0
actionsobject list{}See ActionsActions for the card1.8.0
weatherobjectoptionalSee WeatherConfiguration for optional weather forecast1.1.0
dayFormatstringoptionalSee Luxon formatFormat of the date at the top of the day. This is not escaped, so HTML is allowed here1.6.0
dateFormatstringcccc d LLLL yyyySee Luxon formatFormat of the date in event details1.0.0
timeFormatstringHH:mmSee Luxon formatFormat of the time1.0.0
multiDayTimeFormatstringd LL HH:mmSee Luxon formatFormat of the time for multi day events1.14.0
localestringenAny locale string supported by LuxonLocale used for day and month texts1.1.0
multiDayModestringdefaultSee Multi day modeHow to show multi day events1.14.0
locationLinkstringhttps://www.google.com/maps/search/?api=1&query=Any URLLink used for event location in the detail popup1.1.0
showTitlebooleantruefalse | trueShow event title in overview1.11.0
showDescriptionbooleanfalsefalse | trueShow event description in overview1.11.0
showLocationbooleanfalsefalse | trueShow event location in overview1.3.0
hidePastEventsbooleanfalsefalse | trueDo not show past events1.3.0
hideAllDayEventsbooleanfalsefalse | trueDo not show all day events (this includes "middle" days for multi day events)1.14.0
hideDaysWithoutEventsbooleanfalsefalse | trueDo not show days without events, except for today1.4.0
hideTodayWithoutEventsbooleanfalsefalse | trueAlso do not show today without events if hideDaysWithoutEvents is set1.8.0
filterstringoptionalAny regular expressionRemove events that match the regular expression1.7.0
filterTextstringoptionalAny regular expressionRemove text from events1.10.0
replaceTitleTextobjectoptionalSee Replace title textReplace title text1.12.0
combineSimilarEventsbooleanfalsefalse | trueCombine events with the same start date/time, end date/time and title1.9.0
showLegendbooleanfalsefalse | trueShow calendar legend1.7.0
legendTogglebooleanfalsefalse | trueToggle calendars by clicking on the legend1.11.0
columnsobjectoptionalSee ColumnsConfiguration to override the number of columns1.11.0
showNavigationbooleanfalsefalse | trueShow navigational arrows to traverse additional dates on calendar.1.12.0
showWeekDayTextbooleanfalsefalse | trueDisplay the weekday in a header instead of individual days when days >=71.13.0

Note regarding Month View: When days is set to month and startingDay is configured as a specific weekday (e.g., monday to sunday), the calendar will align the display with the specified starting day of the week. In this mode, days falling outside the current month will be excluded from the view.

Calendars

NameTypeDefaultSupported optionsDescriptionVersion
entitystringRequiredcalendar.my_calendarEntity ID1.0.0
namestringoptionalAny textName of the calendar1.7.0
colorstringoptionalAny CSS colorColor used for events from the calendar1.0.0
iconstringoptionalAny iconIcon used for events from the calendar1.10.0
eventTitleFieldstringoptionalAny textName of the title field for events (usually summary)1.11.0
filterstringoptionalAny regular expressionRemove events that match the regular expression1.8.0
filterTextstringoptionalAny regular expressionRemove text from events1.10.0
replaceTitleTextobjectoptionalSee Replace title textReplace title text1.12.0
hideInLegendbooleanfalsefalse | trueDo not show the calendar in the legend1.8.0
initiallyHiddenbooleanfalsefalse | trueInitially hide the calendar1.13.0

Texts

NameTypeDefaultSupported optionsDescriptionVersion
fullDaystringEntire dayAny textText shown for full day events instead of time1.0.0
noEventsstringNo eventsAny textText shown when there are no events for a day1.0.0
moreEventsstringMore eventsAny textText shown when there are more events for a day1.11.0
todaystringTodayAny textText shown for today instead of the week day. Set to empty to show week day1.0.0
tomorrowstringTomorrowAny textText shown for tomorrow instead of the week day. Set to empty to show week day1.0.0
yesterdaystringYesterdayAny textText shown for yesterday instead of the week day. Set to empty to show week day1.2.0
sundaystringName of Sunday based on localeAny textText used to override Sundays1.1.0
mondaystringName of Monday based on localeAny textText used to override Mondays1.1.0
tuesdaystringName of Tuesday based on localeAny textText used to override Tuesdays1.1.0
wednesdaystringName of Wednesday based on localeAny textText used to override Wednesdays1.1.0
thursdaystringName of Thursday based on localeAny textText used to override Thursdays1.1.0
fridaystringName of Friday based on localeAny textText used to override Fridays1.1.0
saturdaystringName of Saturday based on localeAny textText used to override Saturdays1.1.0

Actions

See Actions documentation. Currently only the tap action is supported.

Weather

NameTypeDefaultSupported optionsDescriptionVersion
entitystringRequiredweather.my_weather_serviceEntity ID1.1.0
useTwiceDailybooleanfalsefalse | trueUse twice daily forecast if your weather entity doesn't support daily forecast1.9.0
showConditionbooleantruefalse | trueShow condition icon1.1.0
showTemperaturebooleanfalsefalse | trueShow temperature1.1.0
showLowTemperaturebooleanfalsefalse | trueShow low temperature1.1.0

Columns

By default, the columns are based on the width of the card. You can use these settings to override the default number of columns.

NameTypeDefaultSupported optionsDescriptionVersion
extraLargenumberoptionalAny positive numberNumber of columns when the card width is >= 1920 pixels1.11.0
largenumberoptionalAny positive numberNumber of columns when the card width is >= 1280 pixels1.11.0
mediumnumberoptionalAny positive numberNumber of columns when the card width is >= 1024 pixels1.11.0
smallnumberoptionalAny positive numberNumber of columns when the card width is >= 640 pixels1.11.0
extraSmallnumberoptionalAny positive numberNumber of columns when the card width is < 640 pixels1.11.0

Multi day mode

Multi day mode determines how multi day events are displayed. The following options are available:

  • default
    On the first day, the start time is the start time of the event. On the last day, the end time is the end time of the event. Any middle days will be shown as full day events.
  • single
    The event is only shown on the first (available) day. multiDayTimeFormat is used for formatting of the time.
  • multiple
    The event is shown on all (available) days. multiDayTimeFormat is used for formatting of the time.

Replace title text

You can replace text in the title. For example:

replaceTitleText:
  "Search text": "Replace text"
  "Foo": "Bar"

This will replace the text "Search text" with "Replace text" and "Foo" with "Bar". This option is not available in the visual editor.

Custom styling using cardmod

Like with most cards, you can add custom styling to this card using card_mod. To make it easier to add custom styles to days and/or events, there are several classes that days and events can have. Additionally, there are data attributes you can use in CSS selectors.

Day classes

ClassDescriptionVersion
todayThe current day1.5.0
tomorrowThe next day1.5.0
yesterdayThe previous day1.5.0
futureDay in the future1.5.0
pastDay in the past1.5.0
sundayDay is a sunday1.6.0
mondayDay is a monday1.6.0
tuesdayDay is a tuesday1.6.0
wednesdayDay is a wednesday1.6.0
thursdayDay is a thursday1.6.0
fridayDay is a friday1.6.0
saturdayDay is a saturday1.6.0

Day data attributes

Data attributeDescriptionVersion
data-dateThe day number1.7.0
data-weekdayThe weekday number1.7.0
data-monthThe month number1.7.0
data-yearThe year1.7.0
data-weekThe week number1.7.0

Event classes

ClassDescriptionVersion
fulldayEvent lasts the full day1.5.0
multiDayEvent covers multiple days1.14.0
ongoingCurrently ongoing1.5.0
futureEvent in the future1.5.0
pastEvent in the past1.5.0

Event data attributes

Data attributeDescriptionVersion
data-entityThe calendar entity1.6.0
data-additional-entitiesComma-separated list of additional entities for combined events1.9.0
data-summaryThe event title1.9.0
data-locationThe event location1.9.0
data-start-hourThe event start hour1.9.0
data-start-minuteThe event start minute1.9.0
data-end-hourThe event end hour1.9.0
data-end-minuteThe event end minute1.9.0

Examples

Minimal

type: custom:week-planner-card
calendars:
  - entity: calendar.my_calendar_1

Extended

type: custom:week-planner-card
calendars:
  - entity: calendar.my_calendar_1
    color: '#e6c229'
  - entity: calendar.my_calendar_2
    color: '#1a8fe3'
weather:
  entity: weather.my_weather_service
  showTemperature: true
  showLowTemperature: true
days: 14
noCardBackground: true
eventBackground: rgba(0, 0, 0, .75)
locationLink: https://www.openstreetmap.org/search?query=
locale: nl
texts:
  noEvents: Geen activiteiten
  fullDay: Hele dag
  today: Vandaag
  tomorrow: Morgen

Starting on Sunday

type: custom:week-planner-card
calendars:
  - entity: calendar.my_calendar_1
    color: '#e6c229'
  - entity: calendar.my_calendar_2
    color: '#1a8fe3'
startingDay: sunday
texts:
  today: ''
  tomorrow: ''
  yesterday: ''

Past events transparent with card_mod

type: custom:week-planner-card
calendars:
  - entity: calendar.my_calendar_1
    color: '#e6c229'
  - entity: calendar.my_calendar_2
    color: '#1a8fe3'
card_mod:
  style: |
    .event.past {
      opacity: .3;
    }

Highlight Today with card_mod

type: custom:week-planner-card
calendars:
  - entity: calendar.my_calendar_1
    color: '#e6c229'
  - entity: calendar.my_calendar_2
    color: '#1a8fe3'
card_mod:
  style: |
    .day.today {
      box-sizing: border-box;
      border: 2px solid #00ffff;
      border-radius: 6px;
      box-shadow: inset 0 0 5px #00ffff;
      margin: 2px;
    }

Custom event style based on title text with card_mod

This will style events with Word1 as part of the title or Word2 as the exact title with a red background.

type: custom:week-planner-card
calendars:
  - entity: calendar.my_calendar_1
  - color: #e6c229
card_mod:
  style: |
    .event[data-summary~="Word1"],
    .event[data-summary="Word2"] {
      background-color: #ff0000 !important;
    }

Show entire current month

type: custom:week-planner-card
calendars:
  - entity: calendar.my_calendar_1
days: month
startingDay: month

Show month with each day

type: custom:week-planner-card
calendars:
  - calendar.my_calendar_1
dayFormat: '''<span class="number">''d''</span> <span class="month">''MMMM''</span>'''

Show day names instead of "Today", "Yesterday" and "Tomorrow"

This can not be done through the GUI editor, but has to be done in the YAML configuration.

type: custom:week-planner-card
calendars:
  - entity: calendar.my_calendar_1
texts:
  yesterday:
  today:
  tomorrow: