.codex/skills/rezi-perf-profiling/SKILL.md
Profile and optimize Rezi app performance. Use when app feels slow, frames drop, or render phases take too long.
npx skillsauth add rtlzeromemory/rezi rezi-perf-profilingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when:
packages/core/src/app/widgetRenderer.ts — render pipeline with phase timingpackages/core/src/runtime/commit.ts — reconciliation (leaf/container reuse)packages/core/src/layout/ — layout engine (FNV-1a stability signatures)packages/core/src/widgets/composition.ts — animation utility hookspackages/bench/src/ — profiling scriptsEnable profiling and run:
REZI_PERF=1 REZI_PERF_DETAIL=1 node your-app.js
Observe phase timings: view → commit → layout → render → build
Run systematic profiling:
npx tsx packages/bench/src/profile-phases.ts
npx tsx packages/bench/src/profile-construction.ts
Apply common fixes:
| Bottleneck | Fix |
|-----------|-----|
| View phase slow | ctx.useMemo(() => expensiveComputation, [deps]) for expensive computations |
| Commit phase slow | Add key props on list items for stable reconciliation |
| Layout phase slow | Reduce nesting depth; layout stability signatures skip relayout when tree is stable |
| Render phase slow | Use ui.virtualList() for large datasets |
| Animation-heavy screen slow | Limit transition scope (properties), animate only visible rows, avoid per-frame object churn |
| Overall slow | Flatten unnecessary wrapper nodes |
Depth guardrails:
ctx.useMemo(() => expensiveComputation, [deps]) — skip recomputationkey on every list item — enables O(1) reconciliationui.virtualList() — only renders visible rowsuseStagger(...) + ui.virtualList(...) — stagger only the visible windowui.box({ transition: { properties: [...] } }) — animate only required dimensionsctx.useCallback(fn, [deps])testing
Write tests for Rezi widgets, screens, or app logic using createTestRenderer and node:test.
development
Add routing with guards and nested outlets to a Rezi app. Use when building multi-page/screen TUI applications.
tools
Add modal dialogs and overlay UI with focus trapping. Use when implementing confirmations, alerts, or layered interfaces.
tools
Set up keyboard shortcuts and chord bindings for a Rezi app. Use when adding hotkeys, key combos, or modal input modes.