The Flutter community spent eight years arguing about state management. We shipped instead.
Battle-tested architecture that just makes sense — and a natural fit for the AI era. Everything below earns the right to that headline.
Four reasons it holds up.
Easy & Productive
Simple things are simple. Hard things break down into simple steps you can read top to bottom.
more →Flexible & Powerful
Aggressively composable. Unit-testable business logic, control-flow hooks, and context independence.
more →Battle-tested & Familiar
A direct descendant of React Hooks — the UI state pattern millions of developers already write.
more →AI-optimized
Token-efficient, low-ceremony code with a huge training corpus and published agent skills.
more →Simple things stay simple.
Both read top to bottom. The hard one is barely longer than the easy one.
Composable by construction.
utopia_hooks is designed around a single idea: state logic should be ordinary code — extractable, testable, and usable anywhere without framework ceremony.
Pull business logic out once, drop it into ten screens. Every hook is a plain Dart function — import and call.
You already know how to write it.
utopia_hooks is a direct descendant of React Hooks — the most widely-adopted UI-state pattern on earth. If your team knows React, the mental model transfers on day one.
Built for the agents that ship it.
We didn't design utopia_hooks for agents. It just inherits the shape of the code they trained on most — and in 2026, that pays off on every PR.
- token-efficient
Token-efficient
Low-ceremony code means less context burned per file. Agents do more with the same budget.
- familiar-priors
A corpus the models know
Hooks read like the React corpus the models trained on — orders of magnitude more of it than any Flutter dialect. Familiar priors, fewer hallucinations.
- skills-ready
Opinionated & skills-ready
Published Claude Code skills teach agents the exact patterns — Page · State · View, end to end.
add search to the orders list
Wiring the search state and field.
Skill(utopia-hooks)
paginated search — keys · debounce
Update(state/orders_screen_state.dart)
+2 lines (useFieldState · keys)
Update(view/orders_screen_view.dart)
+1 widget (search field)
done — one file pair, no codegen
migrate OrdersCubit to hooks
Converting Cubit to a state hook.
Skill(utopia-hooks-migrate-bloc)
Cubit → State hook · events → callbacks
Write(state/orders_screen_state.dart)
one hook replaces the Cubit
Update(orders_screen.dart)
BlocProvider removed
done — cubit deleted, tests green
Explore the open-source packages and agent skills below.
Our production stack,
open-sourced.
The tooling we wish Flutter shipped with - built because we care, hardened on our apps, and kept in the open.
Every agent writes production-grade Flutter the same way.
- name
- utopia-hooks
Claude builds the admin panel. Not by hand.
- name
- utopia-cms
Your .claude/ layer is a project. This skill ships it.
- name
- utopia-ai-arch
Migrate BLoC to utopia_hooks. One screen per commit.
- name
- migrate-bloc-to-utopia-hooks
Why we didn't just use BLoC.
BLoC was the right answer in 2018, and we genuinely respect it as the framework that brought discipline to Flutter state management. The architecture described on this page is simply what we reach for today — it fits the way our teams work, for the reasons laid out above. The structural comparison between the two approaches deserves its own careful treatment, so we wrote it up separately.
| utopia_hooks | flutter_hooks | BLoC | |
|---|---|---|---|
| Mental model | View = function(state) | React primitives, no screen architecture | event → reducer → state machine |
| Files per screen | 1–2 | you invent the structure | 5–6 + codegen |
| Testing business logic | pure Dart, no widget tree | widget tree required | bloc_test + mocks |
| Widget · global · background | the same hook everywhere | widget tree only | separate wiring per context |
| Agent fluency | React-scale corpus, low ceremony | React-scale corpus, primitives only | niche, version-fragmented corpus |
Simplified on purpose — each column deserves its own argument, so we wrote them: vs BLoC and vs flutter_hooks.
Read the full comparison→Migration is paved.
Our open-source Claude Code plugin converts BLoC codebases to utopia_hooks one Cubit at a time. The rewrite is mostly mechanical — the plugin handles roughly 80%, a senior dev finishes the rest. Codebases up to ~50 screens typically land inside two weeks.
talk to us
Audit your architecture.
Not sure whether your current state-management approach is holding you back? We'll take a look and tell you honestly what we see.
Start with the docs ↗