shiny (version 1.8.0)

actionButton: Action button/link


Creates an action button or link whose value is initially zero, and increments by one each time it is pressed.


actionButton(inputId, label, icon = NULL, width = NULL, ...)

actionLink(inputId, label, icon = NULL, ...)



The input slot that will be used to access the value.


The contents of the button or link--usually a text label, but you could also use any other HTML, like an image.


An optional icon() to appear on the button.


The width of the input, e.g. '400px', or '100%'; see validateCssUnit().


Named attributes to be applied to the button or link.

Server value

An integer of class "shinyActionButtonValue". This class differs from ordinary integers in that a value of 0 is considered "falsy". This implies two things:

  • Event handlers (e.g., observeEvent(), eventReactive()) won't execute on initial load.

  • Input validation (e.g., req(), need()) will fail on initial load.

See Also

observeEvent() and eventReactive()

Other input elements: checkboxGroupInput(), checkboxInput(), dateInput(), dateRangeInput(), fileInput(), numericInput(), passwordInput(), radioButtons(), selectInput(), sliderInput(), submitButton(), textAreaInput(), textInput(), varSelectInput()


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

ui <- fluidPage(
  sliderInput("obs", "Number of observations", 0, 1000, 500),
  actionButton("goButton", "Go!", class = "btn-success"),

server <- function(input, output) {
  output$distPlot <- renderPlot({
    # Take a dependency on input$goButton. This will run once initially,
    # because the value changes from NULL to 0.

    # Use isolate() to avoid dependency on input$obs
    dist <- isolate(rnorm(input$obs))

shinyApp(ui, server)


## Example of adding extra class values
actionButton("largeButton", "Large Primary Button", class = "btn-primary btn-lg")
actionLink("infoLink", "Information Link", class = "btn-info")

Run the code above in your browser using DataCamp Workspace