Changes in version 0.11.0.9000 Bug fixes - Fixed label-to-options spacing on shiny::radioButtons() and shiny::checkboxGroupInput() in Bootstrap 5, where a Shiny rule was overriding the bslib fix. (#1308) Changes in version 0.11.0 (2026-05-16) New features - Added a new toolbar() component for creating Bootstrap toolbars that can contain buttons, text, and other elements. (#1247) - Added toolbar_input_button() for easily creating buttons to include in a toolbar(). (#1248) - Added toolbar_input_select(), a select input designed for use within a toolbar(). (#1249) - Added update_toolbar_input_select() for updating the choices, icon, label, and selected value of a toolbar_input_select() from the server. (#1266) - Added update_toolbar_input_button() for updating the label, icon, and disabled state of a toolbar_input_button() from the server. (#1266) - Added toolbar_divider() for adding visual dividers with customizable width and spacing between toolbar elements. (#1259) - sidebar() gains a resizable argument (default TRUE) to control whether the sidebar can be resized by dragging its edge on desktop (wide screen sizes). (#1299) - input_code_editor() now supports language = "ggsql" for syntax highlighting of ggsql queries. (#1291) Improvements and bug fixes - bslib's version of Bootstrap and Bootswatch have been updated to 5.3.8. (#1287) - Fixed a caret drift issue in input_code_editor() where the cursor would appear to the right of the actual text insertion point when certain themes or on some operating systems. (#1304) - Fixed the chevron icon on selectInput(selectize = FALSE) when using Bootstrap 5. (#1307) - Improved the sidebar resize handle to avoid conflicts with the sidebar's native scrollbar and to better support touch devices. (#1299) - The brand.yml example app (shiny::runExample("brand.yml", package = "bslib")) now uses brand_pluck() and brand_has() from {brand.yml}. (#1288) Changes in version 0.10.0 (2026-01-26) Breaking changes - bslib now uses the {brand.yml} package for reading brand.yml files. This change improves compatibility with other tools that use brand.yml files, such as Quarto. The {brand.yml} package must be installed for _brand.yml files to be automatically discovered. (#1227) New features - Added a new input_submit_textarea() input element, which is similar to shiny::textAreaInput(), but includes a submit button to only submit the text changes to the server on click. This is especially useful when the input text change triggers a long-running operation and/or the user wants to type longer-form input and review it before submitting it. (#1204) - Added toast notifications based on Bootstrap's Toast component: Use toast() to create customizable toast objects, show_toast() to display a toast message, hide_toast() for manual dismissal, and toast_header() for structured headers with icons and status indicators. Try it with shiny::runExample("toast", package = "bslib"). (#1246) - Added a new input_code_editor() element that allows for light-weight code editing with syntax highlighting, using the prism-code-editor library. The editor supports 20+ languages, more than a dozen themes, and automatic light/dark mode switching. Try it with shiny::runExample("code-editor", package = "bslib"). (#1274) Improvements and bug fixes - card_header() is now flex by default and gains a gap argument to better support complex header layouts. (#1253) - bs_theme_dependencies() now avoids unnecessarily copying internal package files to R's temporary directory more than once when preparing precompiled theme dependencies (e.g. for a standard bs_theme() theme). (#1184) - Fixed an issue where the
areas of page_sidebar() and page_navbar() (with a sidebar) were made to be a fillable containers even when fillable = FALSE. (#1188) - Fixed some typos in the documentation. - When bs_theme(brand = FALSE) we now correctly do not apply brand theming when a _brand.yml file is present in the project. (#1196) - Sidebars from page_sidebar() and layout_sidebar() are now resizable on desktop-sized screen widths, allowing users to resize the sidebar width as desired. (#1217) - sidebar() gains a fillable argument to support vertical fill behavior in sidebars. (#1226) - sidebar_toggle() is now officially deprecated in favor of toggle_sidebar(). (#1235) - Fixed an issue where nav_panel_hidden() could create navs that were still keyboard-discoverable. (#1264) Changes in version 0.9.0 (2025-01-30) Breaking changes - The navbar-related style options of page_navbar() and navset_bar() have been consolidated into a single navbar_options argument that pairs with a new navbar_options() helper. Using the direct position, bg, inverse, collapsible, and underline arguments will continue to work with a deprecation message. (#1141) Related to the above change, navset_bar() now defaults to using underline = TRUE so that both page_navbar() and navset_bar() use the same set of default navbar_options(). In navbar_options(), inverse is replaced by theme, which takes values "light" (dark text on a light background), "dark" (light text on a dark background), or "auto" (follow page settings, the default). This change affects that default navbar foreground and background colors for Bootswatch preset themes with Bootstrap 5. Detailed instructions for customizing the navbar appearance, especially for Bootswatch themes, can be found in ?navbar_options. (#1146) New features - bslib now supports unified theming with brand.yml. brand.yml lets you theme your Shiny apps, Quarto documents and more with a single, portable YAML file. Learn more in the new Unified theming with brand.yml article. (#1148) Improvements and bug fixes - navset_card_pills(), navset_card_underline(), navset_card_tabs() fixed to now respect header/footer arguments (@tanho63, #1024) - Fixed a bug in bs_themer() (and bs_theme_preview()) that caused it to stop applying changes if a Sass variable was NULL. (@meztez, #1112) - Optimized for better performance the internal functions that compile Sass to call the color-contrast() algorithm. (#1140) - input_switch() and input_dark_mode() can be included in Shiny's bookmarking feature. (#1166) - Fixed an issue with the Shiny preset (bs_theme(5, "shiny")) that caused a floating underling to appear when a nav_panel_hidden() was used and active. (#1170) - bslib now uses navbar markup with Bootstrap 5 that's closer to the expected markup for Bootstrap. We still include the navbar-default or navbar-inverse classes on the