Shiny is a framework for building interactive web applications using R code, eliminating the need for HTML, CSS, or JavaScript. At its core, it provides a reactive programming model that automatically tracks data dependencies and re-executes only the parts of an application that depend on changed inputs. The framework handles server-side UI rendering and maintains persistent WebSocket connections between the browser and server for real-time updates without page reloads.
The framework distinguishes itself through deep integration with the R ecosystem, including the ability to embed interactive components directly within R Markdown documents for dynamic reporting. It wraps JavaScript visualization libraries as reusable HTML widgets that integrate with the reactive data flow, and supports promise-based asynchronous execution for running long operations in background processes without blocking the main application. Applications can be structured as self-contained modules with their own UI and server logic, or wrapped as parameterizable functions for reuse.
Shiny provides a comprehensive set of pre-built UI components including input controls like sliders, text fields, selectors, and action buttons, along with output rendering for tables, plots, images, and formatted text. The framework supports Bootstrap theming for consistent styling, responsive layouts that adapt to different screen sizes, and dynamic UI elements that change in response to user actions. It includes capabilities for database connectivity, file uploads and downloads, state persistence across sessions, and interactive plots that respond to clicks, brushes, and hover events.
The framework offers multiple deployment options including managed cloud platforms, self-hosted servers, and static HTML export using WebAssembly. It includes tooling for automated UI testing, performance profiling, load testing, and debugging of reactive logic.