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.
| Aspect | Skia | Impeller |
|---|---|---|
| Shader compilation | At runtime (causes jank) | At build time (no jank) |
| API | OpenGL/Vulkan/Metal (abstracted) | Metal (iOS), Vulkan (Android) |
| Status (2025) | Legacy, being phased out | Default on iOS & Android |
| First-frame performance | May hitch on complex scenes | Smooth 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.