Functions for creating fluid page layouts. A fluid page layout consists of rows which in turn include columns. Rows exist for the purpose of making sure their elements appear on the same line (if the browser has adequate width). Columns exist for the purpose of defining how much horizontal space within a 12-unit wide grid it's elements should occupy. Fluid pages scale their components in realtime to fill all available browser width.

fluidPage(..., title = NULL, theme = NULL, lang = NULL)




Elements to include within the page


The browser window title (defaults to the host URL of the page). Can also be set as a side effect of the titlePanel() function.


One of the following:

  • NULL (the default), which implies a "stock" build of Bootstrap 3.

  • A bslib::bs_theme() object. This can be used to replace a stock build of Bootstrap 3 with a customized version of Bootstrap 3 or higher.

  • A character string pointing to an alternative Bootstrap stylesheet (normally a css file within the www directory, e.g. www/bootstrap.css).


ISO 639-1 language code for the HTML page, such as "en" or "ko". This will be used as the lang in the <html> tag, as in <html lang="en">. The default (NULL) results in an empty string.


A UI definition that can be passed to the shinyUI function.


To create a fluid page use the fluidPage function and include instances of fluidRow and column() within it. As an alternative to low-level row and column functions you can also use higher-level layout functions like sidebarLayout().


See the Shiny-Application-Layout-Guide for additional details on laying out fluid pages.

See also


## Only run examples in interactive R sessions
if (interactive()) {

# Example of UI with fluidPage
ui <- fluidPage(

  # Application title
  titlePanel("Hello Shiny!"),


    # Sidebar with a slider input
                  "Number of observations:",
                  min = 0,
                  max = 1000,
                  value = 500)

    # Show a plot of the generated distribution

# Server logic
server <- function(input, output) {
  output$distPlot <- renderPlot({

# Complete app with UI and server components
shinyApp(ui, server)

# UI demonstrating column layouts
ui <- fluidPage(
  title = "Hello Shiny!",
    column(width = 4,
    column(width = 3, offset = 2,
      "3 offset 2"

shinyApp(ui, server = function(input, output) { })