Skip to content
Agentmart
Submit a tool

trove-react-best-practices

React and Next.js performance optimization guidelines (Vercel Engineering, 70 rules across 8 categories).

Skill by bravew

IndexedMIT★ 10
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/bravew-trove-react-best-practices

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

React and Next.js performance optimization guidelines (Vercel Engineering, 70 rules across 8 categories). Use when writing, reviewing, or refactoring React code specifically for performance: eliminating waterfalls, bundle size, re-render optimization, or server/client data fetching. Complements trove-react, which carries project-specific conventions.

Use cases: frontend, backend, cloud, data

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/trove-react-best-practices

What's inside

Skill name
trove-react-best-practices
Description
React and Next.js performance optimization guidelines (Vercel Engineering, 70 rules across 8 categories). Use when writing, reviewing, or refactoring React code specifically for performance: eliminating waterfalls, bundle size, re-render optimization, or server/client data fetching. Complements trove-react, which carries project-specific conventions.
License
MIT
Metadata
source: vercel-labs/agent-skills · upstream-version: 1.0.0
Instructions
128 lines in SKILL.md · view on GitHub

Files (73)

  • SKILL.md
  • _sections.md · references/
  • _template.md · references/
  • advanced-effect-event-deps.md · references/
  • advanced-event-handler-refs.md · references/
  • advanced-init-once.md · references/
  • advanced-use-latest.md · references/
  • async-api-routes.md · references/
  • async-cheap-condition-before-await.md · references/
  • async-defer-await.md · references/
  • async-dependencies.md · references/
  • async-parallel.md · references/
  • async-suspense-boundaries.md · references/
  • bundle-analyzable-paths.md · references/
  • bundle-barrel-imports.md · references/
  • bundle-conditional.md · references/
  • bundle-defer-third-party.md · references/
  • bundle-dynamic-imports.md · references/
  • bundle-preload.md · references/
  • client-event-listeners.md · references/
  • client-localstorage-schema.md · references/
  • client-passive-event-listeners.md · references/
  • client-swr-dedup.md · references/
  • js-batch-dom-css.md · references/
  • js-cache-function-results.md · references/
  • js-cache-property-access.md · references/
  • js-cache-storage.md · references/
  • js-combine-iterations.md · references/
  • js-early-exit.md · references/
  • js-flatmap-filter.md · references/
  • js-hoist-regexp.md · references/
  • js-index-maps.md · references/
  • js-length-check-first.md · references/
  • js-min-max-loop.md · references/
  • js-request-idle-callback.md · references/
  • js-set-map-lookups.md · references/
  • js-tosorted-immutable.md · references/
  • rendering-activity.md · references/
  • rendering-animate-svg-wrapper.md · references/
  • rendering-conditional-render.md · references/
  • rendering-content-visibility.md · references/
  • rendering-hoist-jsx.md · references/
  • rendering-hydration-no-flicker.md · references/
  • rendering-hydration-suppress-warning.md · references/
  • rendering-resource-hints.md · references/
  • rendering-script-defer-async.md · references/
  • rendering-svg-precision.md · references/
  • rendering-usetransition-loading.md · references/
  • rerender-defer-reads.md · references/
  • rerender-dependencies.md · references/
  • rerender-derived-state-no-effect.md · references/
  • rerender-derived-state.md · references/
  • rerender-functional-setstate.md · references/
  • rerender-lazy-state-init.md · references/
  • rerender-memo-with-default-value.md · references/
  • rerender-memo.md · references/
  • rerender-move-effect-to-event.md · references/
  • rerender-no-inline-components.md · references/
  • rerender-simple-expression-in-memo.md · references/
  • rerender-split-combined-hooks.md · references/
  • …and 13 more

SKILL.md (first lines)

<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->
<!-- Regenerate: bun run build:skills -->

## Session Init

This skill ships Trove conventions. Prefer existing project patterns over generic best practices when they conflict.

# React Performance Best Practices

70 prioritized rules covering React 19 and Next.js performance. This is an
intent-triggered performance skill, not a file-glob convention. Do not load it
for ordinary React edits unless the task is about performance, bundle size,
waterfalls, or render behavior. Each rule has a detailed reference file under
`references/` with incorrect/correct code examples.

## Stack Notes (read first)

Many of these rules assume a Next.js App Router project (`server-*` RSC rules, `async-api-routes`). If your app is a client-rendered SPA (Vite, CRA, plain React Router) without server components, treat the Next.js-specific rules as reference material and apply the rest directly — re-render, JS perf, bundle size, and client-side fetching rules are framework-agnostic.

## When to Apply

- Writing new components, hooks, or routes
- Reviewing PRs for performance regressions
- Refactoring slow renders, large bundles, or waterfall fetches
- Optimizing TanStack Query usage and Zustand selectors

## 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-cheap-condition-before-await` — Check cheap sync conditions before awaiting flags or remote values
- `async-defer-await` — Move await into branches where actually used
- `async-parallel` — Use `Promise.all()` for independent operations
- `async-dependencies` — Use partial-dependency utilities for mixed sync/async deps
- `async-api-routes` — Start promises early, await late (Next.js API routes; same idea applies in route loaders)
- `async-suspense-boundaries` — Use Suspense to stream content

### 2. Bundle Size Optimization (CRITICAL)

- `bundle-barrel-imports` — Import directly, avoid barrel files
- `bundle-analyzable-paths` — Prefer statically analyzable import paths
- `bundle-dynamic-imports` — Use dynamic `import()` for heavy components (Vite-friendly)
- `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 — Next.js / future reference)

- `server-auth-actions`, `server-cache-react`, `server-cache-lru`, `server-dedup-props`,
  `server-hoist-static-io`, `server-no-shared-module-state`, `server-serialization`,
  `server-parallel-fetching`, `server-parallel-nested-fetching`, `server-after-nonblocking`

### 4. Client-Side Data Fetching (MEDIUM-HIGH)

- `client-swr-dedup` — Use SWR for automatic dedup (we use TanStack Query — same principle: dedup via stable `queryKey`)
- `client-event-listeners` — Deduplicate global event listeners
- `client-passive-event-listeners` — Use passive listeners for scroll
- `client-localstorage-schema` — Version and minimize localStorage data (Zustand `persist` lives here)

### 5. Re-render Optimization (MEDIUM — high signal with Zustand)

- `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 `setState` for stable callbacks
- `rerender-lazy-state-init` — Pass function to `useState` for expensive values
- `rerender-simple-expression-in-memo` — Avoid memo for simple primitives
- `rerender-split-combined-hooks` — Split hooks with independent dependencies
- `rerender-move-effect-to-event` — Put interaction logic in event handlers
- `rerender-transitions` — Use `startTransition` for non-urgent updates
- `rerender-use-deferred-value` — Defer expensive renders to keep input responsive
- `rerender-use-ref-transient-values` — Use refs for transient frequent values
- `rerender-no-inline-components` — Don't define components inside components

### 6. Rendering Performance (MEDIUM)

- `rendering-animate-svg-wrapper`, `rendering-content-visibility`, `rendering-hoist-jsx`,
  `rendering-svg-precision`, `rendering-hydration-no-flicker`, `rendering-hydration-suppress-warning`,
  `rendering-activity`, `rendering-conditional-render`, `rendering-usetransition-loading`,
  `rendering-resource-hints`, `rendering-script-defer-async`

### 7. JavaScript Performance (LOW-MEDIUM)

- `js-batch-dom-css`, `js-index-maps`, `js-cache-property-access`, `js-cache-function-results`,
  `js-cache-storage`, `js-combine-iterations`, `js-length-check-first`, `js-early-exit`,
  `js-hoist-regexp`, `js-min-max-loop`, `js-set-map-lookups`, `js-tosorted-immutable`,
  `js-flatmap-filter`, `js-request-idle-callback`

### 8. Advanced Patterns (LOW)

- `advanced-effect-event-deps`, `advanced-event-handler-refs`, `advanced-init-once`, `advanced-use-latest`

## How to Use

Read individual rule files for code examples and rationale:

```
references/async-parallel.md
references/bundle-barrel-imports.md
references/rerender-derived-state.md
```

Each rule contains: brief explanation, incorrect example, correct example, references.

From bravew/trove, MIT.

More from bravew/trove

Compare and alternatives

    Featured in

    Signals

    Stars
    10
    Forks
    1
    Open issues
    0
    Last commit (this folder)
    Sep 10, 2026 (1 month ago)
    Last release
    Oct 8, 2026 (20 days ago)

    From GitHub (fetched Oct 24, 2026).

    Details

    License
    MIT
    First seen
    Oct 24, 2026
    Last checked
    Oct 24, 2026

    More from bravew

    Cite this page

    trove-react-best-practices skill. Agent Mart. https://agentmart.dev/skills/bravew-trove-react-best-practices (last updated 2026-10-24)