Start
What you can do
Pick what you want to do, then follow the path left to right: each step is the page to read next. The status beside each goal says how far it goes today, in the words the pages themselves use.
Implemented means every step describes something that works now. Experimental means it works, and a step says what is not established yet — the line under the goal says what. Planned means it is not built, and the line names the issue that tracks it.
Start a new app
ImplementedA React application in Flow with routes, server code and a build you can deploy.
Run it every day
Implementeduf dev and uf build, on a pinned runtime, with your scripts as named tasks.
Add tests
Implementeduf test over components and server code, with requests answered by mocks, in CI.
Type-check, format and lint
ImplementedOne formatter, one linter and Flow's checker, the same in the editor and in CI.
Load and change data
ImplementedServer Components that fetch, actions that write, and input checked where it enters.
Build the interface
ImplementedAccessible headless components, styled with CSS or StyleX, with images and fonts handled.
Serve it: a server, static files or one executable
Implementeduf start with no bundler in the process, a static export, or a single file with the runtime inside.
Ship to Node.js, Bun, Deno, a container, the edge or serverless
ExperimentalA directory per platform from uf build --adapter.
Tests drive each adapter's output in process; no server adapter has been deployed to a real platform yet (#956).
Build a phone app
ExperimentalNative route files, Metro, navigation and tests against a native tree.
uf cannot mount into a real native host yet; the page's status table says what works.
Build a terminal app
ImplementedReact with a terminal for a host: flexbox, keyboard, focus and a cell diff.
Use GraphQL and Relay
ExperimentalRelay artifacts, typed components and request-scoped preloads.
The RSC protocol is experimental and does not support @defer.
Talk to a database with sqlc
PlannedSQL you write, with Flow types generated from it.
sqlc Flow generation is tracked in #1367; today the driver is the application's own.
Move an existing app
ImplementedA CRA, Vite or Next.js application on uf, with what differs listed up front.
Hand it to a coding agent
Implementeduf mcp: the same checks, run by an agent over stdio.
Not on this map
Anything the manual does not cover is in What uf does not do, with the refusals and their reasons and the gaps with their issue numbers. Every command and flag is in the command reference.
Where to go next
Install is next, if you have not installed uf yet.
Edit this pagedocs/app/guide/goals/$page.mdx