Written by Denys Havryliak
Swift vs Flutter: RAM, CPU and What the Measurements Actually Say
Flutter compiles to native ARM and peer-reviewed testing found it the lightest cross-platform framework — but it still ships an engine. The sourced numbers, and where the gap is real.

The short version
- Flutter is close to native on speed. Its code is compiled ahead of time, so your logic runs as machine code. In the most rigorous independent study we found, Flutter added the least overhead of any cross-platform framework tested
- On memory it is not close. One scroll through a list added 9.74 MB in Swift against 25.33 MB in Flutter — about 62% less. That is one test of three runs, and it measures growth rather than total use
- The gap is structural. Flutter carries its own engine in memory the whole time and needs spare room to clean up after itself. Swift frees memory the moment it stops being used
- A minimal Flutter app is a 10.9 MB download before you write a line of code, about 4 MB of it engine
- Flutter's weak spot is ceilings, not speed. Home-screen widgets run under a limit too small for a bundled engine, so your widgets are Swift either way
- Memory decides whether your app survives a session. iPhones do not slow a heavy app down, they shut it down — and your customer sees an empty basket rather than a crash
- One number tells you nothing without the workload. Flutter's own processor use doubled between scrolling a list and running a camera, in the same study
We ship both native Swift and Flutter. So this compares trade-offs we maintain in production. It does not make a case for one of them.
Is Flutter as efficient as native Swift?
On CPU, close enough that most apps will never notice — Dart compiles to native ARM ahead of time, and peer-reviewed testing found Flutter the lightest of the cross-platform frameworks. On memory, no: Flutter carries a resident engine and a garbage-collected heap, where Swift's reference counting frees memory the instant it stops being used, with no headroom.
Below is every figure we could find with a stated device, framework version and measurement tool. We also note which widely-quoted numbers do not have those, and are therefore not used here.
One definition first, because it gets blurred. By "native Swift" we mean Swift with UIKit or SwiftUI. Those two are not identical on footprint either. But both sit under ARC, and neither ships a second runtime. That second runtime is what this comparison turns on.
What does that memory number actually cost you?
An iPhone does not slow an app down when memory runs short — it shuts the app down, heaviest app first. Your customer does not see a crash. They switch to another app for twenty seconds, come back, and find an empty basket and a login screen. It is the least understood cost of a heavier app, and it never appears in your crash reports.
We wrote that up separately, with the widget ceiling that stops some features being buildable at all: Why iPhones shut down heavy apps first.
Every number we could verify, in one table
Four things people ask about — memory, processor use, download size, and how quickly the app opens. Here is what has actually been measured for each, and what has not.
Read the right-hand column before using any row. And read the rows that say nobody has published this, because there are more of them than anyone selling you a framework will admit.
| What was measured | Native Swift | Flutter | Who measured it, and on what |
|---|---|---|---|
| Memory — the one question with a real answer | |||
| Extra memory the app took while scrolling a long list | 9.74 MB | 25.33 MB | SynergyBoat, August 2025. The same app built both ways, iPhone 16 Plus, three runs each |
| The same figure, next to Swift | the baseline | 2.6× more | Worked out from the row above — Swift used about 62% less memory |
| How much the result moved between runs | ± 0.18 | ± 0.47 | Same test. Both are steady, which is why this comparison is worth quoting at all |
| Memory against a native app, on Android | no Swift on Android | middle of the frameworks tested | Oliveira and colleagues, 2023, the one peer-reviewed study here. Android, and the native app compared against was Java. A direction, not an iPhone number |
| Older iPhone figures still quoted today | 48 MB | 117 MB | inVerita, June 2020, iPhone 6s — measured before Flutter replaced its entire renderer. Listed so you recognise it when quoted as current |
| Processor use — no iPhone test includes Swift | |||
| iPhone, same app, both ways | nobody has published this | nobody has published this | We looked hard and found none |
| Flutter measured against itself, on iPhone | not included | 9.33% on an iPhone 16 Pro, 13.72% on an iPhone 11 | Flutter's own live dashboard. Useful for tracking Flutter over time, but there is no Swift app in it, and it is counted in a way that will not line up with a figure you measure yourself |
| Download size — what your customer waits for | |||
| A bare-bones app, as downloaded on iPhone | nobody has published this | 10.9 MB | Flutter's own FAQ, measured March 2021 on an empty app. Apple publishes no matching Swift figure, so this has nothing fair to sit beside |
| Machinery the app carries just to run | none — it uses what is already on the phone | about 4 MB of engine | Flutter's FAQ. This is the structural difference: Flutter brings its own renderer, Swift borrows the system's |
| How fast the app opens — measured, but never published | |||
| Cold start on iPhone, same app | nobody has published this | nobody has published this | Flutter's team runs a Swift-versus-Flutter opening-speed test in its own build system but publishes no figures. One open-source project does publish opening speed against a real Swift app — we have not re-run it, so we do not quote its numbers here |
Every row is sourced in Sources, with exact hardware, versions and tools. The rows saying nobody has published this are the finding, not a gap we failed to fill.
Should you choose Swift or Flutter?
Efficiency is one input, and rarely the deciding one. The honest trade-off: native Swift wins the measurement, and native costs more the moment you need Android too — because there is no second platform included in the price.
| If this is your situation | Build this | Why | What it costs you |
|---|---|---|---|
| iPhone only, no Android planned | Native Swift | Lightest of the two by a factor of 2.6, every Apple feature on day one, nothing extra in the download | Nothing extra. With one platform, native is also the cheaper option — one codebase and no framework layer between you and the bugs |
| Both platforms, and efficiency is the product — background audio, camera, maps, on-device AI, or customers on older phones | Native on both | This is where the memory gap stops being a statistic and starts shutting your app down mid-session | The expensive answer, honestly. Two codebases: every screen built twice. Design, backend, product and testing are not duplicated, so it is well short of paying twice — but the app layer genuinely is |
| Both platforms, ordinary content, booking or shop app, budget is binding | Flutter | One team covering both platforms is a real saving, and for an app that shows lists and forms the memory gap may never reach your customers | A heavier app. Budget to test on the oldest phone you support, not the newest — that is where it shows |
| One custom design system, identical on both platforms, animation-heavy | Flutter | Flutter draws every pixel itself, so a bespoke design looks the same everywhere instead of fighting two sets of native components | About 2.6× the memory growth — the price of bringing your own renderer |
| Widgets or Live Activities matter to the product | Swift, whatever else you choose | These run under a ceiling too low for a bundled engine to fit inside | Not really a choice. Plan for Swift on the team from the start rather than finding out late |
Pick native Swift when the product is iOS-first. Pick it when widgets, Live Activities or extensions carry real weight. Pick it when you need day-one support for new Apple frameworks. Pick it when your users are on older, low-RAM hardware.
Pick Flutter when you need one design system rendered identically on iOS and Android, when the interface is custom-drawn and animation-dense, and when a single codebase with AOT-compiled logic is worth an engine-sized baseline. On CPU you are giving up very little: the EASE data says so, and it is the most rigorous data available.
For the three-way version of this comparison, see Native Swift vs Flutter vs React Native. For the other head-to-head, see Swift vs React Native. And for why the memory gap decides whether your app survives a session, see Why iPhones shut down heavy apps first. If you would rather have the answer for one specific product, talk to us. We build in both and have nothing to sell you on the choice.
Sources
Every figure above comes from one of these. Each entry states the conditions that make it citable: device, versions, tool, sample size. A number without them is not evidence.
The measurements
- SynergyBoat — “Flutter vs React Native vs Native: 2025 Performance Benchmark” (31 August 2025)The ΔMemory figures. iPhone 16 Plus, N=3, RSS growth over a 100-item scroll. Vendor-published. We use its memory arm only; its frame-time comparison measures different quantities against one budget.
- Oliveira, Moraes, Castor & Fernandes — “Analyzing the Resource Usage Overhead of Mobile App Development Frameworks” (EASE 2023)Peer-reviewed. Samsung Galaxy S20 FE, Android 12,
adb batterystats+meminfo, 45 runs per benchmark with the first 15 discarded. Flutter 3.0.3 (Skia), React Native 0.68.2 (Hermes disabled), against native Java. No iOS, no Swift. Open-access PDF via Utrecht University; DOI 10.1145/3593434.3593487. - Tollin & Lidekrans — “React Native vs. Flutter: A performance comparison” (Linköping University, 2023)Android only. Flutter 3.10.0 vs React Native 0.71.6,
adb shell top, five 30-second runs. No Swift arm. Its discussion section explains the camera-test gap that most citations of it omit. - Flutter DeviceLab performance dashboardLive, per-commit RAM and CPU from real iPhone 11 and iPhone 16 Pro hardware. Flutter only. CPU is an all-core percentage, not the Xcode Instruments convention. Linked from Flutter’s performance metrics docs.
- Flutter 3.22 release notes (14 May 2024)First-party, device-named: blur CPU and GPU time “nearly half” on an iPhone 11; Lottie raster 64 ms/frame to “nearly 10x faster”; iOS platform-view GPU usage down 50%.
First-party documentation
- Apple — “iOS Memory Deep Dive”, WWDC18 session 416Defines an app’s memory footprint as dirty + compressed pages, counted in 16 KB pages. States the footprint limit is device-dependent and never publishes a number.
- Apple — “Profile and optimize your game’s memory”, WWDC22 session 10106Source for the claim that on Apple silicon, accessed Metal resources count as dirty memory because CPU and GPU share one pool.
- Apple — “Identifying high-memory use with jetsam event reports”The worked example we quote: 92,802 pages × 16,384 bytes = 1.52 GB in use at a
per-process-limittermination. That is usage at death, not a published ceiling. - Apple Developer Forums —
EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=30 MB)Developer-reported WidgetKit crash logs, not an Apple specification. The source for the ~30 MB widget ceiling. - Flutter FAQ — “How big is the Flutter engine?”The minimal-app sizes: ~4.8 MB ARM64 Android download, 10.9 MB iOS download, ~4 MB of it engine. Measured March 2021, no Material Components,
--split-per-abi. - Flutter — Impeller rendering engineConfirms Impeller is the only renderer on iOS and precompiles shaders at build time.
- Flutter — “Don’t Fear the Garbage Collector” (Matt Sullivan, 2019)The generational GC description: young-space scavenger, parallel mark-sweep, engine idle hooks.
Open source you can run yourself
- SynergyBoat benchmark sourceAll four implementations — Swift, Flutter, React Native, Kotlin — with the instrumentation. Clone and re-run it.
- EASE 2023 replication packageEvery raw
adbdump behind the paper. Re-runnable. - jacobras/flutter-vs-native-vs-kmpOne app in four stacks including a native Swift/SwiftUI baseline. Publishes app size and startup only — no RAM or CPU. Archived August 2026.
- flutter/flutter —
imitation_game_swiftuiandimitation_game_flutterFlutter’s own SwiftUI-versus-Flutter comparison, running in iOS CI. Measures compile time, size and time-to-first-frame. No RAM or CPU, and it publishes no figures.
Sources we checked and did not use
- inVerita — “Deep Performance Comparison” (June 2020)The origin of the “48 MB / 117 MB / 135 MB” figures. iPhone 6s and a 2014 iPad Mini 3, before Hermes, Impeller and the New Architecture. Linked so the claim is checkable, not as a recommendation.
- inVerita — “Examining Performance” (March 2020)The pi-digit microbenchmarks behind “Flutter is 15% faster than Swift”. Measures arithmetic in a loop, on an iPhone 6s.
- Biørn-Hansen, Rieger, Grønli, Majchrzak & Ghinea — “An empirical investigation of performance overhead in cross-platform mobile development frameworks” (Empirical Software Engineering, 2020)One of several earlier peer-reviewed native-baseline studies. Cited here because it disproves any claim that EASE 2023 is the only one.
Related articles
- Why iPhones Shut Down Heavy Apps FirstDevelopment
- Swift vs React Native: RAM, CPU and the Cost of Two RuntimesDevelopment
- Native Swift vs Flutter vs React Native: RAM, CPU and Real EfficiencyDevelopment
