What's New in Flutter 3.47

gumby2711 pts0 comments

What’s new in Flutter 3.47 | The Flutter Blog

search

Get started

menu

What’s new in Flutter 3.47

Modular by design: Standalone UI Packages and Impeller on Desktop

Emma Twersky

Aug 12, 2026 · 12 min read

rss_feed

share

content_copyCopy link

Share on X

Share on Bluesky

Share on LinkedIn

What's new in Flutter 3.47

Flutter 3.47 is here, and with it, we’ve got some exciting new updates.

Today, we welcome the 1.0 release of the standalone<br>material_ui and<br>cupertino_ui packages.<br>This is a major milestone that decouples design systems from the core SDK.

We’re also boosting performance and tooling across the board.<br>This release brings Impeller to desktop by default,<br>prepares our pipelines for iOS, macOS, and Xcode 27,<br>and graduates Flutter Widget Previews to stable.

So, run flutter upgrade in your terminal to get started,<br>or read on to learn more about the major changes in this release.

Choose your own UI adventure

The first step toward a decoupled Flutter is here:<br>Material and Cupertino are now available as standalone packages!

One of Flutter’s greatest strengths is its ability<br>to render pixel-perfect Material and Cupertino widgets.<br>However, because these design libraries<br>were historically bundled directly inside the core SDK,<br>it slowed down their development and made it harder to contribute<br>or keep them up to date.

While the core SDK still includes these libraries for this release,<br>you can now opt-in to the standalone material_ui and cupertino_ui<br>packages,<br>which have officially reached version 1.0 on pub.dev.

Decoupling design roadmaps (Opt-in)

By opting into the decoupled design systems,<br>you gain control over your design roadmap. Because material_ui<br>and cupertino_ui now live on pub.dev,<br>they can ship bug fixes and new components on their own weekly schedules,<br>independent of the quarterly Flutter SDK releases.

Decoupling the design systems gives us the following benefits:

You can use the latest Cupertino and Material widget styles<br>without being forced to upgrade your entire Flutter SDK version.

We can land contributions and updates faster and more frequently.

We lay the groundwork for a style-neutral Flutter core widget catalog,<br>making it easier to build custom design systems in the future.

How to migrate

To migrate your project to the new standalone packages,<br>run the following command:

bash<br>dart fix --apply --code=migrate_design_widgets

content_copy

This tool automatically updates your imports<br>from package:flutter/material.dart and package:flutter/cupertino.dart

to the new standalone packages.

Note: If the migration tool encounters issues updating your pubspec.yaml

(a known early bug), you can resolve it<br>by manually running flutter pub add material_ui<br>(and cupertino_ui if you use it), then running dart fix --apply<br>once more.

The original design libraries inside the core SDK<br>are scheduled for formal deprecation in the upcoming Fall stable release<br>in November. If you are migrating a package in the ecosystem,<br>treat this move to the standalone packages as a major release.

Bridging the migration gap

To facilitate bridging the gap as the ecosystem migrates<br>to the new standalone design libraries,<br>material_ui and cupertino_ui ship with migration utilities.<br>The MaterialUiCompatibilityBridge allows your application to migrate<br>to the standalone packages immediately,<br>even if some of your package dependencies<br>are still using legacy core SDK imports.

For example, you can wrap your app in the compatibility bridge:

dart<br>import 'package:material_ui/material_ui.dart';<br>void main() {<br>runApp(const MyApp());<br>class MyApp extends StatelessWidget {<br>const MyApp({super.key});<br>@override<br>Widget build(BuildContext context) {<br>return MaterialApp(<br>theme: ThemeData(<br>colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF6750A4)),<br>),<br>builder: (BuildContext context, Widget? child) {<br>return MaterialUiCompatibilityBridge(child: child!);<br>},<br>home: const HomeScreen(),<br>);

content_copy

Decoupled localizations

As part of this transition, flutter_localizations has also been unbundled.<br>Localization delegates and translated strings for Material<br>and Cupertino widgets now reside inside package:material_ui<br>and package:cupertino_ui respectively.

Before:

dart<br>import 'package:flutter_localizations/flutter_localizations.dart';<br>import 'package:flutter/material.dart';<br>// ...<br>localizationsDelegates: const LocalizationsDelegatedynamic>>[<br>GlobalCupertinoLocalizations.delegate,<br>GlobalMaterialLocalizations.delegate,<br>GlobalWidgetsLocalizations.delegate,<br>],

content_copy

After:

dart<br>import 'package:material_ui/material_ui.dart';<br>// ...<br>localizationsDelegates: GlobalMaterialLocalizations.delegates,

content_copy

Setting localizationsDelegates to GlobalMaterialLocalizations.delegates<br>now includes the Cupertino and Widgets delegates as well,<br>simplifying your setup.

Decoupling localization structure

Open for contribution

By freezing contributions to the Material and Cupertino libraries back in April,<br>we’ve been able to...

flutter dart design material_ui package standalone

Related Articles