Google calls Genkit Dart 1.0 production-ready for building agentic apps with Dart and Flutter. Instead of explaining what that means, we built a demo that shows it.
On October 8, Google released Genkit Dart 1.0, the first stable version of its open-source framework for building AI features and agents with Dart and Flutter. For teams that already build apps in Flutter, it’s a big step: the language that powers your app can now power its AI too.
We wanted to understand what this release changes for a real product, so we built a small interactive simulation. Pick a request, follow the agent step by step and see what Genkit does at each moment. It’s a scripted walkthrough, not a live model, and the code on each step is Genkit Dart.
Why Genkit Dart matters for your product
The detail we find most useful for product teams is where the approval lives. In Genkit, a tool that changes something, like a booking or a payment, can pause the agent and wait for the user to confirm. The check sits inside the tool itself, so the model can’t skip it, however the conversation goes. That is what makes it reasonable to give an agent real tasks without giving up control.
Two other points matter for Flutter teams. The app and the Genkit backend are both written in Dart and share the same data types, so what the server sends is exactly what the app expects. And Genkit works with Gemini, Claude, OpenAI and compatible models through one API, so switching providers doesn’t mean rewriting your app.
Try it: watch an AI agent at work
Choose one of two requests for a sample travel assistant. Change an existing hotel booking, or plan three relaxed days in Lisbon. Then click “Next step” to follow the agent as it works. When it asks for your approval, the decision is yours.
Watch an AI agent at work
Pick a request and follow, step by step, how an agent built with Genkit Dart understands it, looks up data, asks for your approval and gets the job done.
Interactive simulationChoose a request for the agent
Choose a request to start the simulation.
Choose a request to start
The app on the left is a travel assistant. As the agent works, this panel explains each step and the part of Genkit that makes it possible.
What you just saw
Every step in the simulation maps to a real Genkit capability:
- Tools. The agent calls regular Dart functions to look up bookings, check availability or read a traveler’s profile, so it works with real data instead of guessing.
- Structured output. The model returns typed data that matches a schema shared by server and app. That’s why the Lisbon plan shows up as a clean card instead of a wall of text.
- Interrupts. The agent pauses before any real action, like changing a booking or reserving a tour. Because the approval check lives inside the tool, the model can’t skip it. Say no, and the action never runs.
Together, they let an agent take real actions for your users without taking control away from them.
Three ways to run Genkit Dart, and how to choose
Genkit Dart runs wherever Dart runs, and Google’s announcement describes three ways to set it up. The right one depends less on the technology than on two questions: where your API keys live, and who controls what the agent can do.
- Directly in the Flutter app. The app calls the model itself. It’s the fastest way to prototype, and it works for apps where each user brings their own API key. It’s not an option for a published app with your own keys: those should never ship inside the app.
- On a Dart server. The agent’s logic, prompts and tools live on the backend, and the Flutter app calls them as typed functions. This is the natural fit for an agent like the one in the demo, which looks up bookings and changes them only after the user approves.
- In the app, with a lightweight backend. The logic stays in Flutter, but every model request goes through a small Genkit server that keeps the keys safe and checks who is allowed to make each request.
Our rule of thumb: prototype in the app, and move anything that touches real data or real actions to a server before it reaches users.
Choosing where the agent runs is only the first decision. Before an agent reaches real users, we’d also confirm four things: that the server, not the app, verifies each approval; that confirming twice can never trigger the same action twice; that any data shared with the model provider has gone through a privacy review; and that traces, token usage and latency are monitored from day one. Genkit already provides the building blocks for this, from interrupts and retry middleware to the Developer UI and OpenTelemetry tracing with genkit_otel.
To try it, you need Dart 3.12 or later. The schema types in the code snippets (the ones ending in $schema) are generated with build_runner from the schemantic package. Google’s quickstart is on genkit.dev, and the packages are on pub.dev.
Conclusion
Genkit Dart 1.0 gives Flutter teams a practical starting point for building AI into their products. The opportunity lies in everyday tasks: finding information, preparing a request or coordinating the steps a user would otherwise handle manually.
An agent like this sample could start with one of those tasks. Give it a clear purpose, define what it can do and make it easy for users to review its work. Then test whether it actually makes their day easier.
If you see an opportunity like this in your product, we can help you build a focused prototype and evaluate it with real users.
That’s the kind of work we do at Somnio Software. If you see a task like this in your product, we can help you build a focused prototype in Flutter and test it with real users. Contact us today to learn how we can help you turn your vision into reality.

.png)

