Genkit Dart 1.0 Is Stable: Build Production Flutter AI Agents Now Google released Genkit Dart 1.0 on October 8, the first stable, semantically versioned release of its AI framework for Dart, locking the API contract for the core genkit package, the schemantic type-generation library, and the main model plugins. The package had 34,500+ downloads on pub.dev and 160 pub points at launch, and Google's announcement credits feedback from the Dart and Flutter community for shaping the APIs toward production workloads. The release recommends defining AI logic as typed Flows on a Dart server that Flutter apps call via defineRemoteAction, keeping API keys server-side, while stateful agents and A2UI remain under package:genkit/experimental.dart outside the 1.0 stability guarantee. Flutter developers have been building AI features the hard way — REST calls to a Python backend, manual JSON serialization, no type safety, and model API keys too often exposed in client-side config. Genkit Dart 1.0, released October 8, changes that. Google’s AI framework for Dart has hit its first stable, semantically versioned release. The API contract is locked in. You can ship production apps on top of it today. What the 1.0 Tag Actually Means Before 1.0, Genkit Dart was experimental — Google made no promises about breaking changes. Teams building on it were taking a bet. The 1.0 tag is the stability signal those teams were waiting for: the core genkit package, the schemantic type-generation library, and the main model plugins are now covered by semantic versioning. A breaking change requires a major version bump. That is the commitment. The package already has 34,500+ downloads on pub.dev and 160 pub points at launch. Google’s announcement https://dart.dev/blog/announcing-genkit-dart-1-0 credits “feedback from the Dart and Flutter community” for shaping the APIs toward production workloads. The Architecture: Server Flows, Flutter Client The officially recommended pattern is clean. You define your AI logic as Flows on a Dart server. A Flow is a typed, observable function that gets deployed as an HTTP POST endpoint automatically. Your Flutter app calls those flows using defineRemoteAction , with matching types generated by the schemantic package. API keys stay on the server. Types are shared without manual serialization. Here is what a minimal server flow looks like: final summarizeFlow = ai.defineFlow name: 'summarize', inputSchema: SummarizeInput.$schema, outputSchema: SummarizeOutput.$schema, fn: input, async { final result = await ai.generate model: gemini15Flash, prompt: 'Summarize: ${input.text}', ; return SummarizeOutput summary: result.text ; }, ; await GenkitRouter summarizeFlow .serve port: 3400 ; And the Flutter client call: final summarize = defineRemoteAction