8 parts · 9 chapters
Flutter and Mobile Internals
How a cross-platform app actually draws a frame, runs code off the UI thread, and ships to millions of phones. Measured with Dart 3.11 (Flutter 3.41.4) on a laptop: decoding a 791 KB, 5,000-transaction JSON payload took 6 to 7 ms in AOT mode, already 40% of a 16.7 ms frame on fast hardware, while an Isolate.run round trip cost 0.04 to 0.3 ms.
Eight parts: Flutter's engine and rendering pipeline (Impeller); the widget, element and render trees; Dart, its event loop and isolates; platform channels and FFI; React Native's new architecture (JSI, Fabric, TurboModules) for comparison; mobile performance on low-end Android devices; offline-first data and sync; and store releases, staged rollouts and over-the-air updates.
engineDart framework on a C++ engine that draws every pixel itself.
treesWidgets are cheap descriptions; elements and render objects persist.
isolatesSeparate heaps, message passing, jank-free parsing.
nativeChannels, Pigeon and FFI to reach platform APIs.
performanceFrame budgets, startup, app size on low-end phones.
shippingReview, staged rollouts, crash-free rate, forced updates.
00
Flutter's Engine and Rendering
Framework, engine, embedder · The frame pipeline
2 ch · ~12 min01Widget, Element and Render Trees
Three trees in code
1 ch · ~8 min02Dart and Isolates
Measured: keep heavy work off the UI isolate
1 ch · ~8 min03Platform Channels
Talking to the platform
1 ch · ~8 min04React Native's New Architecture
Old bridge, new architecture, and Flutter
1 ch · ~8 min05Mobile Performance
Measure on the right device
1 ch · ~8 min06Offline and Sync
A device outbox
1 ch · ~8 min07Store Releases and Staged Rollouts
Shipping safely to devices you do not control
1 ch · ~8 minBuilt on Browser and React coursesThe mobile counterpart of the Browser and React internals courses; uses Concurrency for isolates and Workflows for sync queues.