Skip to contents

shinyglass is a theme layer, not a universal skin. It targets Bootstrap 5 / bslib surfaces first, then overlays denser dashboard stacks where practical.

Support matrix (as of 0.2)

Stack Status Notes
fluidPage / navbarPage Supported Drop-in theme = glass_theme()
bslib page_navbar / nav_menu Supported See chrome-kitchen-sink.R
bslib page_sidebar / layout_sidebar Supported Floating glass sidebar; nested layouts stay in-flow (0.1.1+)
bslib cards, value boxes, navsets, accordion Supported Tooltip / popover / toast use the glass menu surface
DT Supported Visible .page-link chips (not li-only)
reactable Supported Avoids double-framing the html-output
gt Supported Table / heading / stripe / summary chrome
leaflet Supported Map container transparency
plotly Good Glass frame + modebar; set paper_bgcolor transparent in R for best dark
shinyWidgets (common inputs) Good Slider tooltips / noUiSlider chips
shinydashboard / bs4Dash / shinydashboardPlus Overlay Glass header/sidebar/boxes/controlbar/dropdowns; layout stays AdminLTE
teal Good Use options(teal.bs_theme = glass_theme())
waiter / shinybusy / loaders Good Blurred overlays, not solid white scrims
shinyalert / SweetAlert2 Good Popup uses glass menu surface
rhandsontable Partial Frame + cell ink; core grid still third-party
echarts4r / highcharter / apex Partial Host wrapper glass; chart internals set in R
Bootstrap 3-only apps Limited Theme is BS5 via bslib

Layout contract

  • Open bslib sidebars reserve space in main so content is not buried under the floating chrome.
  • Nested layout_sidebar() does not double-float.
  • AdminLTE left sidebars keep fixed AdminLTE geometry; glass is visual overlay only.

Examples

# overlays: datepicker, notifications, showModal, accordion, navbar menu
shiny::runApp(system.file("examples", "chrome-kitchen-sink.R", package = "shinyglass"))

# plotly + gt (+ waiter if installed)
shiny::runApp(system.file("examples", "plotly-gt-demo.R", package = "shinyglass"))

# denser AdminLTE (requires shinydashboardPlus)
shiny::runApp(system.file("examples", "shinydashboardPlus-glass-demo.R", package = "shinyglass"))

Dual-theme contrast audit (optional ecosystem apps skip if packages missing):

Rscript inst/scripts/audit-glass-contrast.R --apps=demo,dashboard,inputs,plotly_gt,chrome

Tips

  • Prefer bslib page functions when you can — glass was designed around them.
  • For plotly dark mode, pass transparent paper_bgcolor / plot_bgcolor in layout() (see plotly-gt-demo.R); CSS handles the modebar.
  • For dark mode in dense AdminLTE apps, re-check value/info box contrast after switching preset at runtime.
  • preset = "auto" is ideal for demos; pin "light" or "dark" for screenshots and tests.