Published August 13, 2026

Flutter 3.47.0 Stable Arrives: Impeller Becomes Default on Windows and Linux

The Flutter team has shipped Flutter 3.47.0 to the stable channel, marking the first major framework release since the 3.44 line debuted at Google I/O. The new stable release, which landed on August 12, 2026, bundles Dart 3.13.0 and delivers a long list of rendering, toolchain, and desktop platform improvements. For developers, the headline is clear: Impeller is now the default rendering engine on Windows and Linux, completing the migration that began on Android and iOS in earlier releases.

Impeller Goes Default on Windows and Linux

The most significant change in Flutter 3.47.0 is the promotion of Impeller to the default renderer on Windows and Linux desktop. The engine team merged the final pieces of the Windows Impeller rollout in the weeks leading up to the release, including a switch to OpenGLES SDF rendering, glyph atlas support for light and dark mode separation, and fixes for the black screen issue on the OpenGL fallback path. Linux received a parallel set of changes, with gamma correction for text rendering and a reworked compositor that moves the stretch fragment shader into the widget layer.

The shift to Impeller on desktop has been in progress for several release cycles, with the renderer available behind feature flags since 2025. With 3.47.0, the flags flip by default and the Skia software path becomes a fallback rather than the primary rendering strategy. Early performance reports from the beta channel showed meaningful gains in text rendering and shader-heavy workloads, particularly on machines with integrated GPUs.

Developers who relied on Skia-specific behavior in their custom shaders or who embedded Flutter into existing desktop applications using the old engine hooks should review the breaking changes page before upgrading. Most applications will render identically or better, but the Impeller GLES backend still has a handful of known differences in how complex blend modes are resolved.

Android, Desktop, and Web Get New Capabilities

On Android, Flutter 3.47.0 updates the project templates to AGP 9 and enables Built-in Kotlin support by default in new projects. The move simplifies Gradle configuration considerably, removing the need for a separate Kotlin Gradle plugin declaration in most cases. The tooling now warns when projects use AGP versions below 9 and provides clearer guidance for the migration, while a custom Kotlin Gradle plugin task keeps version detection working across the old and new DSLs.

The Android template updates also touch the application manifest pipeline. Deep link handling moves to a cacheable Gradle task, and the tool now falls back to the source AndroidManifest.xml when AAPT fails, reducing cryptic build failures. The release includes a batch of Android stability fixes as well, from a Gboard text shift correction to more robust handling of vendor-modified ROMs in the accessibility bridge.

Flutter 3.47.0 bumps the embedding to support Android 17, provisions the NDK during the main Gradle invocation, and adds version code overrides for split ABIs so release automation can target per-architecture outputs with distinct version codes. The JNI layer received out-of-bounds fixes in the std::vector paths used by the Android embedding, and sync fences for image textures are now closed immediately after waiting, preventing a class of GPU resource leaks.

  • AGP 9+ project templates with Built-in Kotlin enabled in new apps
  • High contrast and color inversion support on Android for accessibility
  • Version code overrides for split ABIs and preprovisioned NDKs for flavored builds
  • A fix for the Gboard text shift issue that affected text fields on some devices

Desktop developers will find two long-requested additions in this release. First, the --flavor flag now works for Windows and Linux builds, matching the behavior already available on Android and iOS so teams can manage environment-specific assets and configurations in one place. Second, popup windows are now implemented on both Win32 and Linux, with the windowing API updated to expose platform-specific handles and to support sized-to-content regular and dialog windows.

The macOS minimum supported version has been raised from 10.15 to 12 in Flutter 3.47.0 to accommodate Xcode 27. The bump unlocks newer APIs and removes the compatibility layers that were holding back rendering and lifecycle work on Apple platforms. The tooling also gained a fix for the Xcode 27 lipo verification failure that affected Darwin framework builds, plus a switch to the DeviceHub app for simulator paths on Xcode 27 and later.

Web receives a font fallback service that improves text rendering when custom fonts are missing glyphs, initial support for Cross-Origin Storage, and a bundled Roboto fallback for no-CDN builds. The web engine continues its steady march toward Wasm-first, with image decoding throttling for HTML images, stepped downscaling for CanvasKit and Skwasm, and removal of the old dynamic module loading code.

Dart 3.13.0 and What Comes Next

Flutter 3.47.0 ships with Dart 3.13.0, which brings primary constructors to the language, generics for JSFunction and JSExportedDartFunction in the js_interop libraries, new synchronous isolate APIs, and additions to the core libraries such as Future.pause and the unmodifiableOf constructors. The analyzer gains LSP support for inline values and new lint rules that replace the older strict analysis options. The language changes in 3.13 are deliberately incremental, so most codebases will compile without modification.

With the stable release out the door, the team has already cut the first beta of Flutter 3.48, which tracks Dart 3.14.0. The beta channel will carry the next round of web and Impeller work while the stable channel settles into its quarterly maintenance cadence. For most teams, the upgrade path to 3.47.0 is straightforward: run flutter upgrade on the stable channel, rebuild, and verify any custom shader or platform embedding code against the new Impeller defaults.

Flutter 3.47.0 represents a consolidation release in the best sense. It finishes the desktop rendering migration that has been underway for over a year, modernizes the Android toolchain for the AGP 9 era, and broadens desktop and web feature parity. The combination of Impeller everywhere and a leaner Gradle setup gives teams fewer moving parts to reason about as they scale across platforms.