Breaking change (potential)

  • Fix #302: both dashboardSidebar() and dashboardControlbar() default skin value is NULL. This allows them to inherit from the parent dashboardPage() dark parameter and have either a full light or full dark skin. Therefore, it won’t be possible anymore to apply a light sidebar background with the dashboardPage() when the main theme is dark and inversely. If you want to do so, you have to set dark = NULL, for instance:


  ui = dashboardPage(
    dark = NULL,
    header = dashboardHeader(
      title = dashboardBrand(
        title = "My dashboard",
        color = "primary",
        href = "",
        image = ""
    sidebar = dashboardSidebar(skin = "dark"),
    body = dashboardBody(
      box(status = "danger"),
      box(status = "primary"),
      box(status = "orange")
    controlbar = dashboardControlbar(skin = "dark"),
    title = "DashboardPage"
  server = function(input, output) { }

Bug fixes

  • Remove unused headTitles parameter from bs4Table().
  • Fix #315: alert title is not added to alert body and if Alert is not closable the header contains “undefined” key word. Thanks @MohammedFCIS.

New feature

New navbar navigation menu. - navbarTab(), navbarMenu() and updateNavbarTabs() to create navbar navigation. This will close #108.

Minor change

Bug fixes

  • Fix #349: allow to pass list of accordionItem() with .list parameter in accordion(). Thanks @vladimirstroganov for reporting.
  • Fix #330: allow to use input elements (or any not menuItem element) in the sidebar.
  • Fix #343: Refine help parameter behavior in dashboardPage(). If NULL, no icon is shown. If FALSE, icon and toggle are shown but not checked. If TRUE the toggle is checked.


  • Change dark/light switch CSS class for consistency.

New features

Minor change

  • Fix #323: remove sidebar collapse animation on app startup. JS code moved back to R. Thanks @lucas-alcantara for reporting.

Bug fixes

Breaking change

Minor changes/fixes

This release is a patch to fix an issue preventing the release of Shiny 1.7.0.

Minor changes

  • Internal change regarding the waiter package but no user impact. Thanks @JohnCoene.

Patch to fix CRAN warning on Mac M1.

Minor changes

Minor changes

Bug Fix

  • Fix #220: Disable badgeLabel in SidebarMenuItem when collapsed. Wrong tag structure fixed.
  • Fix #219: icon appears after header in bs4Card/box.

Breaking changes

This is to align with shinydashboard and shinydashboardPlus. ### bs4DashPage/dashboardPage - navbar param becomes header. - Remove old_school, sidebar_mini, sidebar_collapsed, controlbar_collapsed, controlbar_overlay, enable_preloader, loading_duration and loading_background. These parameters move to dashboardSidebar, controlbar … - New freshTheme parameter to pass fresh powered themes. - New options parameter to configure AdminLTE3. - New preloader to use waiter as a preloading engine.


  • ... becomes left.
  • right_text becomes right.


  • controlbarIcon accepts shiny::icon instead of the icon name.
  • sidebarIcon accepts shiny::icon instead of the icon name.
  • add title, titleWidth and disable


  • src becomes image.


  • Add collapsed and overlay.
  • Remove title.
  • Rename inputId to id.


  • inputId becomes id.
  • New alias: updateControlbar.
  • session is not mandatory


  • inputId moved to the end.
  • inputId renamed to id.
  • Added collapsed and minified.
  • Add width.
  • Remove opacity, title, brandColor, url and src.


  • child_indent becomes childIndent.
  • Add .list to pass programmatically generated bs4SidebarMenuItem.



  • img and text become image and name, respectively.


  • Change solidHeader behavior.
  • Remove all sidebar related parameters from bs4Card(). This is now part of the new bs4CardSidebar().
  • Remove dropdownIcon parameter from bs4Card(). It is now part of the dropdownItemList().
  • Remove labelStatus, labelText and labelTooltip params from bs4Card(). This is to reduce the number of parameters of cards.
  • By default, closable is now FALSE for bs4Card().
  • Rename dropdownItemList by cardDropdown
  • Rename dropdownItemListItem by cardDropdownItem



  • Change solidHeader behavior.



  • status becomes color
  • Remove ... for subtitle
  • Remove iconStatus.
  • Add href and fill.
  • Rename gradientColor to gradient.


  • src becomes image.
  • status becomes color.



  • src becomes image.
  • titleUrl becomes href.



  • This component has been removed



  • badge becomes badgeStatus
  • Add type.
  • icon expects shiny::icon.
  • Replace labelText by headerText.
  • Add .list and href.
  • Remove align.



New features

Minor change

  • bs4Sortable() is initialized each time a new sortable element is added. Fixes #198.
  • New taskItem().
  • Add indicators and .list to carousel().
  • insertTab() is using more shiny vanilla elements.
  • bs4UserMenu() does not close when clicked inside.
  • Add glyphicons as an html dependency
  • New legacy parameter in bs4SidebarMenu(): to use old AdminLTE2 styling for item selection
  • Now, clicking outside the bs4DashControlbar() when it is opened will close it. To keep it open, see below
  • New pinned option for bs4DashControlbar(): allow to block the controlbar state
  • New expandedName param for bs4SidebarMenuItem to align with shinydashboard
  • id is NULL in bs4TabSetPanel() by default
  • side is default to left in bs4TabSetPanel()
  • change bs4TabPanel() param order to align with shiny

Bug Fix

Breaking Changes

  • remove fixed parameters from bs4DashNavbar() since it does not exist in the new AdminLTE version
  • rework on bs4DropdownMenuItem: change text to message, date to time. Add new params: from, src, status and type.

Major Changes

  • add link back to Thanks @statnmap
  • upgrade AdminLTE3 version to rc4
  • add bs4DashSidebar() input binding to indicate the state (collapse: FALSE, open: TRUE) as well as updatebs4Sidebar() to programmatically toggle its state
  • add bs4Controlbar() input binding to indicate the state (collapse: FALSE, open: TRUE) as well as updatebs4Controlbar() to programmatically toggle its state
  • add bs4Card() input binding to indicate the state (collapse: FALSE, open: TRUE, maximize, closed, …) as well as updatebs4Card() to programmatically toggle its state
  • add bs4InsertTab() to programmatically insert bs4TabPanel() in bs4TabSetPanel()
  • add bs4RemoveTab() to programmatically remove bs4TabPanel() in bs4TabSetPanel()

New features

  • bs4DashPage() has a new sidebar_mini parameter. When TRUE, the sidebar has a minimum width when collapsed (you still see icons). When false, it behaves like in shinydashboard
  • bs4InfoBox() can now navigate between tabs if the tabName parameter is specified. It must however correspond to an existing bs4TabItem() in the body!
  • bs4ValueBox() has a footer argument. It is different from the href parameter. Thanks @stefanfritsch
  • add expand_on_hover parameter to bs4DashSidebar()
  • add compact parameters to bs4DashNavbar() to reduce the navbar size
  • add getAdminLTEColors() to preview all available color themes
  • by default, bs4DashSidebar() has a fixed layout. This prevent from not seeing sidebar items if the body contains too many elements
  • bs4DashPage() has options to change the bs4Controlbar() behavior when it expands (see controlbar_overlay)
  • bs4SidebarMenu() has 3 new parameters: flat (design effect), child_indent and compact
  • add sidebar in bs4Card()
  • add bs4UserMenu() for bs4DashNavbar()
  • add bs4Ribbon(), a sort of enhanced label for cards or any content
  • add bs4Quote(), an improved blockquote tag for Bootstrap 4

Bug Fix

Major changes

Breaking changes

Minor Changes

Bug Fix

Breaking change

Major changes

Minor changes

Bug fix

  • Fix icon rendering issue due to a change in shiny 1.2.0 dependencies (font awesome)
  • Fix #19: Whenever a bs4Card() starts on a collapsed state, the content is displayed when uncollapsed is pressed. Thanks @stanmap for the remark. (See here for a similar issue)
  • bs4Card(): the collapse icon changes to + and - depending on the current collapse status.
  • fix various issues in bs4DropdownMenu()
  • fix #12: Compatibility with shinyWidgets pickerInput. Thanks @pvictor
  • fix #13 in bs4TabPanel(): handle tabName with space and with punctuation characters. Thanks @stephLH
  • fix bs4TabCard(): when the user set 2 or more active tabs at the same time, only the first one is selected
  • related to #16: modify bs4Dash.js file so that only the first body content tab is selected and not that of the bs4TabCard(), as they have the same class (tab-pane).

Major changes

  • bs4Dash now works on (previously, there was a problem with tab navigation)
  • major update of all dependencies (bootstrap 4, fontawesome, ionicons, …) with htmltools

Minor changes

  • initial release