The {tidymodules} R package is built on top of shiny module using {R6} to provide a new object-oriented programming (OOP) approach for module development, new module interface using input/output ports and a set of tidy operators for handling cross-module communication.

The main features of tidymodules and its comparison with conventional Shiny modules are presented in the table below.

Features tidymodules Conventional modules
Programming style - {R6} OOP *
- Semantic reference
Namespace management - automatic/generated
- ID based lookup
- Grouping
- manual management
- must match between ui and server
Module communication - new module input/output port structure
- module ports linked via tidy operators
- automatic network diagram
- parameter passing via module server()
- challenging to manage for complex app
Inheritance - class inheritance
- port inheritance for nested modules
Session management - flexible user session management
- Caching of modules coming soon

* OOP = Object Oriented Programming


You can install the most recent version of {tidymodules} from GitHub with:



You can quickly launch an example after installing the R package by running the following.

Some examples have been deployed on, such as:

Learning More

Please review the Get Started page for a high level introduction to {tidymodules} and its usage in developing Shiny apps.

If you are interested to develop modules using {tidymodules}, we recommend reading the vignettes under “Articles”.

Code of Conduct

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


  • The SCC team members @ NVS for their valuable feedbacks
  • 2019 Summer interns (Marzi, Stephen and Renan) for contributing to testing the framework and implementing the demo example 4 listed above.
  • Eric Nantz for accepting to introduce tidymodules in his e-poster @ rstudio::conf 2020