react
Skill4 starsChanged 3 months agoMITView on GitHub
React and Next.js performance best-practices reference — 57 rules across 8 categories, prioritized by impact.
48 other projects use a version of this.
Adopted by
Most recently taken up by
- atinder-harika/reel-reactortheir own version, first seen Nov 8, 2026
- LuisSambrano/antigravity-configtheir own version, first seen Nov 8, 2026
- compozy/compozytheir own version, first seen Nov 7, 2026
- lobehub/lobehubtheir own version, first seen Nov 5, 2026
- hmj1026/dhpktheir own version, first seen Nov 1, 2026
- gingerminds/claude-skillstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use app-renderer-systems, refactoring-analysis and 9 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
pedronauckSkillapp-renderer-systems
Create, extend, or debug frontend domain modules organized under systems/. Covers adapters, Query hooks, local state, and public exports; excludes generic components and backend implementation.
Also in 3 projects that use this
pedronauckSkillrefactoring-analysis
Audit code quality and architectural health or plan refactoring using Fowler code smells and techniques; write prioritized findings to docs/_refacs/. Excludes formatting, performance, and security audits.
Also in 3 projects that use this
andyridsSkillexpress
Run the ICM express-change pipeline - a small change no spec has to move for, with the plan record left intact
Also in 4 projects that use this
tondevrelSkillpytorch
Leading deep learning framework. Provides Tensors and Dynamic Computational Graphs with strong GPU acceleration. Widely used for research, neural networks, and differentiable programming.
Also in 3 projects that use this
azlekovSkilltailwindcss
This skill should be used when the user asks to "style with Tailwind", "add CSS", "configure theme", "use @theme", "add custom colors", "implement dark mode", "use container queries", "add responsive design", "use OKLCH colors", or discusses styling, theming, or visual design. Always use the latest Tailwind CSS version and modern patterns.
Also in 5 projects that use this
jander99Skilltypescript-advanced
Design, implement, refactor, and debug advanced TypeScript patterns including generics, utility types, mapped types, conditional types, type guards, discriminated unions, and strict mode configuration. Use when writing type-safe code, fixing type errors, or improving type inference.
Also in 3 projects that use this
Other versions48 projects use a version of this.
Word for word · 1
- theyoungastronauts/waypoint-md★ 0100% same
Edited · 0
None found.
Wrote their own version · 47
- lobehub/lobe-chat★ 84ksame name
- lobehub/lobehub★ 84ksame name
- vercel-labs/json-render★ 19ksame name
- compozy/compozy★ 2.9ksame name
- BetterTyped/react-zoom-pan-pinch★ 1.9ksame name
- openops-cloud/openops★ 1.1ksame name
- pedronauck/skills★ 649same name
- Mindrally/skills★ 275same name
- kid-sid/claude-spellbook★ 190same name
- magnus919/agent-skills★ 172same name
37 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository53 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- llms.txtllms.txt
- actionableSkill
- astro-bootstrapSkill
- astro-patternsSkill
- autopilotSkill
- axon-code-intelSkill
- brainstormingSkill
- commit-conventionsSkill
- cross-repo-contextSkill
- django-bootstrapSkill
- django-patternsSkill
- executeSkill
- find-sessionSkill
- flutter-bootstrapSkill
- flutter-patternsSkill
- full-featureSkill
- intelSkill
- nextjs-bootstrapSkill
- nextjs-fullstack-bootstrapSkill
- nextjs-fullstack-patternsSkill
- nextjs-mui-bootstrapSkill
- nextjs-patternsSkill
- nextjs-shadcn-bootstrapSkill
- orchestratorSkill
- phase-breakdownSkill
- plan-and-scopeSkill
- prdSkill
- recallSkill
- reflectSkill
- relaySkill
- rememberSkill
- scaffoldSkill
- scratchSkill
- tailwindSkill
- ux-specSkill
- ux-to-promptsSkill
- verify-astroSkill
- verify-djangoSkill
- verify-flutterSkill
- verify-nextjs-fullstackSkill
- verify-nextjs-muiSkill
- verify-nextjs-shadcnSkill
- verify-nextjsSkill
- verifySkill
- visual-feedbackSkill
- work-disciplineSkill
- worktreesSkill
- wrapSkill
- write-as-friendSkill
- write-as-humanSkill
- writing-clearlySkill
- writing-skillsSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
28 rules. 0 are common, 15 are distinctive, and 13 are very specific to this project.
0
Common
Most of the 37 edited versions we read keep these.
15
Distinctive
This author's own choices. Worth a look.
13
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 37
async-parallel: Use Promise.all() for independent operations
- Very specific: line 38
async-dependencies: Use better-all for partial dependencies
- Distinctive: line 39
async-api-routes: Start promises early, await late in API routes
- Distinctive: line 40
async-suspense-boundaries: Use Suspense to stream content
- Distinctive: line 42
Key pattern: If two fetches don't depend on each other, run them in parallel:
- Very specific: line 54
bundle-barrel-imports: Import directly, avoid barrel files (import { X } from './X' not from './index')
- Very specific: line 55
bundle-dynamic-imports: Use next/dynamic for heavy components
- Very specific: line 63
server-cache-react: Use React.cache() for per-request deduplication
- Distinctive: line 64
server-cache-lru: Use LRU cache for cross-request caching
- Distinctive: line 65
server-dedup-props: Avoid duplicate serialization in RSC props
- Very specific: line 68
server-after-nonblocking: Use after() for non-blocking operations
- Distinctive: line 70
Key pattern: Only send what the client needs:
- Distinctive: line 81
client-swr-dedup: Use SWR for automatic request deduplication
- Distinctive: line 83
client-passive-event-listeners: Use passive listeners for scroll
- Distinctive: line 88
rerender-defer-reads: Don't subscribe to state only used in callbacks
- Distinctive: line 91
rerender-dependencies: Use primitive dependencies in effects
- Very specific: line 94
rerender-functional-setstate: Use functional setState for stable callbacks
- Distinctive: line 96
rerender-simple-expression-in-memo: Avoid memo for simple primitives
- Distinctive: line 97
rerender-move-effect-to-event: Put interaction logic in event handlers
- Very specific: line 98
rerender-transitions: Use startTransition for non-urgent updates
- Distinctive: line 99
rerender-use-ref-transient-values: Use refs for transient frequent values
- Very specific: line 115
rendering-content-visibility: Use content-visibility for long lists
- Distinctive: line 117
rendering-hydration-no-flicker: Use inline script for client-only data
- Distinctive: line 118
rendering-activity: Use Activity component for show/hide
- Very specific: line 119
rendering-conditional-render: Use ternary, not && for conditionals
- Very specific: line 120
rendering-usetransition-loading: Prefer useTransition for loading state
- Very specific: line 127
js-set-map-lookups: Use Set/Map for O(1) lookups
- Very specific: line 129
js-tosorted-immutable: Use toSorted() for immutability
“Common” is measured: kept by at least 6 in 10 of the 37 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Vercel React Best Practices
Adapted from vercel-labs/agent-skills
Comprehensive performance optimization guide for React and Next.js applications, maintained by Vercel. 57 rules across 8 categories, prioritized by impact.
When to Apply
- 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- |
1. Eliminating Waterfalls (CRITICAL)
- async-defer-await: Move
awaitinto branches where actually used - async-parallel: Use
Promise.all()for independent operations - async-dependencies: Use
better-allfor partial dependencies - async-api-routes: Start promises early, await late in API routes
- async-suspense-boundaries: Use Suspense to stream content
Key pattern: If two fetches don't depend on each other, run them in parallel:
// BAD: Sequential
const user = await getUser(id)
const posts = await getPosts(id)
// GOOD: Parallel
const [user, posts] = await Promise.all([getUser(id), getPosts(id)])2. Bundle Size Optimization (CRITICAL)
- bundle-barrel-imports: Import directly, avoid barrel files (
import { X } from './X'notfrom './index') - bundle-dynamic-imports: Use
next/dynamicfor heavy components - bundle-defer-third-party: Load analytics/logging after hydration
- bundle-conditional: Load modules only when feature is activated
- bundle-preload: Preload on hover/focus for perceived speed
3. Server-Side Performance (HIGH)
- server-auth-actions: Authenticate server actions like API routes
- server-cache-react: Use
React.cache()for per-request deduplication - server-cache-lru: Use LRU cache for cross-request caching
- server-dedup-props: Avoid duplicate serialization in RSC props
- server-serialization: Minimize data passed to client components
- server-parallel-fetching: Restructure components to parallelize fetches
- server-after-nonblocking: Use
after()for non-blocking operations
Key pattern: Only send what the client needs:
// BAD: Passing entire object
<ClientComponent data={fullUserObject} />
// GOOD: Pick only needed fields
<ClientComponent name={user.name} avatar={user.avatar} />4. Client-Side Data Fetching (MEDIUM-HIGH)
- client-swr-dedup: Use SWR for automatic request deduplication
- client-event-listeners: Deduplicate global event listeners
- client-passive-event-listeners: Use passive listeners for scroll
- client-localstorage-schema: Version and minimize localStorage data
5. Re-render Optimization (MEDIUM)
- rerender-defer-reads: Don't subscribe to state only used in callbacks
- rerender-memo: Extract expensive work into memoized components
- rerender-memo-with-default-value: Hoist default non-primitive props
- rerender-dependencies: Use primitive dependencies in effects
- rerender-derived-state: Subscribe to derived booleans, not raw values
- rerender-derived-state-no-effect: Derive state during render, not effects
- rerender-functional-setstate: Use functional
setStatefor stable callbacks - rerender-lazy-state-init: Pass function to
useStatefor expensive values - rerender-simple-expression-in-memo: Avoid memo for simple primitives
- rerender-move-effect-to-event: Put interaction logic in event handlers
- rerender-transitions: Use
startTransitionfor non-urgent updates - rerender-use-ref-transient-values: Use refs for transient frequent values
Key pattern: Derive state during render, not in effects:
// BAD: Effect to derive state
const [items, setItems] = useState([])
const [filteredItems, setFilteredItems] = useState([])
useEffect(() => { setFilteredItems(items.filter(i => i.active)) }, [items])
// GOOD: Derive during render
const [items, setItems] = useState([])
const filteredItems = items.filter(i => i.active)6. Rendering Performance (MEDIUM)
- rendering-content-visibility: Use
content-visibilityfor long lists - rendering-hoist-jsx: Extract static JSX outside components
- rendering-hydration-no-flicker: Use inline script for client-only data
- rendering-activity: Use Activity component for show/hide
- rendering-conditional-render: Use ternary, not
&&for conditionals - rendering-usetransition-loading: Prefer
useTransitionfor loading state
7. JavaScript Performance (LOW-MEDIUM)
- js-batch-dom-css: Group CSS changes via classes or
cssText - js-index-maps: Build
Mapfor repeated lookups - js-combine-iterations: Combine multiple
filter/mapinto one loop - js-set-map-lookups: Use
Set/Mapfor O(1) lookups - js-early-exit: Return early from functions
- js-tosorted-immutable: Use
toSorted()for immutability
8. Advanced Patterns (LOW)
- advanced-event-handler-refs: Store event handlers in refs
- advanced-init-once: Initialize app once per app load
- advanced-use-latest:
useLatestfor stable callback refs
Reference
For full rule explanations with detailed code examples, install the original skill:
npx skills add https://github.com/vercel-labs/agent-skills --skill vercel-react-best-practicesIndividual rule files are available at rules/<rule-name>.md in the original repo.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

