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:

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.

On this page