Shipping with Flutter - since 1.0, December 2018

Flutter, Open Source & AI Agents

Flutter-first studio. We open-sourced what works.

Shipped in
EducationFinTechHealthcareGamingARTransportConsumer
the math

Flutter solves the platform.
We ship your product.

FLUTTER
solves for
  • Dart across iOS, Android, web, desktop
  • 60fps native rendering
  • hot reload
  • single hiring pool
  • Material + Cupertino out of the box
UTOPIA
solves for
  • architecture (utopia_hooks)
  • product design
  • agentic AI strategy
  • GenUI Kit
  • open-source skills
YOUR PRODUCT
delivers
  • one codebase, all platforms
  • features shipped at agent speed
  • maintainable past hand-over
  • yours at hand-over
  • production-grade from the first commit
open source · 23 packages · 4 skills

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.

~/utopia

State was three files and five classes. One hook ends that.

Same screen, same behavior, far less code - and because the state logic is decoupled from Flutter, it stays background-safe and fully unit-testable in plain Dart.
4.7×shorter
1 / 3files
1 / 5classes
0deps added
bloc.dart · event.dart · screen.dart
1abstract class CounterEvent {}
2class Increment extends CounterEvent {}
3class Decrement extends CounterEvent {}
4
5class CounterBloc extends Bloc<CounterEvent, int> {
6 CounterBloc() : super(0) {
7 on<Increment>((e, emit) => emit(state + 1));
8 on<Decrement>((e, emit) => emit(state - 1));
9 }
10}
11
12class CounterScreen extends StatelessWidget {
13 Widget build(BuildContext ctx) => BlocProvider(
14 create: (_) => CounterBloc(),
15 child: BlocBuilder<CounterBloc, int>(...))
+ 32 more lines · BlocProvider, BlocBuilder, Equatable, freezed
3 files·5 classes·47 lines
vs
state.dart
1CounterState useCounterState() {
2 final count = useState(0);
3
4 return CounterState(
5 count: count.value,
6 increment: () => count.value++,
7 decrement: () => count.value--,
8 );
9}
10// 1 hook. Same behavior. Background-safe. Testable.
1 file·1 function·10 lines·★ Screen · State · View

One command scaffolds the app. Then it keeps agents honest.

utopia create scaffolds the app and its .claude/ layer; then describe, doctor and an MCP server give every agent and CI one structured, JSON-first view of the project.
1command to scaffold
5MCP tools
15doctor checks
JSONfirst, for agents
~/my_app ▸ Terminalscaffold → operate
1$ dart pub global activate utopia_cli
2 ✓ Activated utopia 0.2.x
3
4$ utopia create flutter_app my_app --org=io.utopiasoft
5 ✓ Screen · State · View app · .claude/ + AGENTS.md wired
6
7$ utopia doctor
8 ✓ 15 checks · {rule_id, file, line, fix} as JSON
9 → CI and agents reason over the same audit
10
11$ utopia mcp # register in Claude Code
12 ▸ describe · describe_routes · doctor · analyze_hooks ×2
13
14$ claude "add a tickets screen"
15 ▸ utopia describe → project as JSON
16 ▸ writes tickets_screen.dart + state + view
17 ▸ utopia hooks analyze → clean

An admin panel for your data. In Flutter, in your codebase.

Pick a delegate - Firebase, Supabase, Hasura, or GraphQL - and the common entry types ship out of the box; need a custom one? The interface is small.
4backends
8+typed entries
0admin UI to write
1Flutter codebase
products_page.dart1 - describe a table
1// a delegate + typed entries = full CRUD UI
2// one line below talks to Firestore
3
4CmsTablePage(
5 title: 'Products',
6 delegate: CmsFirebaseDelegate('products'),
7 entries: [
8 CmsTextEntry(key: 'name'),
9 CmsTextEntry(key: 'description', flex: 4),
10 CmsNumEntry(key: 'price'),
11 CmsBoolEntry(key: 'visible'),
12 ],
13)

Every agent writes production-grade Flutter the same way.

GitHub
A holistic Flutter architecture, not just a state library: every agent writes the same Screen · State · View, hooks and async patterns - production-grade, not best-guess.
15reference files
16non-negotiable rules
2enforcement hooks
4+agents supported
utopia-hooks/SKILL.md15 refs
name
utopia-hooks
Referencesread before writing
Screen · State · ViewCRITICAL
Hook catalogCRITICAL
Global shared stateCRITICAL
Async patternsHIGH
Paginated listsHIGH
App bootstrapHIGH
Error handlingHIGH
NavigationHIGH
Multi-page shellHIGH
Complex state examplesHIGH
Composable hooksHIGH
Flutter conventionsHIGH
TestingHIGH
DI & servicesMEDIUM
utopia_cli surfacesMEDIUM

Claude builds the admin panel. Not by hand.

GitHub
Claude builds the whole back-office - sortable tables, CRUD overlays, filters, per-row actions and media - in ~80 lines of config, not ~970 hand-rolled.
11reference files
7catalog primitives
4backends
8anti-pattern checks
utopia-cms/SKILL.md11 refs
name
utopia-cms
Referencesshell → table → delegate
Anti-patternsCRITICAL
CmsWidget shellCRITICAL
CmsTablePageCRITICAL
DelegatesCRITICAL
EntriesCRITICAL
FiltersHIGH
Table actionsHIGH
Management sectionsHIGH
ThemeMEDIUM
RelationshipsMEDIUM
MediaMEDIUM

Your .claude/ layer is a project. This skill ships it.

GitHub
A production-tested .claude/ layer in minutes - the agent roster, enforcement-hook contracts and skill-design rules already proven across Utopia repos.
10reference files
4agent roles
3slash commands
5workflow templates
utopia-ai-arch/SKILL.md10 refs
name
utopia-ai-arch
Referencesthe layer blueprint
Layer modelCRITICAL
Agent rosterCRITICAL
Skill designCRITICAL
Enforcement hooksCRITICAL
Evolution & driftCRITICAL
Slash commandsHIGH
Architecture docHIGH
CLAUDE.mdHIGH
Bootstrap procedureHIGH
settings.jsonMEDIUM

Migrate BLoC to utopia_hooks. One screen per commit.

GitHub
A 5-agent orchestration migrates a full BLoC/Cubit codebase one screen per commit, exit gate enforced automatically - always green, ~30% less code.
5sub-agents
2phases
7item exit gate
~30%less code
utopia-hooks-migrate-bloc/SKILL.md8 refs
name
migrate-bloc-to-utopia-hooks
Referencesstate → screen patterns
BLoC → hooks: stateCRITICAL
BLoC → hooks: widgetCRITICAL
pubspec migrationCRITICAL
Migration stepsHIGH
Global-state migrationHIGH
Screen migration flowHIGH
Complex Cubit patternsHIGH
Post-migration refactorHIGH
production client work

Four cases. All in production.

View all cases
tap a row to switch cases
9:41● ● ●
Selected work
4 cases shipped
AllEducationGamingFinTech
Read the case
★ FLAGSHIPEducation - B2B + B2C
FlutterAgenticgRPCEducation

Jolly Phonics: 5M+ installs, one platform.

Two flagship Flutter apps - one for classrooms, one for home - a gRPC backend, and the commerce layer for a distributor network, all built on the utopia_hooks architecture we open-sourced. The brief was one course. Millions of children later, it's a platform.

StackFlutter - Kotlin - Ktor - Firebase - gRPC - Shorebird - RevenueCat
Read the case
Selected work
Selected work
4 cases shipped
AllEducationGamingFinTech
Read the case
★ FLAGSHIPEducation - B2B + B2C
FlutterAgenticgRPCEducation

Jolly Phonics: 5M+ installs, one platform.

Two flagship Flutter apps - one for classrooms, one for home - a gRPC backend, and the commerce layer for a distributor network, all built on the utopia_hooks architecture we open-sourced. The brief was one course. Millions of children later, it's a platform.

StackFlutter - Kotlin - Ktor - Firebase - gRPC - Shorebird - RevenueCat
Read the case
★ FLAGSHIP
Education - B2B + B2C
FlutterAgenticgRPCEducation

Jolly Phonics: 5M+ installs, one platform.

Two flagship Flutter apps - one for classrooms, one for home - a gRPC backend, and the commerce layer for a distributor network, all built on the utopia_hooks architecture we open-sourced. The brief was one course. Millions of children later, it's a platform.

StackFlutter - Kotlin - Ktor - Firebase - gRPC - Shorebird - RevenueCat
Read the case
how a senior dev ships·4 kinds of work

The senior dev who designs your architecture writes your code. And takes your call.

No PM layer. No BD funnel. Once an agency hits 50 people, the BD-and-PM layering is forced by economics. We chose the harder economics. You get the technical decision-maker.

the method

Four kinds of work. One senior owns all four.

  1. Plan

    the discovery

    Workshops first - we get to the real problem before anyone scopes a feature.

  2. Ship

    the cadence

    Working software in your hands every two weeks.

  3. Verify

    the steering

    Nothing's locked - every cycle you change course on what you've seen.

  4. AI

    the engine

    More shipped per cycle, at senior quality - agents run the loop, not GPT bolted into your app.

The founders
  • Jakub WalusiakCo-founder · EngineeringLead architect of utopia_hooks. utopia-flutter monorepo maintainer.
  • Jakob KirchnerCo-founder · StrategyProduct and the agentic Flutter loop. Founder-led intake.
  • Thomas KirchnerCo-founder · ArchitectureBackend and infrastructure. utopia_arch maintainer.
  • Paweł AdamarekCo-founder · OperationsLead dev on client engagements. Runs delivery day to day.
  • Jakub WalusiakEngineeringLead architect of utopia_hooks. utopia-flutter monorepo maintainer.
  • Jakob KirchnerStrategyProduct and the agentic Flutter loop. Founder-led intake.
  • Thomas KirchnerArchitectureBackend and infrastructure. utopia_arch maintainer.
  • Paweł AdamarekOperationsLead dev on client engagements. Runs delivery day to day.
"We were writing Flutter before there was a production track record to follow. The architecture we built for ourselves is now open. We don't follow best practices. We publish ours."- Co-founders, Utopia · Cooperating on Flutter since 1.0, December 2018
talk to us

Tell us what you're building.

We've shipped Flutter apps in production since 1.0, December 2018. Whatever you're building, we've shipped one like it.

Read the architecture
Reply within
24 hours
Based in
Kraków, Poland
Working with
Founders · CTOs · Tech Leads
Open to
Flutter · Agentic Flutter · Architecture audits