D
Flutter CoreAdvanced50 XP5 min read

What is Impeller and how does it differ from Skia?

TL;DR: Impeller is Flutter's new rendering engine that pre-compiles shaders at build time, eliminating shader compilation jank. Skia compiles shaders at runtime on first use, causing hitches. Impeller is now default on iOS and Android.

Full Answer

The infamous 'shader compilation jank' in Flutter occurred because Skia compiles Metal/Vulkan shaders the first time it needs them, causing a visible hitch (often 100–200ms). Impeller solves this by compiling a known, finite set of shaders at build time.

AspectSkiaImpeller
Shader compilationAt runtime (causes jank)At build time (no jank)
APIOpenGL/Vulkan/Metal (abstracted)Metal (iOS), Vulkan (Android)
Status (2025)Legacy, being phased outDefault on iOS & Android
First-frame performanceMay hitch on complex scenesSmooth from frame one
💡

As of Flutter 3.16+, Impeller is the default renderer on iOS. Android stabilization continues. You can opt out with --no-enable-impeller flag for debugging.

Interview Tip

💡

The key benefit: Impeller trades a slightly larger binary size (pre-compiled shaders) for guaranteed smooth first-frame performance. This is a critical differentiator for production apps.

#impeller#skia#rendering#shader#performance