Impeller Renderer Completes Its Android Journey: What It Means for Flutter Performance
Flutter's Impeller renderer has reached full completion on Android. Learn about the performance gains, Skia removal, and what's next for desktop.
Published on • September 17, 2026
AI Assistant

After years of development, testing, and gradual rollout, Flutter’s Impeller rendering engine has reached a milestone that fundamentally changes the framework’s performance profile on Android. The migration is complete. Skia, the graphics library that powered Flutter since its inception, is being removed from the Android build. In its place, Impeller delivers a rendering pipeline designed from the ground up for predictable, smooth performance on mobile devices.
Why Impeller Exists
To understand why this matters, you need to understand the problem Impeller was built to solve. Skia is an incredibly capable 2D graphics library, and it powered Flutter’s early success. But Skia was designed as a general-purpose renderer, not optimized for the specific way Flutter draws its widget trees. More critically, Skia compiles shaders at runtime. When a Flutter app draws a new visual effect for the first time, Skia generates the GPU shader code on the spot. This causes jank, those visible stutters and frame drops that users notice immediately.
The classic example is a scrolling list with a custom shadow effect. The first time a shadow appears, the shader compiles, the frame drops, and the user sees a stutter. Subsequent frames are smooth, but that first impression matters. For a framework built on the promise of silky smooth 60 and 120fps rendering, runtime shader compilation is an unacceptable compromise.
Impeller eliminates this problem entirely by compiling all shaders at build time. Every shader your app could possibly need is precompiled and bundled with the APK. There is nothing to compile at runtime. Every frame renders at full speed from the very first pixel.
The Android Migration
The journey to full Impeller support on Android has been methodical. Flutter first introduced Impeller on iOS, where it became the default renderer and demonstrated the performance benefits in production. The Android migration followed, starting with experimental support and gradually expanding device and API coverage.
With the completion of this migration, Impeller is now the default and only renderer on Android devices running Android 10 and above. The legacy Skia backend is being removed from the Android build entirely. This is not a deprecation. It is a clean break. New Flutter projects targeting Android get Impeller by default, and existing projects that upgrade to the latest Flutter version will transition automatically.
The removal of Skia from Android has practical implications for app size. Without the Skia library, Android APKs are smaller. The Impeller engine is more focused and efficient in its binary footprint. For developers concerned about download sizes and install times, this is a meaningful improvement.
Performance Gains
The performance improvements from Impeller on Android are substantial and measurable. Frame rendering times are more consistent, with significantly reduced variance between frames. The elimination of shader compilation jank means that even the most complex visual effects render smoothly from the moment they appear on screen.
Impeller targets 120fps native performance on capable devices. While Skia could achieve high frame rates in many scenarios, its runtime shader compilation meant that peak performance was inconsistent. Impeller delivers consistent high frame rates because the GPU work is predictable and preplanned.
Vulkan support has also improved substantially. Impeller leverages Vulkan’s modern GPU API on Android devices that support it, providing better access to GPU features and more efficient command submission. On older devices that only support OpenGL ES, Impeller falls back gracefully while still delivering the benefits of precompiled shaders.
Hybrid Composition++ and Platform Views
One area where Impeller’s Android completion has particular significance is platform view integration. Flutter’s Hybrid Composition system allows developers to embed native Android views inside Flutter layouts. This is essential for maps, web views, ads, and other native components.
The new Hybrid Composition++ (HCPP) system, built on top of Impeller’s rendering pipeline, dramatically improves the performance of these platform views. Previous implementations suffered from additional compositing overhead and synchronization issues. HCPP streamlines the interaction between Flutter’s rendering engine and native Android views, reducing latency and improving visual consistency.
For developers building apps that mix Flutter UI with native components, HCPP means fewer compromises. Maps scroll more smoothly alongside Flutter content. Web views integrate more naturally. The boundary between Flutter and native becomes less visible to users.
Desktop Implications
Impeller’s Android completion also has implications for Flutter’s desktop platforms. With the Android migration finished, the Flutter team has turned its full attention to desktop. Impeller is now the default renderer on macOS, Windows, and Linux as of Flutter 3.47.
Desktop platforms present different challenges than mobile. Larger screens mean more pixels to render. Different GPU architectures require different optimization strategies. Window resizing creates dynamic rendering demands that mobile apps rarely face. Impeller’s architecture, designed for predictability and control, handles these challenges more gracefully than Skia’s general-purpose approach.
On desktop, Impeller’s precompiled shader approach is especially valuable. Desktop users expect professional-grade performance. Frame drops in a desktop application feel more jarring than on mobile, where users are accustomed to occasional hitches. Impeller ensures that Flutter desktop apps meet the performance expectations of professional software.
Predictable Performance
The philosophical core of Impeller is predictable performance. Traditional rendering engines optimize for average performance, accepting that some frames will be faster than others. Impeller optimizes for worst-case performance. Every frame should render within the same time budget, regardless of visual complexity.
This predictability matters for user experience in ways that are hard to measure with benchmarks. Users do not perceive average frame rates. They perceive stutters, hitches, and inconsistencies. A app that renders at 60fps with occasional drops to 30fps feels worse than an app that renders at a consistent 45fps. Impeller’s architecture ensures that the floor is as close to the ceiling as possible.
For developers, predictable performance simplifies optimization work. Instead of hunting for shader compilation hotspots and adding pre-warming logic, developers can trust that Impeller handles GPU scheduling efficiently. The mental overhead of performance optimization decreases, freeing developers to focus on features and design.
What Comes Next
The completion of Impeller on Android marks the end of a major chapter in Flutter’s evolution. The framework has successfully replaced its foundational rendering layer without breaking existing apps or requiring developer intervention. Most developers will notice the improvement simply by updating their Flutter version.
The remaining work focuses on desktop platforms, where Impeller continues to mature. Edge cases are being identified and resolved. Platform-specific optimizations are being refined. The goal is the same as on Android: consistent, predictable performance across all supported devices.
For the Flutter community, Impeller’s completion on Android validates the framework’s commitment to performance. The years of development, the careful migration strategy, and the willingness to replace a working system with something better demonstrate a maturity that benefits every developer building with Flutter. The rendering engine is no longer a source of uncertainty. It is a foundation you can trust.