Skip to content

v1.9.4 • Utils • 3kb gzipped • MIT

FormFlow

Validation and multi-step logic that works the same in React, Vue and vanilla. Your markup stays yours.

★ 858GitHub
↓ 12.3k / week● MIT● TS 5.0+
formflow-preview.png
Abstract preview graphic for FormFlow

// why formflow

Headless on purpose

FormFlow never renders anything. It tracks state, runs your rules and tells you what to show, which means it can never fight your design system.

● 0 deps● 3kb gzipped● tree-shakeable

// stack

Framework agnostic

One core plus thin adapters. The vanilla build is the reference implementation; every adapter is under sixty lines.

FormFlow started as a single file in a client project and stayed small on purpose. It does one job, it does it in 3kb gzipped, and it has no runtime dependencies.

Getting started

Install it, import it, call it:

npm i formflow-js

FormFlow never renders anything. It tracks state, runs your rules and tells you what to show, which means it can never fight your design system.

What it does not do

It does not manage your state, style your components or ship a plugin system. Those are your decisions, and keeping them out is what keeps the bundle honest.

  • Multi-step branching
  • Rules as plain functions
  • MIT licensed, commercially friendly

Features

Multi-step branching

Steps can depend on earlier answers. Skipped branches clear their own values so nothing stale is submitted.

Rules as plain functions

A validator takes a value and returns a message or nothing. No schema language to learn.

Tested to the edges

Ninety-eight percent branch coverage, with the awkward cases written first.

Node and browser

One build runs in both, with no conditional exports to get wrong.

Documented properly

Every public function has a worked example, not just a signature.

ESM and types

Ships module and CommonJS builds with hand-written type definitions and source maps.

Get FormFlow v1.9.4

12 files • .min.js 3kb • .zip 83kb • sha384 verified

Changelog

v1.9.4 Aug 19 2026 • latest
  • Async validators now debounce per field
  • Fixed step skipping when a branch was cleared
  • Vue adapter rewritten in 48 lines
v1.9.3 Jun 25 2026
  • Node 18 is now the minimum supported version
  • CommonJS build restored for older bundlers
v1.9.2 Apr 18 2026
  • Reworked the public API for consistency
  • Deprecated helpers removed
View full archive →

// related

Related products

Sep 10 • v2.0

ChartForge

Canvas charts in twelve lines. Responsive, accessible and dark-mode ready, with no D3 learning curve.

View →
Aug 30 • v3.2.1

MotionEase

Physics-based micro-animations with a single call. Spring curves that feel right without a tuning session.

View →
Aug 08 • v4.0

DataSync

Offline-first sync for IndexedDB with conflict resolution you can actually reason about.

View →

Drop it in this afternoon.

MIT licensed. Commercial friendly. Five-minute setup.