Comprehensive performance and architecture guide for Zustand state management in React applications. Contains 43 rules across 8 categories, prioritized by impact from critical (store architecture, selector optimization) to incremental (advanced patterns).
When to Apply
Reference these guidelines when:
Creating new Zustand stores
Optimizing re-render performance with selectors
Implementing persistence or middleware
Integrating Zustand with SSR/Next.js
Reviewing code for state management patterns
Rule Categories by Priority
Priority
Category
Impact
Prefix
1
Store Architecture
CRITICAL
store-
2
Selector Optimization
CRITICAL
select-
3
Re-render Prevention
HIGH
render-
4
State Updates
MEDIUM-HIGH
update-
5
Middleware Configuration
MEDIUM
mw-
6
SSR and Hydration
MEDIUM
ssr-
7
TypeScript Patterns
LOW-MEDIUM
ts-
8
Advanced Patterns
LOW
adv-
Quick Reference
1. Store Architecture (CRITICAL)
store-multiple-stores - Use multiple small stores instead of one monolithic store
store-separate-actions - Separate actions from state in dedicated namespace
store-event-naming - Name actions as events not setters
store-colocate-logic - Colocate actions with the state they modify
store-avoid-derived-state - Derive computed values instead of storing them
store-domain-boundaries - Organize stores by feature domain
2. Selector Optimization (CRITICAL)
select-always-use - Always use selectors never subscribe to entire store
select-atomic-picks - Use atomic selectors for single values
update-async-actions - Handle async actions with loading and error states
update-batch-updates - Batch related updates in single set call
5. Middleware Configuration (MEDIUM)
mw-devtools-actions - Name actions for DevTools debugging
mw-persist-partialize - Use partialize for selective persistence
mw-persist-migration - Version and migrate persisted state
mw-immer-nested - Use immer for deeply nested state updates
mw-combine-order - Apply middlewares in correct order
mw-slice-middleware - Apply middleware at combined store level
6. SSR and Hydration (MEDIUM)
ssr-skip-hydration - Use skipHydration in SSR contexts
ssr-manual-rehydrate - Manually rehydrate on client mount
ssr-hydration-hook - Use custom hook to prevent hydration mismatch
ssr-check-window - Guard browser APIs with typeof window check
7. TypeScript Patterns (LOW-MEDIUM)
ts-state-creator - Use StateCreator for slice typing
ts-middleware-inference - Preserve type inference with middleware
ts-separate-types - Separate state and actions interfaces
ts-generic-selectors - Type selectors for reusability
ts-bound-store - Type combined stores correctly
8. Advanced Patterns (LOW)
adv-context-stores - Combine Zustand with React Context for dependency injection
adv-transient-updates - Use subscribe for transient updates
adv-computed-getters - Implement computed state with getters
adv-third-party-integration - Integrate with React Query and SWR
How to Use
Read individual reference files for detailed explanations and code examples:
Section definitions - Category structure and impact levels
Rule template - Template for adding new rules
Reference Files
File
Description
references/_sections.md
Category definitions and ordering
assets/templates/_template.md
Template for new rules
metadata.json
Version and reference information
1---2name: zustand3description: Community Zustand Best Practices4---5# Community Zustand Best Practices67Comprehensive performance and architecture guide for Zustand state management in React applications. Contains 43 rules across 8 categories, prioritized by impact from critical (store architecture, selector optimization) to incremental (advanced patterns).89## When to Apply1011Reference these guidelines when:12- Creating new Zustand stores13- Optimizing re-render performance with selectors14- Implementing persistence or middleware15- Integrating Zustand with SSR/Next.js16- Reviewing code for state management patterns1718## Rule Categories by Priority1920| Priority | Category | Impact | Prefix |21|----------|----------|--------|--------|22| 1 | Store Architecture | CRITICAL | `store-` |23| 2 | Selector Optimization | CRITICAL | `select-` |24| 3 | Re-render Prevention | HIGH | `render-` |25| 4 | State Updates | MEDIUM-HIGH | `update-` |26| 5 | Middleware Configuration | MEDIUM | `mw-` |27| 6 | SSR and Hydration | MEDIUM | `ssr-` |28| 7 | TypeScript Patterns | LOW-MEDIUM | `ts-` |29| 8 | Advanced Patterns | LOW | `adv-` |3031## Quick Reference3233### 1. Store Architecture (CRITICAL)3435- [`store-multiple-stores`](references/store-multiple-stores.md) - Use multiple small stores instead of one monolithic store36- [`store-separate-actions`](references/store-separate-actions.md) - Separate actions from state in dedicated namespace37- [`store-event-naming`](references/store-event-naming.md) - Name actions as events not setters38- [`store-colocate-logic`](references/store-colocate-logic.md) - Colocate actions with the state they modify39- [`store-avoid-derived-state`](references/store-avoid-derived-state.md) - Derive computed values instead of storing them40- [`store-domain-boundaries`](references/store-domain-boundaries.md) - Organize stores by feature domain4142### 2. Selector Optimization (CRITICAL)4344- [`select-always-use`](references/select-always-use.md) - Always use selectors never subscribe to entire store45- [`select-atomic-picks`](references/select-atomic-picks.md) - Use atomic selectors for single values46- [`select-stable-returns`](references/select-stable-returns.md) - Ensure selectors return stable references47- [`select-custom-hooks`](references/select-custom-hooks.md) - Export custom hooks not raw store48- [`select-auto-generate`](references/select-auto-generate.md) - Use auto-generated selectors for large stores49- [`select-memoize-computed`](references/select-memoize-computed.md) - Memoize expensive computed selectors50- [`select-avoid-inline`](references/select-avoid-inline.md) - Define selectors outside components5152### 3. Re-render Prevention (HIGH)5354- [`render-use-shallow`](references/render-use-shallow.md) - Use useShallow for multi-property selections55- [`render-equality-fn`](references/render-equality-fn.md) - Provide custom equality functions when needed56- [`render-memo-children`](references/render-memo-children.md) - Memo children affected by parent store updates57- [`render-subscribe-external`](references/render-subscribe-external.md) - Use subscribe for non-React consumers58- [`render-avoid-object-returns`](references/render-avoid-object-returns.md) - Avoid returning new objects from selectors59- [`render-split-components`](references/render-split-components.md) - Split components to minimize subscription scope6061### 4. State Updates (MEDIUM-HIGH)6263- [`update-functional-set`](references/update-functional-set.md) - Use functional form when updating based on previous state64- [`update-immutable`](references/update-immutable.md) - Never mutate state directly65- [`update-shallow-merge`](references/update-shallow-merge.md) - Understand set() shallow merge behavior66- [`update-async-actions`](references/update-async-actions.md) - Handle async actions with loading and error states67- [`update-batch-updates`](references/update-batch-updates.md) - Batch related updates in single set call6869### 5. Middleware Configuration (MEDIUM)7071- [`mw-devtools-actions`](references/mw-devtools-actions.md) - Name actions for DevTools debugging72- [`mw-persist-partialize`](references/mw-persist-partialize.md) - Use partialize for selective persistence73- [`mw-persist-migration`](references/mw-persist-migration.md) - Version and migrate persisted state74- [`mw-immer-nested`](references/mw-immer-nested.md) - Use immer for deeply nested state updates75- [`mw-combine-order`](references/mw-combine-order.md) - Apply middlewares in correct order76- [`mw-slice-middleware`](references/mw-slice-middleware.md) - Apply middleware at combined store level7778### 6. SSR and Hydration (MEDIUM)7980- [`ssr-skip-hydration`](references/ssr-skip-hydration.md) - Use skipHydration in SSR contexts81- [`ssr-manual-rehydrate`](references/ssr-manual-rehydrate.md) - Manually rehydrate on client mount82- [`ssr-hydration-hook`](references/ssr-hydration-hook.md) - Use custom hook to prevent hydration mismatch83- [`ssr-check-window`](references/ssr-check-window.md) - Guard browser APIs with typeof window check8485### 7. TypeScript Patterns (LOW-MEDIUM)8687- [`ts-state-creator`](references/ts-state-creator.md) - Use StateCreator for slice typing88- [`ts-middleware-inference`](references/ts-middleware-inference.md) - Preserve type inference with middleware89- [`ts-separate-types`](references/ts-separate-types.md) - Separate state and actions interfaces90- [`ts-generic-selectors`](references/ts-generic-selectors.md) - Type selectors for reusability91- [`ts-bound-store`](references/ts-bound-store.md) - Type combined stores correctly9293### 8. Advanced Patterns (LOW)9495- [`adv-context-stores`](references/adv-context-stores.md) - Combine Zustand with React Context for dependency injection96- [`adv-transient-updates`](references/adv-transient-updates.md) - Use subscribe for transient updates97- [`adv-computed-getters`](references/adv-computed-getters.md) - Implement computed state with getters98- [`adv-third-party-integration`](references/adv-third-party-integration.md) - Integrate with React Query and SWR99100## How to Use101102Read individual reference files for detailed explanations and code examples:103104- [Section definitions](references/_sections.md) - Category structure and impact levels105- [Rule template](assets/templates/_template.md) - Template for adding new rules106107## Reference Files108109| File | Description |110|------|-------------|111| [references/_sections.md](references/_sections.md) | Category definitions and ordering |112| [assets/templates/_template.md](assets/templates/_template.md) | Template for new rules |113| [metadata.json](metadata.json) | Version and reference information |
Run npx skillmds@latest add comeonoliver/zustand in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Community Zustand Best Practices It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. Independent scanners report: SkillSpector: PASS, Skill Scanner: PASS. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
ComeOnOliver (@comeonoliver) published this skill. Their other Agent Skills are listed on their SkillMD profile.