npx skills add ...
npx skills add vercel-labs/cursor-plugin --skill vercel-react-best-practices
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
npx skills add vercel-labs/cursor-plugin --skill vercel-react-best-practices
Comprehensive performance optimization guide for React and Next.js applications, maintained by Vercel Engineering. Contains 57 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation.
The complete rules document with all code examples is maintained at:
When you need detailed rule guidance, fetch the full document from the URL above using your web fetch tool. The document is ~80KB and contains all 57 rules with incorrect/correct code examples.
For individual rules, fetch:
Reference these guidelines when:
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Eliminating Waterfalls | CRITICAL | async- |
| 2 | Bundle Size Optimization | CRITICAL | bundle- |
| 3 | Server-Side Performance | HIGH | server- |
| 4 | Client-Side Data Fetching | MEDIUM-HIGH | client- |
| 5 | Re-render Optimization | MEDIUM | rerender- |
| 6 | Rendering Performance | MEDIUM | rendering- |
| 7 | JavaScript Performance | LOW-MEDIUM | js- |
| 8 | Advanced Patterns | LOW | advanced- |
async-defer-await — Move await into branches where actually usedasync-parallel — Use Promise.all() for independent operationsasync-dependencies — Use better-all for partial dependenciesasync-api-routes — Start promises early, await late in API routesasync-suspense-boundaries — Use Suspense to stream contentbundle-barrel-imports — Import directly, avoid barrel filesbundle-dynamic-imports — Use next/dynamic for heavy componentsbundle-defer-third-party — Load analytics/logging after hydrationbundle-conditional — Load modules only when feature is activatedbundle-preload — Preload on hover/focus for perceived speedserver-auth-actions — Authenticate server actions like API routesserver-cache-react — Use React.cache() for per-request deduplicationserver-cache-lru — Use LRU cache for cross-request cachingserver-dedup-props — Avoid duplicate serialization in RSC propsserver-serialization — Minimize data passed to client componentsserver-parallel-fetching — Restructure components to parallelize fetchesserver-after-nonblocking — Use after() for non-blocking operationsclient-swr-dedup — Use SWR for automatic request deduplicationclient-event-listeners — Deduplicate global event listenersclient-passive-event-listeners — Use passive listeners for scrollclient-localstorage-schema — Version and minimize localStorage datarerender-defer-reads — Don't subscribe to state only used in callbacksrerender-memo — Extract expensive work into memoized componentsrerender-memo-with-default-value — Hoist default non-primitive propsrerender-dependencies — Use primitive dependencies in effectsrerender-derived-state — Subscribe to derived booleans, not raw valuesrerender-derived-state-no-effect — Derive state during render, not effectsrerender-functional-setstate — Use functional setState for stable callbacksrerender-lazy-state-init — Pass function to useState for expensive valuesrerender-simple-expression-in-memo — Avoid memo for simple primitivesrerender-move-effect-to-event — Put interaction logic in event handlersrerender-transitions — Use startTransition for non-urgent updatesrerender-use-ref-transient-values — Use refs for transient frequent valuesrendering-animate-svg-wrapper — Animate div wrapper, not SVG elementrendering-content-visibility — Use content-visibility for long listsrendering-hoist-jsx — Extract static JSX outside componentsrendering-svg-precision — Reduce SVG coordinate precisionrendering-hydration-no-flicker — Use inline script for client-only datarendering-hydration-suppress-warning — Suppress expected mismatchesrendering-activity — Use Activity component for show/hiderendering-conditional-render — Use ternary, not && for conditionalsrendering-usetransition-loading — Prefer useTransition for loading statejs-batch-dom-css — Group CSS changes via classes or cssTextjs-index-maps — Build Map for repeated lookupsjs-cache-property-access — Cache object properties in loopsjs-cache-function-results — Cache function results in module-level Mapjs-cache-storage — Cache localStorage/sessionStorage readsjs-combine-iterations — Combine multiple filter/map into one loopjs-length-check-first — Check array length before expensive comparisonjs-early-exit — Return early from functionsjs-hoist-regexp — Hoist RegExp creation outside loopsjs-min-max-loop — Use loop for min/max instead of sortjs-set-map-lookups — Use Set/Map for O(1) lookupsjs-tosorted-immutable — Use toSorted() for immutabilityadvanced-event-handler-refs — Store event handlers in refsadvanced-init-once — Initialize app once per app loadadvanced-use-latest — useLatest for stable callback refsWhen a user asks about React/Next.js performance, or when writing/reviewing React code:
Each rule file contains:
Maintained by Vercel Engineering at github.com/vercel-labs/agent-skills.