| name | game-state-and-rendering |
| description | Use when changing stores, per-frame gameplay logic, React state, refs, or rendering integration in an Air Jam project so state ownership stays clear and rerenders stay controlled. |
Game State And Rendering
Use this skill when a task touches state ownership, per-frame updates, or rendering hot paths.
Read First
docs/generated/state-and-rendering.md
docs/generated/input-system.md
docs/generated/networked-state.md
Core Rules
- keep input in the input lane
- keep authoritative shared truth in replicated state
- keep coarse UX/system events in signals
- keep per-frame mutable values out of React state when React rendering is not needed
- use narrow Zustand selectors
Decision Guide
Use:
- replicated state for replayable shared truth
- local UI state for local view concerns
- refs for hot mutable runtime values
- pure domain modules for rules and calculations
R3F / Three Guidance
- avoid per-frame React rerenders
- mutate refs in frame handlers when appropriate
- keep scene integration separate from domain decisions
Anti-Patterns
- using store actions for high-frequency input
- using React state as the simulation engine
- selecting whole stores throughout the tree
- mixing debug state into hot loops