🎨 Deep Dive · Intermediate

Impeller is now the default desktop renderer — what actually changes

Mobile Impeller defaults landed earlier. Flutter 3.47 finishes the job on macOS, Windows, and Linux. Desktop apps now target Metal (macOS) and Vulkan (Windows/Linux) with a fixed shader set compiled at engine-build time.

Diagram: Impeller Default on Desktop

What you gain

  • No shader-compilation jank on first run of an animation.
  • Signed Distance Function text — sharper glyphs on lower-density desktop displays.
  • Wide Gamut Color on by default on macOS where hardware supports it.

Temporary Skia opt-outs

If a regression blocks you:

PlatformOpt-out
macOSFLTEnableImpeller=false in Info.plist
Windowsproject.set_impeller_switch(flutter::ImpellerSwitch::Disabled) in main.cpp
Linuxfl_dart_project_set_enable_impeller(project, FALSE) in my_application.cc

File a bug. Fallbacks are scheduled for removal.

What to retest

  1. Custom FragmentShaders and saveLayer-heavy effects.
  2. Platform views and external textures.
  3. Print/export paths that assumed Skia color management.

Profile mode first. If a frame is still long, the split is still UI vs raster — Impeller moved work off the shader compile path, not off your build() method.

#Flutter#Impeller#Desktop#Rendering#Performance