
R Shiny course
Master R Shiny from the ground up and build interactive, data-driven web applications entirely in R. This course takes you from your first app to production-grade deployments with authentication, CI/CD pipelines, and scalable architecture. Whether you're an analyst, data scientist, or R developer, you'll gain the skills to turn raw data into polished, shareable tools.
What you will learn:
You will learn how to design and build full-featured Shiny applications, starting with core R syntax and the Shiny framework and advancing to modular app architecture and enterprise deployment. You will master Shiny's reactive programming model, create rich user interfaces with dynamic inputs and outputs, and integrate tidyverse data wrangling directly into reactive workflows. The course covers interactive visualisations using plotly and leaflet, structured logging, and automated testing with shinytest2. You will also explore performance tuning techniques including caching, asynchronous programming, and load testing to keep your apps fast under real user traffic.
How you study in practice R Shiny course
How you practise R Shiny course
For businesses looking to train their team
With Dedika for businesses, the course includes exercises and examples tailored to your own business and the way your company needs.
Course content
8 Chapters • 39 LessonsDuration between 4 and 360 hours (you decide)
Chapter 1HideHide detailsSee detailsIntroduction to R and Shiny
Introduction to R and Shiny
Lesson 1 • Setting Up the R Environment
Install R, RStudio, and essential packages needed for Shiny development. Establishes the baseline toolchain for all subsequent chapters.
Lesson 2 • Anatomy of a Shiny App
Examine the ui, server, and shinyApp components that form every Shiny application. Connects R fundamentals to the Shiny execution model.
Lesson 3 • Core R Syntax for Shiny
Review vectors, data frames, functions, and control flow as used inside Shiny apps. Provides the R fluency required before writing reactive code.
Lesson 4 • Running Your First Shiny App
Create and launch a minimal app that displays static text and a plot. Confirms the environment is correctly configured and demystifies the run cycle.
Chapter 2HideHide detailsSee detailsBuilding User Interfaces
Building User Interfaces
Lesson 1 • Layout Functions and Page Types
Explore fluidPage, navbarPage, and fillPage to control overall app structure. Choosing the right page type determines how content scales across screen sizes.
Lesson 2 • Input Widgets Catalog
Implement text, numeric, date, select, checkbox, radio, and slider inputs. Each widget maps to a named input value consumed by the server function.
Lesson 3 • Styling the UI with HTML and CSS
Apply inline styles, custom CSS files, and Shiny's HTML helper functions to refine visual appearance. Prepares students for theming with bslib in later chapters.
Lesson 4 • Sidebar and Panel Layouts
Use sidebarLayout, sidebarPanel, and mainPanel to separate controls from output. This pattern is the most common Shiny UI convention and underpins later dashboard work.
Lesson 5 • Dynamic UI Elements
Generate UI components conditionally using uiOutput and renderUI. Enables interfaces that adapt to user state without full page reloads.
Chapter 3HideHide detailsSee detailsReactivity Fundamentals
Reactivity Fundamentals
Lesson 1 • Reactive Expressions
Create reactive() expressions to cache intermediate computations shared across multiple outputs. Reduces duplicated code and improves app performance.
Lesson 2 • Reactive Values and State
Store mutable application state using reactiveValues() and reactiveVal(). Enables features like undo history, counters, and session-level data accumulation.
Lesson 3 • Observers and Side Effects
Use observe() and observeEvent() to trigger side effects such as writing files or updating inputs. Distinguishes reactive producers from reactive consumers.
Lesson 4 • Isolating and Controlling Reactivity
Apply isolate(), req(), and validate() to control when and how reactive code executes. Prevents premature execution and provides user-friendly error messages.
Lesson 5 • The Reactive Execution Model
Trace how Shiny tracks dependencies and schedules re-execution when inputs change. Understanding this model prevents redundant computation and silent bugs.
Chapter 4HideHide detailsSee detailsOutputs and Rendering Functions
Outputs and Rendering Functions
Lesson 1 • Rendering Static and Interactive Plots
Produce base R, ggplot2, and plotly visualizations inside Shiny output slots. Interactive plots enable click and hover events used in later chapters.
Lesson 2 • Notifications and Progress Indicators
Provide user feedback during long operations using showNotification() and withProgress(). Improves perceived performance and communicates app state clearly.
Lesson 3 • File Downloads and Uploads
Implement downloadHandler() for CSV and PDF exports and fileInput() for user-supplied data. Closes the data ingestion and export loop in a complete app.
Lesson 4 • Text and Verbatim Output
Display dynamic strings and raw R output using renderText() and renderPrint(). Forms the simplest output type and validates that reactivity is wired correctly.
Lesson 5 • Tables with DT and gt
Render interactive data tables using the DT package and formatted static tables with gt. Tables are the most common data output in business Shiny apps.
Chapter 5HideHide detailsSee detailsData Wrangling Inside Shiny
Data Wrangling Inside Shiny
Lesson 1 • Filtering Data Reactively
Apply dplyr filter() inside reactive expressions driven by widget inputs. Reactive filtering is the core pattern for exploratory data apps.
Lesson 2 • Handling Missing and Dirty Data
Detect and handle NA values, type mismatches, and malformed inputs before rendering. Prevents cryptic errors and ensures outputs remain meaningful.
Lesson 3 • Connecting Data Sources to Apps
Load CSV, Excel, and RDS files at startup or reactively based on user input. Proper data loading strategy determines app startup time and memory use.
Lesson 4 • Transforming and Summarising Data
Use mutate(), group_by(), and summarize() inside reactive pipelines to derive new metrics. Transformed data feeds both plot and table outputs simultaneously.
Lesson 5 • Working with Databases via DBI
Connect to SQL databases using DBI and execute parameterised queries from reactive inputs. Enables apps to query large datasets without loading them into memory.
Chapter 6HideHide detailsSee detailsApp Organisation and Modules
App Organisation and Modules
Lesson 1 • Structuring Large Shiny Projects
Organise code across R/, www/, and data/ directories following the golem and standard conventions. Good structure reduces onboarding time and merge conflicts.
Lesson 2 • Building Apps as R Packages
Wrap a Shiny app inside an R package using golem to gain documentation, testing, and dependency management. Package structure is the industry standard for production apps.
Lesson 3 • Passing Data Between Modules
Return reactive values from modules and pass them as arguments to sibling modules. Enables complex multi-module data flows without global state.
Lesson 4 • Introduction to Shiny Modules
Encapsulate UI and server logic into namespaced module functions using moduleServer(). Modules prevent ID collisions and enable component reuse across apps.
Lesson 5 • Testing Shiny Apps with shinytest2
Write snapshot and interaction tests using the shinytest2 package to catch regressions. Automated tests are essential before deploying updated apps to production.
Chapter 7HideHide detailsSee detailsPerformance and Scalability
Performance and Scalability
Lesson 1 • Optimising Data and Rendering
Reduce data transferred to the browser by pre-aggregating server-side and using efficient output formats. Smaller payloads directly improve time-to-interactive for end users.
Lesson 2 • Asynchronous Programming with Promises
Offload slow operations to background processes using the promises and future packages. Async execution prevents one user's slow query from blocking all other sessions.
Lesson 3 • Profiling App Performance
Use profvis and reactlog to identify slow reactive chains and rendering bottlenecks. Profiling before optimising prevents wasted effort on non-critical code paths.
Lesson 4 • Scaling with Shiny Server and Load Testing
Configure worker processes and conduct load tests using shinyloadtest to find capacity limits. Load testing before launch prevents outages under real user traffic.
Lesson 5 • Caching with bindCache and memoise
Apply bindCache() to render functions and memoise() to pure R functions to avoid redundant computation. Caching is the highest-leverage optimisation for data-heavy apps.
Chapter 8HideHide detailsSee detailsDeployment and Production Readiness
Deployment and Production Readiness
Lesson 1 • Authentication and Access Control
Restrict app access using Posit Connect permissions, shinymanager, or OAuth integrations. Protects sensitive data and satisfies organisational security requirements.
Lesson 2 • Deploying to shinyapps.io
Publish apps to the managed shinyapps.io platform using rsconnect and configure instance settings. The fastest path from local app to a publicly accessible URL.
Lesson 3 • Logging and Error Monitoring
Implement structured logging with the logger package and capture runtime errors for alerting. Observability is essential for diagnosing issues in production without user reports.
Lesson 4 • Continuous Deployment Pipelines
Automate testing and deployment using GitHub Actions and rsconnect CLI on every code push. CI/CD eliminates manual deployment steps and enforces quality gates.
Lesson 5 • Self-Hosted Deployment Options
Deploy apps on Posit Connect or open-source Shiny Server on Linux virtual machines. Self-hosting provides data residency control required by many organisations.
Your valid completion certificate
This course is for you:
Data analysts: ready to replace static exports with interactive, shareable tools.
Academic researchers: wanting to share findings through explorable, browser-based interfaces.
Business intelligence developers: looking to add R-native app delivery to their skill set.
R programmers: eager to move beyond scripts into structured, deployable application code.
Statisticians: needing a practical way to let clients explore models without writing code.
Career changers: entering data roles and wanting a concrete, demonstrable full-stack project.
What our students say
Your lessons are perfect. I purchased the one-year package and finally have the opportunity to follow various topics of interest without needing to change platforms... I'm grateful for everything you do, I've already recommended you to other people...

I like how the lessons are straight to the point and how I can change chapters and skip content I don't need.

I like the content and the way videos are presented and transcribed, which speeds up the process!

The platform is fast and simple to use. The diversity of content and complementary videos really help with learning.

Top qualifications
FAQ
Who is Dedika?
Is the certificate valid in the United Kingdom?
Are the courses free?
What is the course workload?
What are the courses like?
How do the courses work?
What is the duration of the courses?
What is the cost or price of the courses?
What is an EAD or online course and how does it work?
PDF Course




















