I got tired of rebuilding multi-step form logic from scratch, so I built FormFlow
typescript
dev.to
Every project I've worked on that needed a multi-step form ended up the same way: a tangle of useReducer, scattered localStorage calls, and validation logic duplicated across steps. The fifth time I found myself writing the same "which step are we on?" state machine, I stopped and built something reusable. That thing is FormFlow — a headless React hook for multi-step forms with conditional branching, Zod validation, and optional persistence baked in. The problem it solves Multi-step