The R Shiny packages you need for your web apps!


Shiny is an R Package to deploy web apps using an R backend. Let’s face it, Shiny is awesome! It brings all the power of R to a simple web app with interactivity, user inputs, and interactive visualizations. If you don’t know Shiny yet, you can access a selection of apps on Show me shiny.
As usual with R, the community is great and has created lots of packages for Shiny, here is a personal selection of Shiny packages.
NB: The post focuses on shiny functionalities and visual improvements but it does not deal with data visualization packages. You should check A pick of the best R packages for interactive plot and visualization (1/2) to discover visualizations!

Improving the Shiny UI

This sections will show you some Shiny packages to improve your UI with new components and UI/UX improvements like draggable UI or in-app tutorial.

ShinyDashboard by Rstudio

ShinyDashboard makes it easy to create a dashboard and is based on the AdminLTE Bootstrap theme. Basically, you can build much more complex shiny apps with a sidebar, a header with notifications, messages, … and Bootstrap UI components (box, value box, info box). As it’s based on the adminLTE theme and bootstrap, you can often use their custom HTML classes by adding a few HTML lines to your application.

Example Shiny Dashboard
An example of a Shiny dashboard application

This package should be downloaded with Shiny and is really a must have!

Version: 0.6.1 (June 15, 2017) on CRAN
License: GPL-2
Package components’ License: GPL-2

shiny.semantic by Appsilon

Like ShinyDashboard, shiny.semantic is a wrapper for a web UI: Semantic UI. Semantic UI looks really beautiful and modern and has more varied components and inputs than Bootstrap.

Components from Semantic UI.

This slideshow requires JavaScript.

The apps made with this package looks really awesome, you can check this demo app from Appsilon. However, the package is not easy to use at the beginning, its syntax is very close to HTML and may require some adaptation.

Version: 0.1.1 (2017-05-29) on CRAN
License: MIT
Package components’ License: MIT

ShinyBS by ebailey78

ShinyBS adds some Bootstrap components to Shiny such as popovers, tooltips, and modal windows. Since modal windows are now included in Shiny, the main interest of the packages lies in the popover and tooltips. They can be easily added and parametrized using a R syntax.

Version: 0.61 (2015-03-30 ) on CRAN
License: GPL-3
Package components’ License: MIT

shinyjqui by Yang-Tang

Shinyjqui adds the Jquery UI to Shiny and this is really awesome! With the package, you can create drag, resize, sort and animates the elements of your UI with a few lines of code. This really adds a wahoo factor to your apps and corrects the fixed/static aspect of Shiny applications. Just check this example from the repository and you will love this Shiny package!


Version: 0.2.0 ( 2017-07-04 ) on CRAN
License: MIT
Package components’ license: CC0

rintrojs by CarlGanz

Is your app really complex? You don’t want your user to get lost and to quit? Then, you should really give a look at rintrojs. It’s a wrapper for the intro.js library to create step-by-step walkthroughs for your app and to show the users how they can use it. You can trigger the intro programmatically (it can be triggered when the user clicks on a ‘Hey I need help’ button) and the intro will highlight the elements of interest in your app with a comment. You can check the demo app to see it working.
This is definitely a must have for complex apps!

Version: 0.2.0 ( 2017-07-04 ) on CRAN
License: GNU Affero General Public License v3.0
Package components’ license (intro.js)
Commercial license for commercial use (price are reasonable though).
GNU AGPLv3 for open-source use.

shinycssloaders by andrewsali

As you have already guessed, shinycssloader will show a CSS loader when an element of the application has not been calculated yet or is out-of-date. This can be really useful when your computation takes some seconds to avoid an ugly white box.

An example of shiny css loader (from the package GitHub).

Example of shiny CSS Loader

Version: 0.2.0 ( 2017-05-12 ) on CRAN
License: GPL-3
Package components’ license (CSS-loaders): MIT


New Shiny inputs

These Shiny packages bring new inputs and variety to your app.

shinyWidgets by dreamRs

ShinyWidgets brings news and improved inputs from Bootstrap to Shiny:

  • Improved radio button and checkbox inputs
  • Grouped checkbox and radio buttons which can be used instead of the original checkboxes and radio. Very useful for mobile-friendly whiny apps!
  • Two different types of switch for boolean inputs
  • A pickerInput which enhances a lot the vanilla selectize input
  • Drop-down buttons and improved modal/alert windows.

Examples of inputs from shinyWidgets
Examples Shiny Widgets

You can see a live version of all the inputs here.

Version: 0.3.0 (June 12, 2017) on CRAN
License: GPL-3
Package components’ License: MIT

colourpicker by daattali

colourpicker is a package to have a ….  Colour Picker input in Shiny. The package is easy to use in Shiny and also come with an add-in to try and select the best palette for your plot.

Version: 0.3 (December 5, 2016) on CRAN
License: MIT

shinyTree by trestletech

shinyTree is a wrapper for the jsTree library and introduce interactive tree inputs (for instance to explore folders and directories) with options to have a search field, reorderable nodes, and CSS customization.shinyTree

Version: 0.2.2 ( 2015-02-13) on CRAN
License: MIT
Package components’ License: MIT

shinyFiles by thomasp85

shinyFiles create a files explorer to access the files on the server-sides (for instance to manage user content).

Example Shiny files

Version: 0.6.2 ( 2016-08-28) on CRAN
License: GPL-2 GPL-3

ShinySky by AnalytixWare

ShinySky also brings some new inputs. Though the package does not seems active anymore, it has some nice inputs that are not in Shiny:

  • Typeahead input which will complete what the user is typing in the input and provide more CSS and HTML when the results appear. It’s like a slectizeInput on steroids.
  • Select2input, which is also a selectize on steroids with a possibility to rearrange the inputs order.

Version: 0.1.2 (2014-3-27) on Github
License: MIT

Make your tables great again

The vanilla tables are so-so, this selection of Shiny packages will help you to create interactive, editable and stylish tables.

DT by RStudio

DT is an interface to the JS library datatables. The package is a must-have if you plan to insert tables in your apps, it improves the vanilla tables with:

  • Sorting, search, filtering, and scrolling for long or wide tables
  • Enhance table layout with captions and custom table container.
  • Possibility to insert raw HTML codes (for instance to add buttons) and to modify your table style.
  • Easy table export to convenient format (pdf, excel, clipboard, …)
  • Built-in selection to use the table as a Shiny Input. For instance, you can detect which cell has been clicked, which row(s) or columns are selected, …

Version: 0.2 ( 2016-08-09) on CRAN
License: GPL-3
Package components’ License: Open source components

Formattable by Renkun

Formattable is centered around data presentation and formatting in a table. It has conditional styling options (colors, bar charts, icons, …) for your table and formatting options (Rounding, percentage, …). Even if I tend to prefer DT for its interactivity, I found formattable easier to use for formatting and styling tables.

Example of a formattable (from package repo)

Example Formattable

Version: ( 2016-08-05) on CRAN
License: MIT

Rhandsontable by jrowen

Rhansonetable brings handsontable.js into Shiny. Handsontable.js is like excel brought in your internet browser, with rhansontable you can use editable tables in your shiny application!

Example of rhansontable (from the package vignette)


Here is a quick list of its functionalities:

  • Editable table and shiny binding to use the table as a Shiny input
  • Definition of column types, for instance, you can set a column as being a date column (with a date picker) a character column or a boolean column (with a checkbox).
  • Contextual events on right clicks to add and remove rows, to add comments or borders.
  • Data validation with built-in or custom validation functions (in javascript)
  • Custom formatting of data, insertion of HTML code and of sparklines.

Version: (2016-08-05) on CRAN
License: MIT
Package components’ License: MIT for the community version of handsontable (which is used in the package)

Sparkline by timelyportfolio & ramnathv

Sparklines are tiny plots than can be put in a single cell, they can be used to show trends or evolution over the last periods. Hence, Sparkline is an HTMLWidget to add interactive sparklines in your tables and also includes bar charts and boxplots. That’s a great package to make your tables even more interactive and visually appealing.

Examples of sparkline (from the package repo)

sparkline example

Version: 2.0 ( 2016-11-12) on CRAN
License: MIT
Package components’ License: 3-Clause BSD License ( jquery sparkline)

A text and code editor in your shiny apps: ShinyAce by trestletech

Ace is a web-based code editor and gives you access to syntax coloring and code edition in your web browser. As you have already guessed, ShinyAce is a wrapper for the Ace editor and contains most of its functionalities. The editor field can also be used as an input to run the code from the editor.
[Warning: you should only allow this in restricted/logged parts of your application. You don’t want everyone playing with your server.]

Version: 0.2.1 (2016-03-14) on CRAN
License: MIT
Package components’ License: BSD 3 (Ace)

Interfacing your Shiny app with JS

shinyJs by Dean Attali

ShinyJs greatly improves the interaction between R and Shiny, the package is divided into two parts:

  • It makes some js-based action (hiding an element, on-event listener, change the class of an HTML element, …) accessible with an R and shiny syntax. Hence it helps the non-js programmers to perform some easy actions in Shiny.
  • It makes it easier to use and to call your custom js function in Shiny. You can now easily pass parameters to your js function and call them in a more R-friendly way.

So whether you intend to add more interactivity or to include js code in your application, this package is a must!

Version: 0.9.1(2017-06-29) on CRAN
License: GNU Affero General Public License v3.0 for open-source use

d3R by timelyportfolio

d3R is not really focused on Shiny but on making the use of d3.js easier in R:

  • Loading D3.js with a single function to avoid checking the latest D3.js version
  • Several helper functions to convert usual R data types to data types that can be used in d3.js (such as nested list or graphs).

d3R removes the painful data transformation part and simplifies the integration of custom d3.js viz’ in R.

Version: 0.9.1(2017-06-29) on CRAN
License: BSD-3
Package components’ License: BSD License (d3.js)

Improving your development pipeline

shinyTest by Rstudio

One of the painful parts of Shiny development is testing of your app.You have to do it manually …hence, the testing is inconsistent and you may forget some cases … and it’s boring and it requires a lot of times.
Shinytest intends to automate applications testing, you need to create your different test once. Each time you want to test the app, shinyTest will run the test and compare the inputs and outputs with the original test. You don’t need to run manual test anymore!

Version: 1.1.0 (2017-06-23) on Github
License: MIT

shinyLoadTest by Rstudio

shinyLoadTest is an extension of shinyTest which will help you to ensure that your applications are scalable. The packages create concurrent sessions which will perform a predefined set of actions to test the ability of your application to sustain the load.

Version: 0.1.0 (2017-06-23) on Github
License: GPL-3

That’s it, our little tour of Shiny packages is done. If you know other packages and wish to share them, please comment, I’d be glad to add them to the post.

You can follow the blog on TwitterFacebook  and subscribe to the newsletter:



Please enter your comment!
Please enter your name here