Flutter add-to-app guidelines
LeanCode's tooling and guidelines for adding Flutter to enterprise native apps - the Inlay framework, plus architectural patterns gathered across many production projects.
This is the home for LeanCode's add-to-app toolkit: the Inlay framework and our add-to-app guidelines for enterprises. Both are based on what we have learned running production migrations as one of the world's top Flutter consulting agencies.
The content is split into three tiers - from deciding whether to migrate at all, down to wiring up individual screens. Start with the tier that matches the decision in front of you. The advice is framework-agnostic, so even if you don't plan to use Inlay, the patterns still apply directly.
Where to start
New to add-to-app? Follow Getting started through the guidelines in order. Otherwise, jump to the tier that matches your role:
Strategic
For decision makers and C-level. Why add-to-app, when it makes sense, how to plan the migration, how to organize the team, and how to plan the exit.
Architecture
For senior and staff engineers, architects. Flutter engines, isolates, platform channels, the native-Flutter boundary, and how to set the project up so it scales.
Inlay
For hands-on developers and AI agents. The Inlay framework itself - navigation, state management, and the day-to-day patterns we use in production.
What is Inlay?
Inlay is the opinionated Flutter add-to-app framework we built after running into the same problems on every enterprise add-to-app engagement. It gives you:
- Type-safe navigation between native and Flutter screens in both directions, with code-generated route classes for Dart, Swift, and Kotlin
- Cross-platform state sharing through a key-value storage layer synchronized across all Flutter engines and native code
- Automatic engine management built on
FlutterEngineGroup- you never create or dispose engines directly - Dialogs and bottom sheets rendered by Flutter and presented over native screens
- Multiple routing integrations - it works with go_router, auto_route, or plain pattern matching over the generated sealed routes
Inlay is designed to map cleanly onto the patterns you would use in a pure Flutter app. Therefore, when you are ready to drop the native shell and ship a standalone Flutter app, getting off the framework is straightforward.
Most of the guidance in these docs applies to any add-to-app project, with or without Inlay. We've tried to keep the framework-specific bits clearly marked.