dorkhub

Bubble-Card

Bubble Card is a minimalist card collection for Home Assistant with a nice pop-up touch.

Clooos
JavaScript4.5k167 forksMITupdated 5 days ago
git clone https://github.com/Clooos/Bubble-Card.gitClooos/Bubble-Card

Bubble Card

readme-images-bubble-card

Bubble Card is a minimalist and customizable card collection for Home Assistant with a nice pop-up touch... and a Module Store!

Stars Last commit YouTube Reddit Page Reddit Profile Home Assistant Community Forum Buy me a beer PayPal Patreon Clooos


Table of contents

Installation Configuration Pop-up Horizontal buttons stack Button Media player Cover Select Climate Calendar Separator Empty column Sub-buttons only Sub-buttons Card layouts Actions Styling Templates Modules Help Contributing Donate


Installation

Home Assistant lowest supported version: 2023.9.0

Without HACS
  1. Download this file: bubble-card.js
  2. Add this file to your <config>/www folder
  3. On your dashboard click on the icon at the right top corner then on Edit dashboard
  4. Click again on that icon and then click on Manage resources
  5. Click on Add resource
  6. Copy and paste this: /local/bubble-card.js?v=1
  7. Click on JavaScript Module then Create
  8. Go back and refresh your page
  9. You can now click on Add card in the bottom right corner and search for Bubble Card
  10. After any update of the file you will have to edit /local/bubble-card.js?v=1 and change the version to any higher number

If it's not working, just try to clear your browser cache.`

With HACS (Recommended)

This method allows you to get updates directly on the Home Assistant Community Store

  1. If HACS is not installed yet, download it following the instructions on https://hacs.xyz/docs/setup/download/
  2. Proceed to the HACS initial configuration following the instructions on https://hacs.xyz/docs/configuration/basic
  3. On your sidebar go to "HACS"
  4. Search for "Bubble Card", or click on the blue button below
  5. Click on "Download"
  6. Go back on your dashboard and click on the icon at the right top corner then on Edit dashboard
  7. You can now click on Add card in the bottom right corner and search for Bubble Card

If it's not working, try to clear your browser/app cache (on all your devices if needed).

Videos

You can also take a look at my YouTube channel for step by step videos.

YouTube


Open Bubble Card on Home Assistant Community Store (HACS).


Configuration

All options can be configured in the Home Assistant editor. But you can find more details and the YAML in the documentation below.

Main options (YAML + description)
Name Type Requirement Supported options Description
type string Required custom:bubble-card Type of the card
card_type string Required button, calendar, climate, cover, empty-column, horizontal-buttons-stack, media-player, pop-up, select, separator or sub-buttons Type of the Bubble Card, see below
styles object list Optional Any CSS stylesheets Allows you to customize your Bubble Card CSS, see styling
Global CSS variables (see Styling)
Variable Expected value Description
--bubble-border-radius px Border radius for all supported elements
--bubble-main-background-color color Main background color for all supported elements
--bubble-secondary-background-color color Secondary background color for all supported elements
--bubble-accent-color color Accent color for all supported elements
--bubble-icon-border-radius px Icon border radius for all supported elements
--bubble-icon-background-color color Icon background color for all supported elements
--bubble-sub-button-border-radius px Border radius for all sub-buttons
--bubble-sub-button-background-color color Background color for all sub-buttons
--bubble-box-shadow see box shadow Box shadow for all supported elements
--bubble-border see border Border for all supported cards



Bubble-Card---Youtube-github

Check out this video to learn about Bubble Card and its capabilities. My YouTube channel is quite new and focuses on tutorials about Home Assistant and Bubble Card. Don’t hesitate to subscribe to help increase my channel’s visibility. Thank you in advance!




Pop-up

readme-pop-up

This card allows you to create a pop-up with any content. Each pop-up is hidden by default and can be opened by targeting its link (e.g. '#pop-up-name'), with any card that supports the navigate action, or with the horizontal buttons stack that is included.

Tip

Pop-up trigger

This feature allows you to open a pop-up based on the state of any entity, for example, you can open a "Security" pop-up with a camera when a person is in front of your house. You can also create a toggle helper (input_boolean) and trigger its opening/closing in an automation.

Opening a pop-up when a binary_sensor is on
type: custom:bubble-card
card_type: pop-up
hash: '#kitchen'
name: Security
icon: mdi:video
trigger_entity: binary_sensor.front_door_motion
trigger_state: 'on'
trigger_close: true

Different ways to close a pop-up

They are many ways to close a pop-up. For instance, you can swipe from the pop-up header to the bottom, by doing a long swipe inside the pop-up to the bottom, by pressing Escape on desktop, by removing the hash in the URL or by simply pressing the close button.

Pop-up options

Options (YAML + descriptions)
Name Type Requirement Supported options Description
hash string Required Any unique hash (e.g. '#kitchen') with ' ' This is how you will open your pop-up
popup_style string Optional bubble (default) or classic Define the pop-up visual style
popup_mode string Optional default (default), fit-content, centered or adaptive-dialog Define the pop-up layout mode
with_bottom_offset boolean Optional true or false (default) Only used with popup_mode: fit-content or adaptive-dialog. Applies a bottom offset on mobile, useful when your dashboard includes a footer card.
full_width_on_mobile boolean Optional true or false (default) Only used with popup_mode: centered. Expands the pop-up to full screen width on mobile, useful on smaller displays.
performance_mode string Optional default (default) or performance Optimize the pop-up open animation. performance slightly delays content rendering and background blur, also disables backdrop blur if set.
auto_close string Optional A timeout in milliseconds (e.g. 10000 for 10s) Auto close the pop-up after a timeout
close_on_click boolean Optional true or false (default) Automatically close the pop-up after any interaction
close_by_clicking_outside boolean Optional true (default) or false Close the pop-up by clicking outside of it
width_desktop string Optional Any CSS value Width on desktop (100% by default on mobile)
margin string Optional Any CSS value Use this only if your pop-up is not well centered on mobile (e.g. 13px)
margin_top_mobile string Optional Any CSS value Top margin on mobile (e.g. -56px if your header is hidden)
margin_top_desktop string Optional Any CSS value Top margin on desktop (e.g. 50vh for a half-sized pop-up or calc(100vh - 400px) for a fixed height of 400px)
bg_color string Optional Any hex, rgb or rgba value The background color of your pop-up (e.g. #ffffff for a white background)
bg_opacity string Optional Any value from 0 to 100 The background opacity of your pop-up (e.g. 100 for no transparency)
bg_blur string Optional Any value from 0 to 100 The background blur effect of your pop-up, this only work if bg_opacity is not set to 100 (e.g. 0 for no blur)
shadow_opacity string Optional Any value from 0 to 100 The shadow opacity of your pop-up (e.g. 0 to hide it)
hide_backdrop boolean Optional true or false (default) Set this to true on the first pop-up of your main dashboard to disable the backdrop on all pop-ups.
background_update boolean Optional true or false (default) Update pop-up content in background (not recommended)
trigger_entity string Optional Any entity Open this pop-up based on the state of any entity
trigger_state string Optional (Required if trigger_entity is defined) Any entity state Entity state to open the pop-up
trigger_close boolean Optional true or false (default) Close the pop-up when trigger_state is different
open_action object Optional See actions Trigger an action when the pop-up is opening
close_action object Optional See actions Trigger an action when the pop-up is closing
show_header boolean Optional true (default) or false Show/Hide the pop-up header fully
show_previous_button boolean Optional true or false (default) Show a previous button next to the close button and navigate back to the previous pop-up when available
show_close_button boolean Optional true (default) or false Show or hide the close button while keeping the rest of the header visible
buttons_position string Optional right (default) or left Position of the close and previous buttons in the header
cards list Optional Any Bubble Card, Home Assistant card or custom card Define the content of your pop-up. See the pop-up example below.
You also have access to all the button settings for the header of the pop-up. Optional If undefined no header will be shown
CSS variables (see Styling)
Variable Expected value Description
--bubble-pop-up-border-radius px Border radius for the pop-up
--bubble-pop-up-main-background-color color Main background color for supported elements of the pop-up
--bubble-pop-up-background-color color Background color of the pop-up
--bubble-backdrop-background-color color Background color for the backdrop
You also have access to all the button CSS variables for the header of the pop-up.

Standalone pop-up format (v3.2.0+)

Since v3.2.0, pop-ups use a new standalone format where content cards are defined directly inside the pop-up using the cards option. This provides better performance and a new section based drag-and-drop editing experience.

Examples

A pop-up (standalone format)
type: custom:bubble-card
card_type: pop-up
hash: '#kitchen'
name: Kitchen
icon: mdi:fridge
entity: light.kitchen
cards:
  - type: custom:bubble-card
    card_type: button
    entity: light.kitchen
  # More cards...
A button to open the pop-up
type: custom:bubble-card
card_type: button
button_type: name
name: Kitchen
icon: mdi:fridge
button_action:
  tap_action:
    action: navigate
    navigation_path: '#kitchen'



Horizontal buttons stack

readme-horizontal-buttons-stack

This card is a good companion to the pop-up card, allowing you to open the corresponding pop-ups. It also allows you to open any page of your dashboard. In addition, you can add your motion/occupancy sensors so that the order of the buttons adapts according to the room you just entered. This card is scrollable, remains visible, and acts as a footer.

Important

This card has to be the last one in your view (after every card and pop-up). It can't be inside any stack.

Horizontal buttons stack options

Options (YAML + descriptions)
Name Type Requirement Supported options Description
1_link string Required The pop-up hash (e.g. '#kitchen') with ' ' or any link A link to open
1_name string Optional Any string A name for your button
1_icon string Optional Any mdi: icon An icon for your button
1_entity string Optional Any light or light group Display the color of that light in background
1_pir_sensor string Optional Any binary sensor At least one pir sensor or more for auto_order, in fact it also works with any entity type, for example you can add light groups and the order will change based on the last changed states.
auto_order boolean Optional true or false (default) Change the order of the buttons according to the _pir_sensor last changed time, it needs to be false if you don't have any _pir_sensor in your code
margin string Optional Any CSS value Use this only if your horizontal-buttons-stack is not well centered on mobile (e.g. 13px)
width_desktop string Optional Any CSS value Width on desktop (100% by default on mobile)
is_sidebar_hidden boolean Optional true or false (default) Fix the horizontal buttons stack position if the sidebar is hidden on the desktop (only if you have made a modification to hide it yourself)
rise_animation boolean Optional true (default) or false Set this to false to disable the animation that activates once the page has loaded
highlight_current_view boolean Optional true or false (default) Highlight current hash / view with a smooth animation
hide_gradient boolean Optional true or false (default) Set this to false to hide the gradient

[!IMPORTANT]
The variables starting with a number define your buttons, just change this number to add more buttons (see example below).

CSS variables (see Styling)
Variable Expected value Description
--bubble-horizontal-buttons-stack-border-radius px Border radius for horizontal button stack buttons
--bubble-horizontal-buttons-stack-background-color color Background color for horizontal button stack buttons

Example

An horizontal buttons stack that reorganize itself based on occupancy sensors
type: custom:bubble-card
card_type: horizontal-buttons-stack
auto_order: true
1_name: Living room
1_icon: mdi:sofa
1_link: '#living-room'
1_entity: light.living_room
1_pir_sensor: binary_sensor.living_room_motion
2_name: Kitchen
2_icon: mdi:fridge
2_link: '#kitchen'
2_entity: light.kitchen
2_pir_sensor: binary_sensor.kitchen_motion
3_name: Dining room
3_icon: mdi:silverware-fork-knife
3_link: '#dining-room'
3_entity: light.dining_room
3_pir_sensor: binary_sensor.dining_room_motion



Button

readme-button-without-sub-buttons

This card is very versatile. It can be used as a switch, a slider, a state or a name/text button.

Tip

What are the differences between all the button types?

  • Switch button: This is the default button type. By default, it toggles an entity and its background color changes based on the entity's state or the color of a light. You can change its action in the Tap action on card section.

  • Slider button: This button type lets you control entities with adjustable ranges. It's ideal for dimming lights, and its fill color will adapt to the light's color. You can also use it to display values, such as a battery level. Supported entities for sliders:

    • Light (brightness)
    • Media player (volume)
    • Cover (position)
    • Fan (percentage)
    • Climate (temperature)
    • Input number and number (value)
    • Battery sensor (percentage, read only)

    You can also use any entity with a numeric state by disabling the entity filter in Slider settings, then define the min and max values. This option is read only.

  • State button: Perfect for displaying information from a sensor or any entity. When you press it, it will show the "More info" panel of the entity. Its background color does not change.

  • Name/Text button: The only button type that doesn't need an entity. It allows you to display a short text, a name or a title. You can also add actions to it. Its background color does not change.

Button options

Options (YAML + descriptions)
Name Type Requirement Supported options Description
entity string Required Any entity An entity to control
button_type string Optional switch (default), slider, state or name The behavior of your button
name string Optional Any string A name for your button, if not defined it will display the entity name
icon string Optional Any mdi: icon An icon for your button, if not defined it will display the entity icon or the entity-picture
force_icon boolean Optional true or false (default) Give the priority to the icon instead of the entity-picture
use_accent_color boolean Optional (false default) For lights only. Use the theme's accent color instead of the light's color.
show_state boolean Optional true or false (default) Show or hide the state of your entity
show_name boolean Optional true (default) or false Show or hide the name
show_icon boolean Optional true (default) or false Show or hide the icon
show_last_changed boolean Optional true or false (default) Show the last changed time of your entity
show_last_updated boolean Optional true or false (default) Show the last updated time of your entity
show_attribute boolean Optional true or false (default) Show an attribute of your entity below its name
attribute string Optional (required if show_attribute is set to true) An attribute from your entity The attribute to show (e.g. brightness)
scrolling_effect boolean Optional true (default) or false Allow text to scroll when the content exceeds the size of their container
button_action object Optional tap_action, double_tap_action or hold_action, see below Allow to change the default actions on button click.
tap_action object Optional See actions Define the type of action on icon click, if undefined, more-info will be used
double_tap_action object Optional See actions Define the type of action on icon double click, if undefined, none will be used
hold_action object Optional See actions Define the type of action on icon hold, if undefined, more-info will be used
card_layout string Optional normal (default if not in section view), large (default if in section view), large-2-rows, large-sub-buttons-grid Styling layout of the card, see card layouts
rows number Optional Any number Number of rows (height) (e.g. 2)
sub_button object Optional See sub-buttons Add customized buttons fixed to the right
CSS variables (see Styling)
Variable Expected value Description
--bubble-button-main-background-color color Main background color for supported elements in the button
--bubble-button-border-radius px Border radius for the button
--bubble-button-icon-border-radius px Border radius for the button icon container
--bubble-button-icon-background-color color Background color for the button icon container
--bubble-light-white-color color Replace the default white color of light buttons/sliders
--bubble-light-color color Replace the color of light buttons/sliders (even RGB lights)
--bubble-button-box-shadow See box shadow Box shadow for the button

These options are only available when button_type is set to slider.

Slider options (YAML + descriptions)
Name Type Requirement Description
min_value number Optional The minimum value of the slider. For custom sliders.
max_value number Optional The maximum value of the slider. For custom sliders.
step number Optional The step value of the slider.
tap_to_slide boolean Optional (false default) Enable the previous slider behavior where you tap to activate the slider, instead of holding it.
relative_slide boolean Optional (false default ) Update value relative to the starting value, rather than the starting touch point.
read_only_slider boolean Optional (false default) Make the slider read-only. Automatically enabled for some entities like sensors.
slider_live_update boolean Optional (false default) The entity state is updated while sliding. This feature is not recommended for all entities.
slider_fill_orientation string Optional left (default), right, top, bottom
slider_value_position string Optional right (default), left, center, hidden
invert_slider_value boolean Optional (false default) Invert slider direction (100% fill equals minimum). Not available for color sliders.
light_slider_type string Optional brightness (default), hue, saturation, white_temp
cover_slider_type string Optional position (default), tilt_position
hue_force_saturation boolean Optional (false default) For lights only (Hue mode). Force saturation when adjusting Hue
hue_force_saturation_value number Optional (100 default) For lights only (Hue mode). Forced saturation value (0-100)
use_accent_color boolean Optional (false default) For lights only (Brightness mode). Use the theme accent color instead of the light color
allow_light_slider_to_0 boolean Optional (false default) For lights only. Allows the slider to reach 0%, which turns off the light. Not available with tap_to_slide.
light_transition boolean Optional (false default) For lights only. Enable smooth brightness transitions for supported lights.
light_transition_time number Optional (500 default) For lights only. The transition time in milliseconds. Requires light_transition: true.

Examples

A slider button that can control the brightness of a light
type: custom:bubble-card
card_type: button
button_type: slider
entity: light.kitchen_led
name: Kitchen LED
icon: mdi:led-strip-variant
A button with more options
type: custom:bubble-card
card_type: button
entity: light.your_light
button_type: switch
show_icon: true
force_icon: true
show_name: true
show_last_changed: true
show_state: true
show_last_updated: true
show_attribute: true
attribute: brightness
scrolling_effect: true
card_layout: large
button_action:
  tap_action:
    action: toggle
tap_action:
  action: more-info
sub_button:
  - entity: light.your_light
    icon: ''
    show_state: false
    show_attribute: true
    attribute: brightness
    show_icon: false
    show_background: false
    show_name: false



Media player

readme-media-player

This card allows you to control a media player entity.

Media player options

Options (YAML + descriptions)
Name Type Requirement Supported options Description
entity string Required Any media player The media player to control
name string Optional Any string A name for your media player, if not defined it will display the entity name
icon string Optional Any mdi: icon An icon for your media player, if not defined it will display the entity icon or the entity-picture
force_icon boolean Optional true or false (default) Give the priority to the icon instead of the entity-picture
show_state boolean Optional true or false (default) Show or hide the state of your entity
show_name boolean Optional true (default) or false Show or hide the name
show_icon boolean Optional true (default) or false Show or hide the icon
show_last_changed boolean Optional true or false (default) Show the last changed time of your entity
show_last_updated boolean Optional true or false (default) Show the last updated time of your entity
show_attribute boolean Optional true or false (default) Show an attribute of your entity below its name
attribute string Optional (required if show_attribute is set to true) An attribute from your entity The attribute to show (e.g. brightness)
scrolling_effect boolean Optional true (default) or false Allow text to scroll when the content exceeds the size of their container
min_volume number Optional Any number The minimum value of the volume slider.
max_volume number Optional Any number The maximum value of the volume slider.
cover_background boolean Optional true or false (default) Use a blurred media cover as the card background.
button_action object Optional tap_action, double_tap_action or hold_action, see actions Allow to change the default actions on button click.
tap_action object Optional See actions Define the type of action on icon click, if undefined, more-info will be used.
double_tap_action object Optional See actions Define the type of action on icon double click, if undefined, none will be used.
hold_action object Optional See actions Define the type of action on icon hold, if undefined, more-info will be used.
main_buttons_position string Optional default or bottom Move the cover action buttons to the bottom (fixed)
main_buttons_full_width boolean Optional true or false Make the bottom action buttons full width (default: true when position is bottom)
main_buttons_alignment string Optional end (default), center, start, space-between Alignment of bottom action buttons when not full width
card_layout string Optional normal (default if not in section view), large (default if in section view), large-2-rows, large-sub-buttons-grid Styling layout of the card, see card layouts
rows number Optional Any number Number of rows (height) (e.g. 2)
sub_button object Optional See sub-buttons Add customized buttons fixed to the right
hide object Optional See below Hide buttons from the card

Hide options

Name Type Requirement Supported options Description
play_pause_button boolean Optional true or false (default) Hide the play/pause button
volume_button boolean Optional true or false (default) Hide the volume button
previous_button boolean Optional true or false (default) Hide the previous button
next_button boolean Optional true or false (default) Hide the next button
power_button boolean Optional true or false (default) Hide the power button
CSS variables (see Styling)
Variable Expected value Description
--bubble-media-player-main-background-color color Main background color for the media player
--bubble-media-player-border-radius px Border radius for the media player
--bubble-media-player-buttons-border-radius px Border radius for the media player buttons
--bubble-media-player-slider-background-color color Background color for the volume slider
--bubble-media-player-icon-border-radius px Border radius for the media player icon container
--bubble-media-player-icon-background-color color Background color for the media player icon container
--bubble-media-player-box-shadow See box shadow Box shadow for the media player

Examples

A media player with all the options
type: custom:bubble-card
card_type: media-player
name: Media player
entity: media_player.your_media_player
show_state: true
show_last_updated: true
show_attribute: true
attribute: assumed_state
card_layout: large
scrolling_effect: false
show_icon: false
force_icon: true
show_name: false
show_last_changed: true
columns: 2
rows: 1
min_volume: 10
max_volume: 80
cover_background: true
tap_action:
  action: toggle
hide:
  play_pause_button: true
  volume_button: true
  previous_button: true
  next_button: true
  power_button: true
sub_button:
  - entity: media_player.salon_2
    icon: mdi:volume-high
    name: Volume level
    tap_action:
      action: more-info
    show_name: false
    show_state: false
    show_last_updated: false
    show_attribute: true
    show_background: false
    attribute: volume_level



Cover

readme-cover-bubble-card

This card allows you to control your cover entities.

Cover options

Options (YAML + descriptions)
Name Type Requirement Supported options Description
entity string Required Any cover A cover to control
name string Optional Any string A name for your cover, if not defined it will display the entity name
force_icon boolean Optional true or false (default) Give the priority to the icon instead of the entity-picture
show_state boolean Optional true or false (default) Show or hide the state of your entity
show_name boolean Optional true (default) or false Show or hide the name
show_icon boolean Optional true (default) or false Show or hide the icon
show_last_changed boolean Optional true or false (default) Show the last changed time of your entity
show_last_updated boolean Optional true or false (default) Show the last updated time of your entity
show_attribute boolean Optional true or false (default) Show an attribute of your entity below its name
attribute string Optional (required if show_attribute is set to true) An attribute from your entity The attribute to show (e.g. brightness)
scrolling_effect boolean Optional true (default) or false Allow text to scroll when the content exceeds the size of their container
icon_open string Optional Any mdi: icon An icon for your open cover, if not defined it will display the default open cover icon
icon_close string Optional Any mdi: icon An icon for your closed cover, if not defined it will display the default closed cover icon
icon_up string Optional Any mdi: icon An icon for your open cover button, if not defined it will display the default open cover icon
icon_down string Optional Any mdi: icon An icon for your close cover button, if not defined it will display the default close cover icon
open_service string Optional Any service or script A service to open your cover, default to cover.open_cover
stop_service string Optional Any service or script A service to stop your cover, default to cover.stop_cover
close_service string Optional Any service or script A service to close your cover, default to cover.close_cover
tilt_buttons string Optional top (default), bottom, left, right, hidden Position of tilt control buttons (only shown if cover supports tilt)
open_tilt_service string Optional Any service or script A service to open tilt, default to cover.open_cover_tilt

| close_tilt_service | string | Optional | Any service or script | A service to close tilt, default to cover.close_cover_tilt | | button_action | object | Optional | tap_action, double_tap_action or hold_action, see actions | Allow to change the default actions on button click. | | tap_action | object | Optional | See actions | Define the type of action on icon click, if undefined, more-info will be used. | | double_tap_action | object | Optional | See actions | Define the type of action on icon double click, if undefined, none will be used. | | hold_action | object | Optional | See actions | Define the type of action on icon hold, if undefined, more-info will be used. | | main_buttons_position | string | Optional | default or bottom | Move the media controls to the bottom (fixed) | | main_buttons_full_width | boolean | Optional | true or false | Make the bottom controls full width (default: true when position is bottom) | | main_buttons_alignment | string | Optional | end (default), center, start, space-between | Alignment of bottom controls when not full width | | card_layout | string | Optional | normal (default if not in section view), large (default if in section view), large-2-rows, large-sub-buttons-grid | Styling layout of the card, see card layouts | | rows | number | Optional | Any number | Number of rows (height) (e.g. 2) | | sub_button | object | Optional | See sub-buttons | Add customized buttons fixed to the right |

CSS variables (see Styling)
Variable Expected value Description
--bubble-cover-main-background-color color Main background color for supported elements in the cover card
--bubble-cover-border-radius px Border radius for the cover card
--bubble-cover-icon-border-radius px Border radius for the cover card icon container
--bubble-cover-icon-background-color color Background color for the cover card icon container
--bubble-cover-box-shadow See box shadow Box shadow for the cover card
--bubble-button-box-shadow See box shadow Box shadow for buttons in the cover card

Example

A card that can control a roller shade
type: custom:bubble-card
card_type: cover
entity: cover.kitchen
name: Kitchen
icon_open: mdi:roller-shade
icon_close: mdi:roller-shade-closed



Select

readme-select-card

This card allows you to add a dropdown menu for your input_select / select entities. This card also supports the sub-buttons and all the common Bubble Card features.

Tip

You can also have select sub-buttons if you want, this feature is available in all the cards that support the sub-buttons.

Select options

Options (YAML + descriptions)
Name Type Requirement Supported options Description
entity string Required Any entity An entity to control
name string Optional Any string A name for your select, if not defined it will display the entity name
icon string Optional Any mdi: icon An icon for your select, if not defined it will display the entity icon or the entity-picture
force_icon boolean Optional true or false (default) Give the priority to the icon instead of the entity-picture
show_state boolean Optional true or false (default) Show or hide the state of your entity
show_name boolean Optional true (default) or false Show or hide the name
show_icon boolean Optional true (default) or false Show or hide the icon
show_last_changed boolean Optional true or false (default) Show the last changed time of your entity
show_last_updated boolean Optional true or false (default) Show the last updated time of your entity
show_attribute boolean Optional true or false (default) Show an attribute of your entity below its name
attribute string Optional (required if show_attribute is set to true) An attribute from your entity The attribute to show (e.g. brightness)
scrolling_effect boolean Optional true (default) or false Allow text to scroll when the content exceeds the size of their container
tap_action object Optional See actions Define the type of action on icon click, if undefined, more-info will be used.
double_tap_action object Optional See actions Define the type of action on icon double click, if undefined, none will be used.
hold_action object Optional See actions Define the type of action on icon hold, if undefined, more-info will be used.
card_layout string Optional normal (default if not in section view), large (default if in section view), large-2-rows, large-sub-buttons-grid Styling layout of the card, see card layouts
rows number Optional Any number Number of rows (height) (e.g. 2)
sub_button object Optional See sub-buttons Add customized buttons fixed to the right
CSS variables (see Styling)
Variable Expected value Description
--bubble-select-main-background-color color Main background color for supported elements in the select card
--bubble-select-background-color color Background color for select card
--bubble-select-list-border-radius px Border radius for the dropdown menu in the card
--bubble-select-list-item-accent-color color Accent color for the selected item
--bubble-select-list-background-color color Background color for the dropdown menu in the card
--bubble-select-list-width px Width of the dropdown menu in the card
--bubble-select-arrow-background-color color Background color for dropdown arrow
--bubble-select-button-border-radius px Border radius for select button
--bubble-select-border-radius px Border radius for the select card
--bubble-select-icon-border-radius px Border radius for the select card icon container
--bubble-select-icon-background-color color Background color for the select card icon container
--bubble-select-box-shadow See box shadow Box shadow for the select card

Examples

A select card with a list of scenes
type: custom:bubble-card
card_type: select
name: Scene
entity: input_select.scenes
icon: mdi:brightness-4
show_state: true



Climate

readme-climate-card

This card allows you to control your climate entities.

Tip

The mode selection menu is a sub-button that is added automatically when creating the card. You can then modify or remove it as you wish.

Climate options

Options (YAML + descriptions)
Name Type Requirement Supported options Description
entity string Required Climate entity The entity to control (e.g., climate.living_room).
name string Optional Any string A custom name for the card. If not defined, it will display the entity name.
icon string Optional Any mdi: icon A custom icon for the card. If not defined, the entity icon or entity-picture will be used.
force_icon boolean Optional true or false (default) Gives priority to the icon over the entity-picture.
show_state boolean Optional true or false (default) Show or hide the current state of the entity.
show_name boolean Optional true (default) or false Show or hide the name of the entity.
show_icon boolean Optional true (default) or false Show or hide the icon.
hide_target_temp_low boolean Optional (only for entities supporting target_temp_low) true or false (default) Hides the low target temperature control if supported by the entity.
hide_target_temp_high boolean Optional (only for entities supporting target_temp_high) true or false (default) Hides the high target temperature control if supported by the entity.
state_color boolean Optional true or false (default) Applies a constant background color when the climate entity is ON.
step number Optional Any number The temperature step.
min_temp number Optional Any number The minimum temperature.
max_temp number Optional Any number The maximum temperature.
button_action object Optional tap_action, double_tap_action or hold_action, see actions Allow to change the default actions on button click.
tap_action object Optional See actions Define the type of action on icon click, if undefined, more-info will be used.
double_tap_action object Optional See actions Define the type of action on icon double click, if undefined, none will be used.
hold_action object Optional See actions Define the type of action on icon hold, if undefined, more-info will be used.
main_buttons_position string Optional default or bottom Move the climate action buttons to the bottom (fixed)
main_buttons_full_width boolean Optional true or false Make the bottom action buttons full width (default: true when position is bottom)
main_buttons_alignment string Optional end (default), center, start, space-between Alignment of bottom action buttons when not full width
card_layout string Optional normal (default if not in section view), large (default if in section view), large-2-rows, large-sub-buttons-grid Styling layout of the card, see card layouts
rows number Optional Any number Number of rows (height) (e.g. 2)
sub_button object Optional See sub-buttons Adds custom buttons fixed to the right. Useful for a climate mode select menu.
CSS variables (see Styling)
Variable Expected value Description
--bubble-climate-main-background-color color Main background color for supported elements in the climate card
--bubble-climate-border-radius px Border radius for supported elements in the climate card elements
--bubble-climate-button-background-color color Background color for the climate card buttons
--bubble-climate-icon-border-radius px Border radius for the climate card icon container
--bubble-state-climate-fan-only-color color Overlay color for the fan-only state
--bubble-state-climate-dry-color color Overlay color for the dry state
--bubble-state-climate-cool-color color Overlay color for the cool state
--bubble-state-climate-heat-color color Overlay color for the heat state
--bubble-state-climate-auto-color color Overlay color for the auto state
--bubble-state-climate-heat-cool-color color Overlay color for the heat-cool state
--bubble-climate-accent-color color Accent color for the climate card
--bubble-climate-box-shadow See box shadow Box shadow for climate container.

Examples

A climate card with an HVAC modes dropdown menu
type: custom:bubble-card
card_type: climate
entity: climate.test_climate
sub_button:
  - name: HVAC modes menu
    select_attribute: hvac_modes
    show_arrow: false
    state_background: false



Calendar

readme-calendar-bubble-card

This card allows you to display your calendar entities. Its content is scrollable, so you can easily browse upcoming events.

Calendar options

Options (YAML + descriptions)
Name Type Requirement Supported options Description
days number Optional Any number (minimum: 1) Number of calendar days to fetch events for, from now until the end of the Nth day (default: 7)
entities object Required A calendar entity object (see below) The entity to control (e.g., calendar.main_calendar).
entities.entity string Required A calendar entity The calendar entity to display
entities.color string Optional A color A custom color for the calendar chip. If not defined, an automatic color will be picked
days number Optional Any number (minimum: 1) Number of calendar days to fetch events for, from now until the end of the Nth day (default: 7)
limit number Optional A number The amont of events that will be displayed on the card
show_end boolean Optional true or false (default) Show or hide the end time for events
show_progress boolean Optional true (default) or false Show or hide the event progress bar
show_started_events boolean Optional true (default) or false Show or hide events that are currently in progress
scrolling_effect boolean Optional true (default) or false Allow text to scroll when the content exceeds the size of their container
event_action object Optional tap_action, double_tap_action or hold_action, see actions Allow to add actions on event click.
tap_action object Optional See actions Define the type of action on day click, if undefined, none will be used.
double_tap_action object Optional See actions Define the type of action on day double click, if undefined, none will be used.
hold_action object Optional See actions Define the type of action on day hold, if undefined, none will be used.
card_layout string Optional normal (default if not in section view), large (default if in section view), large-2-rows, large-sub-buttons-grid Styling layout of the card, see card layouts
rows number Optional Any number Number of rows (height) (e.g. 2)
sub_button object Optional See sub-buttons Add customized buttons fixed to the right
CSS variables (see Styling)
Variable Expected value Description
--bubble-calendar-main-background-color color Main background color for supported elements in the calendar card
--bubble-calendar-border-radius px Border radius for supported elements in the calendar card elements
--bubble-calendar-height px Height for the calendar card

Examples

A calendar card with a limited amount of events
type: custom:bubble-card
card_type: calendar
entities:
  - entity: calendar.main_calendar
    color: '#ffb010'
limit: 1
A calendar card with an end time and a progress bar
type: custom:bubble-card
card_type: calendar
entities:
  - entity: calendar.main_calendar
    color: '#ffb010'
show_end: true
show_progress: true



Separator

readme-separator

This card is a simple separator for dividing your pop-up into categories / sections. e.g. Lights, Devices, Covers, Settings, Automations...

Separator options

Options (YAML + descriptions)
Name Type Requirement Supported options Description
name string Optional but recommended Any string A name for your separator
icon string Optional but recommended Any mdi: icon An icon for your separator
card_layout string Optional normal (default if not in section view), large (default if in section view), large-2-rows, large-sub-buttons-grid Styling layout of the card, see card layouts
rows number Optional Any number Number of rows (height) (e.g. 2)
sub_button object Optional See sub-buttons Add customized buttons fixed to the right
CSS variables (see Styling)
Variable Expected value Description
--bubble-line-background-color color Background color for the line in the separator

Example

A separator/divider for a "Covers" section
type: custom:bubble-card
card_type: separator
name: Covers
icon: mdi:window-shutter



Empty column

readme-empty-column

This card is here to fill an empty column. This is useful if you have a horizontal-stack in your pop-up with only one card. Take a look at the bottom right corner of this screenshot to (not) see it.

Empty column options

This card has no options and doesn’t support styling, though it does support layout options for HA sections.

Example

An empty column in an horizontal stack
type: horizontal-stack
cards:
  - type: custom:bubble-card
    card_type: button
    ...
  - type: custom:bubble-card
    card_type: empty-column



Sub-buttons only

bubble-card-sub-buttons-only-card

This card is dedicated to sub-buttons only. It’s perfect for menus, quick actions, informational chips, or a fixed footer at the bottom of the page.

Important

This card uses the new sub-buttons schema. Use sub_button.bottom to define your buttons. The sub_button.main section is ignored.

Sub-buttons only options

Options (YAML + descriptions)
Name Type Requirement Supported options Description
sub_button object Required See sub-buttons Define your sub-buttons using the bottom section
hide_main_background boolean Optional true or false (default) Remove the card background
footer_mode boolean Optional true or false (default) Fix the card at the bottom of the page
footer_full_width boolean Optional true or false (default) Make the footer full width (100%)
footer_width number Optional Any number Footer width in pixels when footer_full_width is false
footer_bottom_offset number Optional Any number Distance from the bottom of the page in pixels (default: 16)
card_layout string Optional normal (default if not in section view), large (default if in section view), large-2-rows, large-sub-buttons-grid Styling layout of the card, see card layouts
rows number Optional Any number Number of rows (height) (e.g. 2)
CSS variables (see Styling)
Variable Expected value Description
--bubble-footer-width px Footer width when footer_full_width is false
--bubble-footer-bottom px Footer bottom offset
--bubble-footer-box-shadow see box shadow Box shadow for the footer container

Examples

Chips like (like on the screenshot)
type: custom:bubble-card
card_type: sub-buttons
hide_main_background: true
sub_button:
  main: []
  bottom:
    - name: Chips
      buttons_layout: inline
      group:
        - entity: person.quentin
          show_name: true
          fill_width: false
        - entity: sensor.geraldine_presence
          show_name: true
          fill_width: false
        - entity: input_boolean.alarme
          fill_width: false
          name: Alarm
          show_name: true
          tap_action:
            action: toggle
        - entity: sensor.salle_de_bain_temperature
          fill_width: false
          show_state: true
          state_background: false
        - entity: input_select.test
          fill_width: false
          sub_button_type: select
          name: Scene
          icon: mdi:weather-sunny
          show_state: true
      justify_content: center
rows: 0.941
A fixed footer menu
type: custom:bubble-card
card_type: sub-buttons
footer_mode: true
footer_full_width: true
sub_button:
  bottom:
    - name: Home
      icon: mdi:home
      tap_action:
        action: navigate
        navigation_path: '#home'
    - name: Lights
      icon: mdi:lightbulb
      tap_action:
        action: navigate
        navigation_path: '#lights'
    - name: Settings
      icon: mdi:cog
      tap_action:
        action: navigate
        navigation_path: '#config'
rows: 0.941



Sub-buttons

readme-button

In every card that supports that option, you can add sub-buttons to customize your cards even more. You can, for example, create a button that can control a vacuum, a weather card, or almost anything that you can come up with. These sub-buttons support the tap actions and most of the button options.

Sub-buttons now support three types: Default (button), Slider, and Dropdown / Select. You can mix types in the same card, place sub-buttons at the top or bottom, and organize them into groups for more advanced layouts.

Sub-buttons placement and groups

Sub-buttons structure (main / bottom + groups)
sub_button:
  main:
    - group:
        - entity: sensor.temperature
          show_state: true
          show_background: false
        - entity: sensor.humidity
          show_state: true
          show_background: false
      buttons_layout: column
  bottom:
    - group:
        - entity: light.living_room
        - entity: light.bedroom
      buttons_layout: inline
      justify_content: center
  main_layout: inline
  bottom_layout: rows

Notes:

  • main and bottom are two independent sections. Bottom sub-buttons are fixed to the bottom of the card.
  • main_layout and bottom_layout accept inline (default) or rows to stack groups vertically.
  • Groups are objects with a group array and optional buttons_layout (inline or column).
  • justify_content is available for bottom groups only (start, center, end, fill).
  • When bottom sub-buttons are present, the card layout auto-switches to large unless you explicitly set another layout.
  • Legacy sub_button arrays are still supported and treated as the main section.

Sub-buttons options

Options (YAML + description)
Name Type Requirement Supported options Description
entity string Optional Any entity An entity to control
name string Optional Any string A name for your sub-button, if not defined it will display the entity name
icon string Optional Any mdi: icon An icon for your sub-button, if not defined it will display the entity icon or entity picture
force_icon boolean Optional true or false (default) Force the icon even if an entity picture is available
sub_button_type string Optional default, slider or select Choose the sub-button type
show_background boolean Optional true (default) or false Show a background for your sub-button, it will change its color based on your entity state
state_background boolean Optional true (default) or false Use the state color when the entity is on
light_background boolean Optional true (default) or false Use the light color for the background when available
show_state boolean Optional true or false (default) Show or hide the state of your entity
show_name boolean Optional true or false (default) Show or hide the name
show_icon boolean Optional true (default) or false Show or hide the icon
show_last_changed boolean Optional true or false (default) Show the last changed time of your entity
show_last_updated boolean Optional true or false (default) Show the last updated time of your entity
show_attribute boolean Optional true or false (default) Show an attribute of your entity below its name
attribute string Optional (required if show_attribute is set to true) An attribute from your entity The attribute to show (e.g. brightness)
select_attribute string Optional An attribute list from your entity (see supported options above) This attribute list will open a dropdown if clicked (e.g. effect_list)
show_arrow boolean Optional true (default) or false Show or hide the dropdown arrow for select sub-buttons
scrolling_effect boolean Optional true (default) or false Allow text to scroll when the content exceeds the size of the container
tap_action object Optional See actions Define the type of action on sub-button click, if undefined, more-info will be used.
double_tap_action object Optional See actions Define the type of action on sub-button double click, if undefined, none will be used.
hold_action object Optional See actions Define the type of action on sub-button hold, if undefined, more-info will be used.
fill_width boolean Optional true or false Fill the available width (default: false for main, true for bottom)
width number or string Optional Any number or CSS length Custom width (px for main section, % for bottom section by default)
custom_height number Optional Any number Custom height in pixels
content_layout string Optional icon-left (default), icon-top, icon-bottom, icon-right Icon placement inside the sub-button
always_visible boolean Optional true or false (default) Slider only. Always show the slider instead of opening it on tap
show_button_info boolean Optional true or false (default) Slider only. Show icon/name/state when always_visible is enabled
visibility object or list Optional See conditions Show or hide the sub-button based on conditions
hide_when_parent_unavailable boolean Optional true or false (default) Hide the sub-button if the parent card entity is unavailable
Slider sub-button options (same as button sliders)

Slider sub-buttons support the same slider options as button sliders, including: min_value, max_value, step, tap_to_slide, relative_slide, read_only_slider, slider_live_update, slider_fill_orientation, slider_value_position, invert_slider_value, light_slider_type, cover_slider_type, hue_force_saturation, hue_force_saturation_value, use_accent_color, allow_light_slider_to_0, light_transition, light_transition_time.

CSS variables (see Styling)
Variable Expected value Description
--bubble-sub-button-border-radius px Border radius for the sub-buttons
--bubble-sub-button-background-color color Background color for the sub-buttons
--bubble-sub-slider-border-radius px Border radius for slider sub-buttons
--bubble-sub-slider-background-color color Background color for slider sub-buttons
--bubble-sub-slider-height px Height for always-visible slider sub-buttons
--bubble-sub-button-dark-text-color color Text color on bright sub-button backgrounds

Examples

A button with some sub-buttons to make a vacuum card (like on the screenshot)
type: custom:bubble-card
card_type: button
button_type: switch
name: Vacuum
entity: vacuum.downstairs
icon: mdi:robot-vacuum
show_state: true
show_last_changed: true
tap_action:
  action: more-info
button_action:
  tap_action:
    action: more-info
sub_button:
  - name: Battery
    icon: mdi:battery
    show_name: false
    show_icon: true
    show_background: false
    show_attribute: true
    attribute: battery_level
  - name: Return to dock
    icon: mdi:home
    show_background: false
    tap_action:
      action: call-service
      service: vacuum.return_to_base
      target:
        entity_id: vacuum.downstairs
  - name: Pause
    icon: mdi:pause
    show_background: false
    tap_action:
      action: call-service
      service: vacuum.pause
      target:
        entity_id: vacuum.downstairs
  - name: Start
    icon: mdi:play
    tap_action:
      action: call-service
      service: vacuum.start
      target:
        entity_id: vacuum.downstairs
styles: >-
  .bubble-button-card-container {
    /* Change the background color when the vacuum get an error (optional), more details in the styles template section */
    background: ${state === 'error' ? 'rgb(200, 80, 40)' : ''} !important;
  }
  /* Change the first sub-button battery icon based on the battery_icon attribute, more details in the styles template section */
  ${subButtonIcon[0].setAttribute("icon", hass.states['vacuum.downstairs'].attributes.battery_icon)}
A button slider with a sub-button that shows the brightness and one that toggle the light (like on the screenshot)
type: custom:bubble-card
card_type: button
button_type: slider
name: Kitchen
entity: light.kitchen
icon: mdi:fridge-outline
show_last_updated: true
sub_button:
  - name: Brightness
    icon: mdi:fridge-outline
    show_icon: false
    show_background: false
    show_attribute: true
    attribute: brightness
  - name: Toggle button
    icon: mdi:lightbulb
    tap_action:
      action: toggle
A button that shows the inside and outside temperature with the weather for today and tomorrow (screenshot included)
image

Bad luck for me it's cloudy all the time but all the icons are changing based on the weather.

more like this

agentlytics

Comprehensive analytics dashboard for AI coding agents — Cursor, Windsurf, Claude Code, VS Code Copilot, Zed, Antigravi…

JavaScript555
@f

markItDown

📱 A React app to preview and edit Markdown✍. You can also export it as HTML.

JavaScript51

search

search projects, people, and tags