Learn R Programming

Loading screens for Shiny

Website | Demo | Get Started | Cheat Sheet

The waiter lets you programmatically show and hide partial or full page loading screens with spinners or loading bars to keep your users patiently waiting as you load or compute fancy things.

FeatureWaiterWaitressHostessAttendant
Progress Bar:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Full Screen:heavy_check_mark::heavy_check_mark::heavy_multiplication_x::heavy_multiplication_x:
Works with waiter:heavy_check_mark::heavy_multiplication_x::heavy_check_mark::heavy_check_mark:
Spinner:heavy_check_mark::heavy_multiplication_x::heavy_multiplication_x::heavy_multiplication_x:
Updatable:heavy_check_mark::heavy_multiplication_x::heavy_multiplication_x::heavy_check_mark:
Notifications:heavy_multiplication_x::heavy_check_mark::heavy_multiplication_x::heavy_multiplication_x:

Examples

Below are simple examples of applications that use the package, consult the website for more.

Waiter

To use the waiter:

  1. Include useWaiter in your UI.
  2. Trigger waiter_show to show the waiting screen.
  3. Eventually trigger waiter_hide to hide the loading screen.
library(shiny)
library(waiter)

ui <- fluidPage(
  useWaiter(), # include dependencies
  actionButton("show", "Show loading for 3 seconds")
)

server <- function(input, output, session){

  observeEvent(input$show, {

    waiter_show( # show the waiter
      html = spin_fading_circles() # use a spinner
    )

    Sys.sleep(3) # do something that takes time
    
    waiter_hide() # hide the waiter
  })
  
}

shinyApp(ui, server)

The waiter includes more options to customise the spinner, the background, show the waiter on load, etc.

Waitress

To use the waitress:

  1. Include use_waitress in your UI.
  2. Initialise a waitress from the Waitress object with the new method.
  3. You must then call the start.
  4. On the waitress object use the increase method to increase the progress bar.
  5. Use the hide method when done.
library(shiny)
library(waiter)

ui <- fluidPage(
  useWaitress(),
  p("App content")
)

server <- function(input, output){

  # call the waitress
  waitress <- Waitress$
    new(theme = "overlay-percent")$
    start() # start

  for(i in 1:10){
    waitress$inc(10) # increase by 10%
    Sys.sleep(.3)
  }

  # hide when it's done
  waitress$close() 

}

shinyApp(ui, server)

There are more options to the waitress, you can have it overlay any element (such as the navbar), automagically increment it, etc.

Get it

You can install waiter from CRAN.

install.packages("waiter")

Or the development version from Github with:

install.packages("remotes")
remotes::install_github("JohnCoene/waiter")

Please note that the ‘waiter’ project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

Copy Link

Version

Install

install.packages('waiter')

Monthly Downloads

37,104

Version

0.2.5.1

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

John Coene

Last Published

September 23rd, 2025

Functions in waiter (0.2.5.1)

waitress

Waitress
withProgressAttendant

Report Progress Attendant
withProgressWaitress

Report Progress Waitress
waiterTheme

Define a Theme
withWaiter

With Waiter
waitressClass

Waitress R6 Class
.random_name

Create random name
attendantBar

Bootstrap 4 Loading Bar
hostessLoader

Loader
garcon

Garcon
Attendant

Attendant
httr_progress

Waitress with httr
hostess

Hostess
autoWaiter

Automatic Waiter
.theme_or_value

Theme or Value
construct

Spinner Constructor
triggerWaiter

Trigger Waiter
transparent

Transparency
steward

Steward
waiterClass

Waiter R6 Class
spinners

Spinners
themes_to_js

Waitress Themes
waiterOptionInternal

Get Waiter Option
useAttendant

Attendant Progress Dependencies
preview_spinner

Preview spinner
waiter

Waiter