
vercel-react-best-practices
โ 8by vercel ยท part of vercel-labs/cursor-plugin
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.
This is the playbook your agent receives when the skill activates โ you don't need to read it to use the skill, but it's here to audit before installing.
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.
Loading the Full Guide
The complete rules document with all code examples is maintained at:
https://raw.githubusercontent.com/vercel-labs/agent-skills/main/skills/react-best-practices/AGENTS.mdWhen 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:
https://raw.githubusercontent.com/vercel-labs/agent-skills/main/skills/react-best-practices/rules/{rule-name}.mdWhen to Apply
Reference these guidelines when:
- Writing new React components or Next.js pages
- Implementing data fetching (client or server-side)
- Reviewing code for performance issues
- Refactoring existing React/Next.js code
- Optimizing bundle size or load times
Rule Categories by Priority
| 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- |
Quick Reference
1. Eliminating Waterfalls (CRITICAL)
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 content
2. Bundle Size Optimization (CRITICAL)
bundle-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 speed
3. Server-Side Performance (HIGH)
server-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 operations
4. Client-Side Data Fetching (MEDIUM-HIGH)
client-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 data
5. Re-render Optimization (MEDIUM)
rerender-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 values
6. Rendering Performance (MEDIUM)
rendering-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 state
7. JavaScript Performance (LOW-MEDIUM)
js-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 immutability
8. Advanced Patterns (LOW)
advanced-event-handler-refsโ Store event handlers in refsadvanced-init-onceโ Initialize app once per app loadadvanced-use-latestโ useLatest for stable callback refs
Source
Maintained by Vercel Engineering at github.com/vercel-labs/agent-skills.
npx skills add vercel-labs/cursor-plugin --skill "vercel-react-best-practices" --full-depthRun this in your project โ your agent picks the skill up automatically.
How to Use
When a user asks about React/Next.js performance, or when writing/reviewing React code:
- Identify the relevant category from the priority table above
- Fetch the specific rule from GitHub for detailed guidance:
https://raw.githubusercontent.com/vercel-labs/agent-skills/main/skills/react-best-practices/rules/{rule-name}.md - Or fetch the full guide for comprehensive review:
https://raw.githubusercontent.com/vercel-labs/agent-skills/main/skills/react-best-practices/AGENTS.md - Apply the rule's correct pattern, explaining why it matters
Each rule file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
- Additional context and references
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.