Xamarin end of life: .NET MAUI or Flutter?
Microsoft ended support for Xamarin on 1 May 2024. Since then there have been no updates, including none for new iOS and Android versions. Existing apps keep running for now, but Apple and Google raise their requirements regularly: new SDK versions for App Store submissions, higher target API levels on Google Play. Sooner or later, a Xamarin app can therefore no longer be updated. Anyone who wants to keep developing it has to migrate.
The two obvious paths
.NET MAUI is the official successor. The team stays with C# and .NET, and shared business logic and many libraries can be reused. Xamarin.Forms apps have the shortest path, but work is needed here too, for example for renderers, which MAUI replaces with handlers, and for third-party libraries that haven’t made the move.
Flutter means rebuilding the app’s user interface in Dart. The backend stays as it is: the app keeps talking to the same APIs.
Criteria for the decision
- Team: who will develop the app going forward? A pure C# team gets moving faster with MAUI. Dart is similar to C# in many ways, and Flutter developers are readily available on the market.
- Share of shared C# logic: if a lot of business logic lives in the app itself, that favours MAUI. If it lives in the backend, this advantage disappears.
- Demands on the interface: Flutter draws its interface itself and looks the same on iOS and Android. Elaborate, brand-specific designs are usually easier to build with it.
- Web as a target: Flutter can also deliver the same codebase in the browser.
- Native integrations: both paths give access to platform APIs. What matters is whether maintained packages exist for the features you need.
In practice, Flutter usually wins on UI ambition, team availability and web targets, MAUI when a lot of C# code lives in the app and the team wants to stay with .NET. The .NET backend stays untouched either way.
How a migration to Flutter works
- Inventory: screens, flows, APIs, sign-in, push notifications, native features.
- Pin down the API contracts: if there’s an OpenAPI description, the Dart client can be generated from it. The DTOs stay the same.
- Cross-cutting concerns first: sign-in, error handling, offline behaviour, push.
- Build the screens in functional blocks and check each against the existing app.
- Plan the release: the new app replaces the old one under the same bundle ID or package name and signing key. That way, users get a normal update.
Support
I’ve built Xamarin apps and .NET backends on Azure myself, and I migrate Xamarin apps to Flutter. In the first call I’ll also tell you when MAUI is the better choice. Book a call or get in touch.