The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
Liquid
Glass themes for Shiny.
glass_theme() returns a bslib theme with translucent
surfaces, backdrop blur, and system typography. Pass it as
theme = glass_theme() to fluidPage(),
navbarPage(), or other page functions that accept a bslib
theme.
Runtime controls (no page reload):
glass_theme_toggle() +
update_glass_theme(preset = …), or
preset = "auto" to follow the OSglass_intensity_slider() (and
glass_theme(intensity = 0–1))Documentation · GitHub · Live demos
Drop in glass_intensity_slider() for the same continuous
control as iOS 27 Settings → Appearance → Liquid Glass.
Surfaces update live as you drag from Ultra Clear
(0) to Tinted (1) — no page
reload.
Public apps on shinyapps.io (free tier may take a few seconds to wake):
| App | What it shows |
|---|---|
| Demo + theme toggle | Core glass UI +
glass_intensity_slider() + Light / Dark /
Auto |
| bslib dashboard | page_sidebar, value boxes, plots, DT + intensity in the
sidebar |
| Inputs gallery | Built-in Shiny inputs under glass |
| plotly + gt | plotly modebar + gt tables under glass |
| Olympic medals | denser dreamRs-style dashboard (glass port) |
# once on CRAN:
install.packages("shinyglass")
# development version:
# remotes::install_github("ericrayanderson/shinyglass")library(shiny)
library(shinyglass)
ui <- fluidPage(
theme = glass_theme(preset = "auto", intensity = 0.45),
titlePanel("Liquid Glass"),
# iOS 27-style Ultra Clear → Tinted (updates live on the client)
glass_intensity_slider("glass_intensity"),
# Light / Dark / Auto buttons
glass_theme_toggle(selected = "auto"),
sliderInput("n", "Bars", 5, 30, 15),
plotOutput("plot")
)
server <- function(input, output, session) {
observe_glass_theme_toggle(input, session)
# optional: keep server session intensity in sync (client already updates live)
observe_glass_intensity(input, session, "glass_intensity")
output$plot <- renderPlot(barplot(seq_len(input$n), col = "#007AFF", border = NA))
}
shinyApp(ui, server)Set the starting material with
glass_theme(intensity = …) (0 Ultra Clear …
1 Tinted), or drive it from the server with
update_glass_theme(session, intensity = 0.8).
See the theming
article for knobs (intensity, tint,
specular, nav_morph) and CSS variables.
# re-deploy live demos (requires rsconnect; installs shinyglass from GitHub):
# remotes::install_github("ericrayanderson/shinyglass")
# Rscript inst/scripts/deploy-shinyapps-demos.R
# Rscript inst/scripts/deploy-shinyapps-demos.R --apps=demo,dashboard,intensity
#
# visual QA (contrast + DT/selectize structure, light+dark matrix):
# Rscript inst/scripts/audit-glass-contrast.R
# see inst/scripts/VISUAL-QA.mdshiny::runApp(system.file("examples", "demo-app.R", package = "shinyglass"))
shiny::runApp(system.file("examples", "bslib-dashboard.R", package = "shinyglass"))
shiny::runApp(system.file("examples", "intensity-slider-demo.R", package = "shinyglass"))
shiny::runApp(system.file("examples", "inputs-gallery.R", package = "shinyglass"))
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"))A parallel package lives under python/
(not on CRAN/PyPI yet). See that README for wheel builds.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.