
Who Flutter is for#
Teams shipping mobile apps to both iOS and Android
A single Flutter codebase builds separate iOS and Android binaries through each platform's standard distribution path. Business logic, state management, and most UI code are shared, while the Material and Cupertino widget libraries handle platform-appropriate visual conventions where needed.
Skip if:
The app requires deep integration with platform-specific hardware or APIs, such as a custom camera pipeline, specialized sensor access, or OS-level background processing, where maintaining Flutter platform channels would offset the single-codebase benefit.
Developers targeting mobile, web, and desktop simultaneously
Flutter builds for iOS, Android, web, Windows, macOS, and Linux from one Dart repository. Teams building productivity tools, internal apps, or consumer products that need both a mobile presence and a desktop or web client can ship all targets without splitting into separate engineering tracks.
Skip if:
The web version requires SEO-optimized server-rendered pages, DOM integration, or accessibility features that depend on web platform conventions. Flutter's CanvasKit web renderer is not a substitute for a server-rendered HTML framework where crawlability and semantic markup matter.
Startups building cross-platform MVPs
Hot reload shortens iteration cycles during early product development. The Material widget library provides a complete production-quality component set out of the box, so teams do not need to build UI primitives from scratch. A small team can ship to mobile and web without splitting engineering capacity across separate codebases.
Skip if:
The team has no prior Dart experience and faces a hard deadline. Learning Dart adds early velocity costs that a React Native team using existing JavaScript skills, or a native iOS team using Swift, would not face.
Organizations using Google Cloud and Firebase
Flutter's integrations with Firebase, Google Pay, Google Maps, Google Ads, and Google Wallet are first-party and maintained by Google alongside each SDK release. Teams whose backend already runs on Firebase or Google Cloud get the most out of these officially supported connectors, which are more reliably updated than community-maintained equivalents.
Skip if:
Your backend runs on AWS, Azure, or another cloud stack without Google services. Flutter works with any backend over HTTP, but you will use community-maintained packages rather than first-party connectors for most non-Google cloud integrations.
The problem it solves#
Building apps for multiple platforms historically means separate codebases for iOS and Android, plus additional projects for web and desktop. A team maintaining parallel mobile projects pays in duplicated effort: separate code reviews, separate test suites, separate bug fixes, and separate release pipelines for what is often the same product logic with a different UI skin.
Cross-platform frameworks that reduce this duplication often introduce their own costs. JavaScript-bridge architectures add indirection that can hurt rendering performance, particularly for animation-heavy or scroll-intensive interfaces. Platform-specific APIs then require native modules that fall outside the cross-platform abstraction, creating maintenance gaps that widen as platforms evolve.
How it solves it#
Single codebase for six target platforms
Flutter targets iOS, Android, web, Windows, macOS, and Linux from one Dart codebase. For mobile and desktop targets, Dart compiles to ARM 32/64-bit or Intel x64 machine code. For web targets it compiles to JavaScript or WebAssembly. The same application logic ships to all six without platform-specific rewrites.
Stateful hot reload
Flutter's stateful hot reload injects updated Dart code into the running Dart VM and rebuilds the widget tree, so UI changes appear in under a second without resetting application state or requiring a full restart. This shortens the edit-view-test cycle that slows interface iteration in native development.
Skia and Impeller rendering engine
Flutter draws its own widget set using Skia (the same graphics engine behind Chrome and Android) and the newer Impeller renderer, rather than wrapping platform UI components. Every pixel is under Flutter's control, which makes custom animations and precise visual designs possible without being constrained by platform widget behavior.
Dart FFI and platform channel access
Flutter supports calling native platform APIs and C libraries on all six targets through Dart's foreign function interface (FFI) and Flutter's platform channels. Teams can call Swift, Kotlin, Win32, or Linux system APIs from Dart when a cross-platform abstraction does not exist, without giving up the shared Dart codebase for the rest of the application.
pub.dev package ecosystem
Flutter's package registry at pub.dev includes tens of thousands of Flutter-compatible packages covering state management, networking, authentication, maps, payments, and more. The Flutter team maintains official packages for Firebase, Google Maps, Google Ads, Google Pay, and Google Wallet, which receive updates alongside each SDK release.
Material Design and Cupertino widget libraries
Flutter ships two complete widget libraries: Material (Google's cross-platform design language) and Cupertino (Apple's iOS look and feel). Teams can match platform conventions for Android or iOS, combine elements from both, or bypass both libraries and build a fully custom design from Flutter's lower-level rendering primitives.
Strengths and trade-offs#
Strengths
- BSD-3-Clause license for commercial appsThe BSD-3-Clause license permits commercial use, modification, and redistribution without licensing fees. Flutter-built apps can be shipped as closed-source commercial products with no obligations beyond attribution, unlike frameworks under AGPL, which require distributing source changes for network-facing services.
- Native machine code performance on mobile and desktopDart compiles to ARM machine code for iOS and Android rather than running through a JavaScript VM, so Flutter apps achieve rendering performance comparable to fully native apps. The Skia and Impeller engines maintain 60fps or 120fps animation without the cross-thread bridge overhead that affects JavaScript-bridge frameworks.
- Active maintenance with frequent stable releasesThe repository receives daily commits, and stable releases ship regularly (Flutter 3.47 is the latest referenced in the official changelog). The CII Best Practices badge and SLSA Level 1 supply-chain compliance indicate process rigor beyond most open source projects of comparable scope.
- Google product adoption validates production readinessGoogle Pay is one documented Flutter production deployment. The framework's use in a high-traffic payments product by the team that maintains the SDK provides a practical signal of production stability that many open source frameworks lack.
Trade-offs
- -Dart is not a mainstream languageFlutter requires Dart. Most developers arrive without Dart experience, which adds onboarding time before a team can contribute or review code effectively. While Dart's syntax is designed to feel familiar to developers from Java, Kotlin, Swift, or TypeScript, it is a distinct language with its own idioms. This narrows the pool of developers who can join a Flutter project without prior training.
- -Flutter web has initial load overheadFlutter's CanvasKit web renderer (used by default for smooth animations) downloads a Skia binary on first page load that weighs several megabytes. This affects initial page load time compared to standard web frameworks. Text rendered in CanvasKit mode is also not directly crawlable by search engines without additional configuration, which matters for public-facing web products with SEO requirements.
- -SDK downloads from Google servers under Google ToSThe Flutter SDK automatically downloads resources from Google servers at install time and when upgrading. By downloading or using the Flutter SDK, users agree to Google's Terms of Service. Organizations with strict vendor policies or data sovereignty requirements should verify this arrangement is acceptable before adopting Flutter across their development environment.
- -Over 13,000 open issuesThe GitHub repository carries over 13,000 open issues. Many are feature requests or duplicates rather than regressions, which is common for a large project with millions of users. The higher concentration of rough edges appears in desktop and embedded targets, which are newer than the mobile target and continue to close parity gaps with each release.
Flutter vs alternatives#
Flutter vs React Native
Flutter and React Native are the two dominant cross-platform mobile frameworks, but they take different rendering approaches. React Native calls native iOS and Android UI components through a JavaScript bridge, so apps use the platform's own controls and look native by default. Flutter renders its own widget set using Skia or Impeller, giving more visual consistency across platforms but diverging from OS-native UI conventions.
| Feature | Flutter | React Native |
|---|---|---|
| Language | Dart | JavaScript / TypeScript |
| Rendering | Custom engine (Skia / Impeller) | Native platform widgets |
| Platform support | iOS, Android, web, Windows, macOS, Linux | iOS, Android, web (limited desktop) |
| License | BSD-3-Clause | MIT |
| Hot reload | Yes | Yes |
| Mobile performance | Native machine code | JavaScript bridge |
Flutter is the better choice when you need consistent visual output across all six platforms, tight control over animations, or desktop targets (Windows, macOS, Linux) in the same codebase. React Native fits better when your team has strong JavaScript or TypeScript skills and the mobile apps should closely match OS-native UI conventions.
Flutter vs Xamarin / .NET MAUI
Xamarin (now .NET MAUI under Microsoft) wraps native iOS and Android UI controls through C# bindings. It is free in Visual Studio Community, but the enterprise edition of Visual Studio carries commercial licensing costs for larger teams. Both Flutter and .NET MAUI produce native apps, but they differ in rendering model and ecosystem.
| Feature | Flutter | .NET MAUI |
|---|---|---|
| Language | Dart | C# |
| License | BSD-3-Clause | MIT (.NET MAUI) |
| Rendering | Custom engine | Platform native controls |
| Desktop targets | Windows, macOS, Linux | Windows, macOS |
| Package ecosystem | pub.dev | NuGet |
Flutter is the stronger choice for new cross-platform projects where visual consistency and the full six-platform target set matter. .NET MAUI is worth considering for enterprise teams with existing C# and .NET codebases who prefer native platform UI controls and need tight integration with the Microsoft ecosystem.
What it's built on#
- Languages
- CC++DartJavaKotlinObjective-CObjective-C++
- Frameworks
- Flutter
FAQ#
Is Flutter free to use for commercial applications?
Yes. Flutter is licensed under BSD-3-Clause, which permits commercial use, modification, and redistribution. You can build and sell Flutter-based apps without licensing fees or royalties. The only requirements are attribution in documentation and that you do not misuse Google's Flutter branding.
Does Flutter require Dart, and how hard is Dart to learn?
Flutter requires Dart. Developers familiar with Java, Kotlin, Swift, or TypeScript typically find Dart's syntax approachable because it shares static typing, class-based OOP, and async/await patterns with those languages. The primary learning curve is Flutter's widget model and state management approaches rather than Dart's language fundamentals. Most developers with prior mobile experience can build basic Flutter apps within a few days of starting with Dart.
Can Flutter build desktop apps for Windows, macOS, and Linux?
Yes. Flutter supports Windows, macOS, and Linux as stable desktop targets as of Flutter 3.x. The same Dart codebase targeting iOS and Android can also produce native desktop binaries without significant changes to shared business logic. Desktop targets are newer than mobile and some platform-specific features are still catching up, but they are considered production-stable.
How does Flutter's performance compare to native iOS and Android development?
Flutter compiles Dart to native ARM machine code for iOS and Android, so CPU-bound performance is comparable to fully native apps. Flutter uses its own rendering engine (Skia or Impeller) rather than OS-native UI widgets, which enables consistent 60fps or 120fps animations independent of platform widget behavior. The tradeoff is that Flutter apps do not use the operating system's native UI controls, so their visual appearance may differ from default platform conventions unless specifically tuned using the Cupertino widget library on iOS.
What is the difference between Flutter and React Native?
Both are cross-platform mobile frameworks but they render differently. React Native calls native iOS and Android UI components through a JavaScript bridge, so apps use actual platform UI widgets by default. Flutter renders everything through its own graphics engine (Skia or Impeller) without using native UI widgets, giving more visual control and rendering consistency across platforms but diverging from OS default UI conventions. Flutter also supports desktop targets (Windows, macOS, Linux) more completely than React Native does.
Similar open-source tools#
Madeira
Windows PC games on non-jailbroken iPhone via Wine and FEX-Emu
mobile-mcp
MCP server that gives AI agents hands on iOS and Android devices
BrewUI
Homebrew's official macOS GUI for package management
iloader
Free open-source iOS sideloader for Windows, Mac, and Linux
armorpaint
Open source 3D PBR texture painting with GPU acceleration
escrcpy
Graphical Android device mirroring and control with scrcpy

