uf0.0.0-alpha

Unified toolchain for Flow

Build the strongest React
experience with Modern Flow.

uf gives Flow-first React apps one native command for dev, builds, tests, formatting and linting. The official Flow parser, React Compiler and oxc stay in the same toolchain, with one config file for the whole path.

Pre-release. uf is at 0.0.0-alpha. Interfaces move without warning, and every @uniflowed/* release on npm is a prerelease under the alpha tag. The guide says what works today and where it loses to the tools it means to replace.

Install it

One binary. It reads the checksum from the release manifest before it writes anything, and it is short enough to read first.

curl -fsSL https://setup.uniflowed.dev | sh

Then a project, and a dev server, with nothing to configure in between:

uf new my-site
cd my-site && uf dev

That is the whole setup. No npm install of a toolchain, no config to copy from somewhere. If you would rather build from source, or pin the project to Bun or Deno, the install page covers both.

What a build looks like

uf build
uf build  docs
──────────────

  config       ························ 105.2µs
  routes       ························ 402.2µs
  router types ························ 300.7µs
  rsc analysis ························   4.7ms
  vite         ························   2.11s
  manifest     ························ 134.7µs
  total        ························   6.44s

  engine             vite
  host               node
  prerendered pages  14
  modules            12

There is no vite.config.ts next to that, no babel.config.js, and no @babel/preset-flow in the dependency tree. Flow reaches JavaScript through Meta's own Rust parser and React's own compiler, both linked into the binary.

What it claims

Flow without Babel
The official Flow parser, the official React Compiler and oxc, in one Rust pipeline. component, hook, match and enums are lowered where they are parsed. How it works
Vite, not a fork of it
The dev server and the production build are Vite 8. uf decides what Vite is handed and drives it over a JSON protocol, so Vite's plugin ecosystem keeps working. Dev and build
Tests that actually run
Rust owns discovery, ordering, the worker pool and the report; the host runs the bodies. About nine times faster than Vitest on 1,000 tests — and about three times slower than Bun, which the guide explains rather than hides. Testing
One config file
uf.config.js configures the runtime, the router, the build, the test runner and the formatter. It is Flow, so it is type-checked like the rest of your code. Every option
Any JavaScript host
Node.js, Bun and Deno are capabilities, not targets: uf asks the host what it can do and picks one. The same project builds and tests on all three. Install