muiMaterial brings Material
UI, the world's most
popular React UI framework, to R and Shiny.
If Shiny apps look all the same, it is because most use Bootstrap.
muiMaterial replaces it with Material UI's vast library of components,
giving you fully customized dashboards and websites in R.
Launch a basic dashboard (live here):
muiMaterial::muiMaterialExample("dashboard-simple")Or the R replica of the official MUI dashboard template (live here):
muiMaterial::muiMaterialExample("mui-template-dashboard")AI tools like Claude, ChatGPT, or GitHub Copilot have been trained on
enormous amounts of MUI code. Each MUI component maps directly to an R
function: React's <Button variant="contained" /> becomes
Button(variant = "contained") in R. Just ask an AI to generate MUI
code and adapt it to R. No React or CSS knowledge needed.
Learn more in the AI-Assisted Development vignette.
muiMaterial is not limited to Shiny. You can also use Material UI
components in Quarto documents for rich,
interactive reports and presentations.
Unlike Bootstrap-based packages (bslib, bs4Dash) that lock you into
predefined layouts, muiMaterial lets you structure your app however
you want. Combine it with
reactRouter to build
multi-page websites with client-side
routing.
Extend functionality with companion R packages:
- muiTreeView - Interactive tree navigation
- muiDataGrid (COMING SOON) - Professional data tables with filtering, sorting, and inline editing
- muiCharts (COMING SOON) - Beautiful, responsive charts
- muiDateTimePickers (COMING SOON) - UI components for selecting dates, times, and ranges
Install the stable version from CRAN:
install.packages("muiMaterial")Or install the development version from GitHub:
pak::pak("lgnbhl/muiMaterial")library(shiny)
library(muiMaterial)
ui <- muiMaterialPage(
CssBaseline(
Box(
sx = list(p = 2),
Typography("Hello Material UI!", variant = "h4")
)
)
)
server <- function(input, output, session) {}
shinyApp(ui, server)Use muiMaterialPage() instead of fluidPage() and wrap your UI in
CssBaseline(). Material UI uses its own design system and conflicts
with Bootstrap.
For Shiny inputs, server-side rendering, tabs, and styling details, see the Getting Started vignette.
Run the showcase to see some Shiny inputs in action:
muiMaterial::muiMaterialExample("showcase")Found a bug or have a feature request? Open an issue. Pull requests are welcome.
Follow Felix Luginbuhl on LinkedIn for updates.
This package is released under the MIT License.

