Shiny logo.
  • Home
  • Get Started
  • Shiny for R
    • The R language logo
    • Get Started
    • Components
    • Layouts
    • Articles
    • Gallery
    • Reference
    • Help
    • Deploy
    • Contribute
  • Shiny for Python
  • Blog
  1. Articles
  • ARTICLES
  • Start
  • Build
    • Structure
      • Standalone apps
        • App formats and launching apps
        • Two-file Shiny apps
      • Interactive documents
        • Introduction to R Markdown
        • R Markdown integration in the RStudio IDE
        • Setting Output args via Render functions
        • Introduction to interactive documents
        • The R Markdown cheatsheet
        • Setting Output args via Render functions
        • Generating downloadable reports
      • Dashboards
        • Dashboards
      • Gadgets
        • Shiny Gadgets
        • Designing Gadget UI
    • Backend
      • Reactivity
        • Reactivity - An overview
        • Stop reactions with isolate()
        • Execution scheduling
        • How to understand reactivity in R
        • Learn about your user with session$clientData
      • Data
        • Database basics - dplyr and DBI
        • SQL injection prevention
        • Using the pool package (basics)
        • Using the pool package (advanced)
        • Using dplyr and pool to query a database
        • Persistent data storage in Shiny apps
    • Frontend
      • User interface
        • Application layout guide
        • Display modes
        • Tabsets
        • Customize your UI with HTML
        • Build your entire UI with HTML
        • Build a dynamic UI that reacts to user input
        • HTML Templates
        • Shiny HTML Tags Glossary
        • Progress indicators
        • Modal dialogs
        • Notifications
        • Themes
        • Render images in a Shiny app
        • Displaying and customizing static tables
        • How to use DataTables in a Shiny App
        • Using Action Buttons
        • Using sliders
        • Help users download data from your app
        • Help users upload files to your app
        • Using selectize input
      • Graphics & visualization
        • Interactive plots
        • Selecting rows of data
        • Interactive plots - advanced
      • Shiny extensions
        • htmlwidgets
        • JavaScript actions packaged for Shiny apps
        • How to build a JavaScript based widget
        • How to add functionality to JavaScript widgets
        • How to send messages from the browser to the server and back using Shiny
        • How to develop an interactive, dynamic help system for your app with introJS
        • How to create custom input bindings
        • Putting everything together to create an interactive dashboard
      • Customizing Shiny
        • Using custom CSS in your app
        • Build custom input objects
        • Build custom output objects
        • Add Google Analytics
        • Packaging JavaScript code for Shiny
        • Communicating with Shiny via JavaScript
        • JavaScript Events in Shiny
        • Putting everything together to create an interactive dashboard
  • Improve
    • Refactor
      • Code quality
        • Debugging Shiny applications
        • Upgrading to a new version of R
        • Handling missing inputs with req(…)
        • Scoping rules for Shiny apps
        • Reconnecting to Shiny apps
        • Sanitizing error messages
        • Write error messages for your UI with validate
        • Unicode characters in Shiny apps
      • Testing
        • Shiny testing overview
        • shinytest
        • Server function testing
      • Modules
        • Modularizing Shiny app code
        • Communication between modules
    • Scale
      • Measure usage
        • Shiny App Usage Tracking
        • Add Google Analytics
      • Performance and scalability
        • Using caching in Shiny to maximize performance
        • Plot Caching
        • Profiling your Shiny app
        • Performance
        • Non-blocking operations
      • Tuning
        • Scaling and Performance Tuning with shinyapps.io
        • Scaling and Performance Tuning with Shiny Server Pro and Posit Connect
  • Share
    • Deployment
      • Deploying Shiny apps to the web
      • Getting started with shinyapps.io
      • r/articles/share/shinyapps-auth/index.qmd
      • Setting up custom domains on shinyapps.io
      • Sharing data across sessions on shinyapps.io
      • Migrating authentication on shinyapps.io
      • Introduction to Shiny Server
      • Allowing different libraries for different apps on Shiny Server, Shiny Server Pro, and Posit Connect
      • Creating user privileges on Posit Connect and Shiny Server Pro
      • Administrating Shiny Server, Shiny Server Pro, and Posit Connect
    • Distribution
      • Sharing apps to run locally
      • Save your app as a function
    • Bookmarking
      • Bookmarking state
      • Advanced bookmarking
      • Bookmarking and modules

Articles

A comprehensive guide to using Shiny.

A comprehensive guide to using Shiny. If you are just starting out, you may want to explore the Get Started Tutorials to learn the basics. Otherwise, choose your own path with the articles below!

Start

An picture of the cover of Hadley Wickham's book, Mastering Shiny.

THE BEST PLACE TO START

Mastering Shiny

By Hadley Wickham

A free, online book designed to take you from basic Shiny to creating your own customized apps.

Read Now

If you are beginning to learn Shiny for R, here are a few resources you’ll want to consider:

  • Hadley Wickham’s Mastering Shiny book
  • Shiny for R’s Get Started Tutorials
  • The Shiny Cheat Sheet
  • Posit’s Demos and Tutorials on YouTube

Build

Structure: Standalone apps
  • App formats and launching apps

  • Two-file Shiny apps

Structure: Interactive documents
  • Introduction to R Markdown

  • R Markdown integration in the RStudio IDE

  • Setting Output args via Render functions

  • Introduction to interactive documents

  • The R Markdown cheatsheet

  • Generating downloadable reports

Structure: Dashboards
  • Dashboards
Structure: Gadgets
  • Shiny Gadgets

  • Designing Gadget UI

Backend: Reactivity
  • Reactivity - An overview

  • Execution scheduling

  • Learn about your user with session$clientData

  • Stop reactions with isolate()

  • How to understand reactivity in R

Backend: Data
  • Database basics - dplyr and DBI

  • SQL injection prevention

  • Using the pool package (basics)

  • Using the pool package (advanced)

  • Using dplyr and pool to query a database

  • Persistent data storage in Shiny apps

Frontend: User interface
  • Application layout guide

  • Display modes

  • Tabsets

  • Customize your UI with HTML

  • your entire UI with HTML

  • a dynamic UI that reacts to user input

  • HTML Templates

  • Shiny HTML Tags Glossary

  • Progress indicators

  • Modal dialogs

  • Notifications

  • Themes

  • Render images in a Shiny app

  • Displaying and customizing static tables

  • How to use DataTables in a Shiny App

  • Using Action Buttons

  • Using sliders

  • Help users download data from your app

  • Help users upload files to your app

  • Using selectize input

Frontend: Graphics & visualization
  • Interactive plots

  • Selecting rows of data

  • Interactive plots - advanced

Frontend: Shiny extensions
  • htmlwidgets

  • JavaScript actions packaged for Shiny apps

  • How to a JavaScript based widget

  • How to add functionality to JavaScript widgets

  • How to send messages from the browser to the server and back using Shiny

  • How to develop an interactive, dynamic help system for your app with introJS

  • How to create custom input bindings

  • Putting everything together to create an interactive dashboard

Frontend: Customizing Shiny
  • Using custom CSS in your app

  • Build custom input objects

  • Build custom output objects

  • Add Google Analytics to a Shiny app

  • Packaging JavaScript code for Shiny

  • Communicating with Shiny via JavaScript

  • JavaScript Events in Shiny

No matching items

Improve

Refactor: Code quality
  • Debugging Shiny applications

  • Upgrading to a new version of R

  • Handling missing inputs with req(…)

  • Scoping rules for Shiny apps

  • Reconnecting to Shiny apps

  • Sanitizing error messages

  • Write error messages for your UI with validate

  • Unicode characters in Shiny apps

Refactor: Testing
  • Shiny testing overview

  • shinytest

  • Server function testing with Shiny

Refactor: Modules
  • Modularizing Shiny app code

  • Communication between modules

Scale: Measure usage
  • Shiny App Usage Tracking

  • Add Google Analytics to a Shiny app

Scale: Performance and scalability
  • Using caching in Shiny to maximize performance

  • Plot Caching

  • Profiling your Shiny app

  • Performance

  • Non-blocking operations

Scale: Tuning
  • Scaling and Performance Tuning with shinyapps.io

  • Scaling and Performance Tuning with Shiny Server Pro and Posit Connect

No matching items

Share

Deployment
  • Deploying Shiny apps to the web

  • Getting started with shinyapps.io

  • Setting up custom domains on shinyapps.io

  • Sharing data across sessions on shinyapps.io

  • Migrating authentication on shinyapps.io

  • Introduction to Shiny Server

  • Allowing different libraries for different apps on Shiny Server, Shiny Server Pro, and Posit Connect

  • Creating user privileges on Posit Connect and Shiny Server Pro

  • Administrating Shiny Server, Shiny Server Pro, and Posit Connect

Distribution
  • Sharing apps to run locally

  • Save your app as a function

Bookmarking
  • Bookmarking state

  • Advanced bookmarking

  • Bookmarking and modules

No matching items

Proudly supported by Posit