Impeller is Flutter's newer rendering engine, built to replace Skia. It precompiles shaders ahead of time instead of compiling them on first use, which eliminates the shader compilation jank that caused visible frame hitches in Skia-based Flutter apps, especially on iOS.
The Problem Impeller Solves
Skia, Flutter's original rendering backend, compiled shaders lazily — the first time a particular visual effect (a blur, a gradient, a shadow) appeared on screen, Skia would compile the shader for it right then, on the UI thread. That compilation could take long enough to drop frames, producing a visible stutter the first time (and only the first time) an animation or effect appeared. This was especially noticeable on iOS, where Metal shader compilation is comparatively expensive.
How Impeller Fixes It
Impeller precompiles a fixed, known set of shaders at build time instead of compiling on demand at runtime. Because the shaders Flutter's rendering system can need are largely predictable, Impeller ships them precompiled, so the runtime cost of a new visual effect appearing is just using an already-compiled shader rather than compiling one on the spot. The tradeoff is a more constrained rendering model in exchange for consistent, predictable frame timing.
FAQ
Is Impeller enabled by default in Flutter?
Impeller has been the default rendering backend on iOS for a while, with Android support following. Check the specific Flutter version's release notes since default status has changed across versions.
Does Impeller change how I write Flutter widget code?
No - Impeller is a rendering backend swap under the hood. Your widget and layout code doesn't change; what changes is how that code gets turned into pixels on screen.