# Shiny R Optimize

Diagnose and fix performance problems in Shiny for R apps, slow startup, sluggish...

- Repository: https://github.com/posit-dev/skills (551 stars)
- Category: Business
- License: MIT
- Last updated: 2026-10-28
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add posit-dev/skills --skill shiny-r-optimize -g -a claude-code -y`
Codex: `npx skills add posit-dev/skills --skill shiny-r-optimize -g -a codex -y`
Cursor: `npx skills add posit-dev/skills --skill shiny-r-optimize -g -a cursor -y`
Gemini CLI: `npx skills add posit-dev/skills --skill shiny-r-optimize -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add posit-dev/skills`

## Description

Diagnose and fix performance problems in Shiny for R apps, slow startup, sluggish interactions, long-running blocking operations, and apps that struggle beyond a handful of concurrent users. Use when a Shiny app is slow, hangs, recomputes too much, times out, or needs to support more users; when the user asks to "speed up", "optimize", or "make faster" an existing Shiny app; or when preparing a prototyped app for real-world traffic.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Optimizing Shiny App Performance

Make an existing Shiny for R app faster without changing what it does. The
typical user has an app that worked fine for one or two developers and is now
too slow or must support more users. Keep all app logic intact; prefer code
changes over deployment tuning; resist rewrites.

Order of preference for every fix:

1. **Eliminate** work that isn't needed (don't compute outputs nobody is
   looking at; don't compute with inputs that aren't ready).
2. **Reuse** work that repeats (shared reactives, caching).
3. **Accelerate** unavoidable work (faster data formats, vectorized code).
4. **Relocate** work that blocks (async / background tasks), last resort; it
   buys concurrency, not raw speed.

## Workflow

### 1. Understand the complaint

Pin down what "slow" means and write it as a benchmark to beat:

- **What feels slow?** First page load? Every interaction? One specific
  action? Only when several people use it at once?
- **How many concurrent users** must it support? (1, 5, ~20, hundreds?)
- **Where does it run?** Locally, Posit Connect, Posit Connect Cloud, Shiny
  Server?
- **How big is the data**, where does it live, and how often does it change?

### 2. Scan the source for smells, and fix them now

Read the app code (`app.R` / `server.R` / `ui.R` / modules) and look for the
classic smells. Every smell in this table has a **safe, behavior-preserving
fix**: apply each fix you find *immediately*, before measuring. These ten
changes fix the large majority of slow Shiny apps.

The rest: https://github.com/posit-dev/skills/blob/HEAD/shiny/shiny-r-optimize/SKILL.md
