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
  • 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