Readiness: Implemented
The toolchain
The toolchain
One binary runs the dev server, the build, the tests, the type checker, the formatter and the linter — the same commands in your terminal, your editor and CI. One guide per command, each saying what it runs, what it reads and what it refuses.
Most read
- Start hereDev and buildVite runs both; uf decides what it is handed.
- TestingA Rust runner, host workers, and where it stands against Bun.
- Type checkinguf check: uf lint, then Flow's own inference over the project and the packages that ship Flow.
- Formatting and lintingThe official Flow parser, a Rust printer, and Flow's own lints.
- uf in CIGitHub Actions, GitLab and CircleCI: one step each, why they all pin, and the install a check is worthless without.
What you need first
A project, or a repository you are adding uf to — Start makes one. uf in CI has a recipe for GitHub Actions, GitLab CI and CircleCI, and the rules under the recipes apply to any other system.
The pages, in order
- Dev and buildVite runs both; uf decides what it is handed.
- TestingA Rust runner, host workers, and where it stands against Bun.
- Mocks and storiesAnswer the request instead of stubbing the client, and give a component's states names a test and a baseline share.
- Type checkinguf check: uf lint, then Flow's own inference over the project and the packages that ship Flow.
- Formatting and lintingThe official Flow parser, a Rust printer, and Flow's own lints.
- uf in CIGitHub Actions, GitLab and CircleCI: one step each, why they all pin, and the install a check is worthless without.
- Dependenciesuf install and the rest: your project's own package manager, with install scripts refused and CI held to the lockfile.
- EnvironmentsA pinned toolchain per repository, in a shared store, with a collector.
- TasksDefine commands, connect dependencies and cache task results.
- Agentsuf mcp: twelve tools over stdio, the two that write, and what an agent should not assume.
- Next.js and TurbopackCompile Flow inside a Next.js app with Turbopack. uf dev and uf build stay on Vite.
The commands you run all day come first — the dev server and the build, the
tests and what they answer requests with, the type checker, the formatter and
the linter, and the pipeline that runs them on every push — then what they run on:
the dependencies, and which Node.js, Bun or package manager, pinned. After those
come the two other ways the same commands get run for you: Tasks
names them once in uf.config.js, and Agents hands them to a
coding agent.
Which page covers which command
| Command | Guide |
|---|---|
uf dev, uf build | Dev and build |
uf preview, uf start, uf build --adapter, uf build --compile | Targets |
uf fmt, uf lint | Formatting and linting |
uf check | Type checking |
uf test | Testing |
uf install, uf add, uf remove, uf update, uf why, uf ls, uf audit, uf search, uf pm approve-builds | Dependencies |
uf env, uf use | Environments |
uf run and ufr, uf exec and ufx | Tasks |
uf lsp | IDE setup, in Start |
uf mcp | Agents |
Every command not in the table — uf new, uf routes, uf i18n, uf release
and the rest — is in the command reference, and so is every
flag of the ones that are.
When you are done
Build an app is next: one guide per thing an application does. Reference is the whole surface of each command — every flag, every config key and its default — for when a guide has told you which one you need.
Edit this pagedocs/app/guide/toolchain/$page.mdx