Design, Development, Reactivity, and Scale
2026-07-30
Core References
Several packages and applications illustrate an evolving design pattern aimed at improving usability, performance, and debuggability:
Uses the standard Old Faithful geyser app to illustrate module composition, multi-language support, and WebAssembly deployment:
shiny.express & shiny.ui).Tip
See the R Shiny Modules Slide Deck and Python Shiny Modules Slide Deck for detailed walkthroughs.
Powers active research portals for the Attie Lab founder mouse studies:
*Input, *UI, *Output, *Server, *App).To prevent code duplication, inputs are scoped at three distinct levels: 1. mainPar: Shared parameters (e.g. dataset choice, height) globally available. 2. panelPar: Localized settings for a specific dashboard panel (e.g. strains, sex, facet overlays). 3. plotPar: Specific options limited to visualization plots.
Reactive Data Flow
Inputs are passed directly into the foundr module. The application avoids global variables; instead, static inputs are filtered into small reactive subsets based on user panels.
A key architectural shift was completely separating data analysis from the reactive Shiny interface.
Designed for local QTL investigations within a 1-4Mb peak region, including LOD scans, SNP association, and mediation:
Organized across 6 dedicated analysis panels: - hotspotApp: Genome-wide hotspot count scans. - scanApp: LOD scans & founder allele effects. - patternApp: Strain distribution pattern grouping. - genoApp: Genotype probabilities & gene region tracks. - scatterApp: Bivariate mediator scatter plots. - mediateApp: Candidate gene mediation scans.
bslib Dashboards: Transition older screens from shinydashboard to modern, responsive bslib tabs.downr export widgets across panels.shiny_module package:
Developer Guide Reference
Explore the full architecture and module calling trees in the published qtl2shiny Module Architecture Article.
Modular Shiny Applications