跪拜 Guibai
← Back to the summary

Flutter 3.47 Splits Material and Cupertino Into Standalone Packages

Hello everyone, I'm Lao Liu

The cross-platform circle in August can be called the major version month. Flutter released the major version 3.47, bringing the milestone change of decoupling Material and Cupertino into independent packages, and Impeller officially became the default rendering engine for desktop. React Native officially made the Strict TypeScript API standard in 0.87, and KMP advanced to 2.4.20-RC. On the MAUI side, Preview 7 brought new capabilities such as Passkey authentication and XAML incremental hot reload. Let's take a look at the specific changes in each framework.


1. August Cross-Platform Technology Overview

The keywords for the cross-platform circle in August are structural change and ecosystem convergence:

① Flutter 3.47 major version, design system decoupling

Flutter 3.47 (August 12) is the version with the most changes in recent months. Material and Cupertino were officially stripped from the core SDK and released as two independent packages, material_ui and cupertino_ui, on pub.dev. At the same time, Impeller became the default rendering engine for macOS, Windows, and Linux, Widget Previews became stable, and along with the push for Wasm as default and Apple ecosystem adaptations, it covers a full-chain upgrade from underlying rendering to top-level design.

② React Native 0.87 major version, TypeScript API made standard

RN 0.87, released on August 11, is another watershed version following the "New Architecture era" of 0.82. The Strict TypeScript API became the default from its preview in 0.80, Metro was updated to 0.87 (halving memory and making source maps 2x faster), SwiftPM is experimentally supported, and AGP 9 support officially landed.

③ KMP 2.4.20-RC, further integration with the Swift ecosystem

Kotlin 2.4.20-RC (August 12) brought more Swift interoperability enhancements, including mapping sealed classes to Swift enums and cross-language inheritance. At the same time, BTA expanded to JS/Wasm/Metadata targets, and a native compiler mirror began experimental release.

④ uni-app x Android Steam Mode online, WeChat AI integration

In version 5.23, Android Steam Mode officially went online, meaning uni-app x has achieved Steam Mode coverage on all three platforms: Android/iOS/HarmonyOS. At the same time, the WeChat Mini Program platform added WeChat AI support.

⑤ .NET MAUI Preview 7, Passkey authentication and incremental hot reload

.NET 11 Preview 7 (August 11) is the second-to-last preview version of MAUI before the official release of .NET 11. Cross-platform Passkey authentication, XAML incremental hot reload, Shell routing templates, and other features were officially showcased.


2. Flutter: 3.47 Major Version, Material/Cupertino Independent Packages, Impeller Default on Desktop

Flutter release notes: https://docs.flutter.dev/release/release-notes

On August 12, Flutter 3.47 was officially released. This is the largest version since the release of 3.44 at Google I/O 2026 in May. The current latest stable version is Flutter 3.47.0, with the Dart version upgraded simultaneously.

2.1 Material and Cupertino Become Independent Packages

This is the biggest structural change in this version: The Material and Cupertino design systems were officially stripped from the Flutter core SDK and released as two independent packages, material_ui and cupertino_ui, on pub.dev, version 1.0.

What does this mean?

Migration Method

Run dart fix --apply --code=migrate_design_widgets to migrate automatically.

Compatibility Bridge

MaterialUiCompatibilityBridge allows your application to switch to the independent packages immediately, even if dependent packages still use the old imports.

Localization Synchronized Decoupling

flutter_localizations was also disassembled; localization delegates are now located in the material_ui and cupertino_ui packages.

2.2 Impeller Becomes the Default Rendering Engine for Desktop

Starting from 3.47, Impeller is the default rendering engine for macOS, Windows, and Linux. If you need to render with Skia, you must manually fall back (the fallback option will be removed in a future version).

Other desktop improvements:

2.3 Widget Previews Become Stable

Flutter Widget Preview is officially stable, allowing instant rendering, inspection, and iteration of individual UI components without building and launching the entire application.

2.4 Apple Ecosystem Adaptations

2.5 Push for Wasm as Default

The Flutter team is actively pushing for Wasm to become the default compilation target for web applications. The --wasm flag is already available, and experimental support for Wasm deferred loading (--enable-wasm-deferred-loading) has been added.

2.6 Android Dependency Matrix Update

2.7 Lao Liu's Comments

3.47 is the most structurally significant version this year. The decoupling of Material/Cupertino might seem like just a package management adjustment on the surface, but it actually means the iteration speed of Flutter's design system will greatly increase: it is no longer constrained by the SDK's quarterly release cycle. Coupled with Impeller on desktop, Widget Previews becoming stable, and the push for Wasm, Flutter is shifting from "mobile-first" to a "full-platform + modular" architecture. The migration requires some work, but the direction is right. It is recommended that all developers try it out early on non-production projects.


3. KMP (Kotlin Multiplatform): 2.4.20-RC Released, Swift Interoperability Evolves Further

Kotlin new features: https://kotlinlang.org/docs/whatsnew-eap.html

On August 12, Kotlin 2.4.20-RC was released, the final release candidate for 2.4.20. The main KMP-related changes are as follows:

3.1 Key Changes Directly Related to KMP

① Swift Export: Sealed Class Mapped to Swift Enum

Kotlin sealed classes/interfaces can now be mapped to Swift enums, allowing exhaustive matching with switch on the Swift side, and the compiler will warn when new subclasses are added. This is a significant improvement for the KMP development experience on iOS.

② Swift Export: Cross-Language Inheritance

Interfaces defined in Kotlin can now be implemented on the Swift side and then passed back to the Kotlin side for invocation. This means you can use pure Swift libraries to implement protocols defined in Kotlin, which is very valuable for integrating the Swift native ecosystem in KMP projects.

③ Automatic Generation of Package.swift

The assembleSharedXCFramework Gradle task now automatically generates a Package.swift file, facilitating the SwiftPM distribution of XCFrameworks.

④ Klib Incremental Compilation

An improvement carried over from 2.4.20-Beta1, klib incremental compilation is enabled by default, significantly shortening the debug build time for multi-module KMP projects.

⑤ BTA Expanded to JS/Wasm/Metadata

The Build Tools API now supports Kotlin/JS, Kotlin/Wasm, and Kotlin metadata targets, paving the way for a unified build tool ecosystem.

⑥ Coroutine Stacktrace Recovery

The StackTraceRecoverable interface allows custom exceptions to retain specific properties during stack recovery in kotlinx.coroutines.

3.2 Other Notable Updates

3.3 Lao Liu's Comments

A core theme of 2.4.20-RC is the deep integration with the Swift ecosystem. The two features—mapping sealed classes to Swift enums and cross-language inheritance—provide tangible improvements to the actual development experience for KMP on iOS. Previously, doing Swift interop in KMP projects always had various walls; now, these walls are being torn down one by one. If you are working on a KMP+Swift project, 2.4.20-RC is worth running in your development environment immediately.

Also, I wonder if everyone has noticed that wasm is being chosen by more and more cross-platform frameworks as the solution for the cross-platform web side.

So some classic solutions will gradually become industry consensus.


4. React Native: 0.87 Released, Strict TypeScript API Made Standard

React Native blog: https://reactnative.dev/blog

On August 11, RN 0.87 was officially released, another major version following 0.86 (June).

4.1 Strict TypeScript API Enabled by Default

The Strict TypeScript API, introduced as a preview starting from 0.80, officially became the default in 0.87. This means:

Trustworthy Types

Type definitions are generated directly from the RN source code, no longer relying on manual maintenance.

Stable API

The API scope is limited to the react-native root export; changes to internal files will no longer produce breaking changes.

Documentation Comments

Most symbols now include documentation comments, viewable on hover.

Breaking Changes

Deep imports (e.g., react-native/Libraries/*) are now type errors and require migration; some type names and shapes have been adjusted.

Opt-out Mechanism

An opt-out switch allows continued use of the old types until 0.88; it will be removed in 0.89.

4.2 Metro 0.87

4.3 Experimental SwiftPM Support

RN 0.87 adds experimental SwiftPM support as an alternative to CocoaPods for the iOS platform. Only Xcode is needed; Ruby, Bundler, or CocoaPods are not required. Use the npx react-native spm --deintegrate command to switch.

4.4 AGP 9 Support

0.87 is the first RN version to support AGP 9. The minimum toolchain requirements have also been updated:

4.5 Lao Liu's Comments

RN 0.87's Strict TypeScript API becoming standard is a belated but correct decision. It took nearly a year from 0.80 to 0.87, but community adaptation has been relatively smooth. Coupled with Metro performance improvements and experimental SwiftPM support, RN is catching up with other frameworks in terms of development experience. Teams currently using RN 0.80+ are advised to upgrade to 0.87 as soon as possible; the improvement in the type system is worth experiencing immediately.

Of course, ecosystem compatibility and stability must also be considered; production versions can wait a bit.


5. uni-app x: Dual Versions 5.23/5.24, Android Steam Mode Online

uni-app x changelog: https://doc.dcloud.net.cn/uni-app-x/release.html

In August, uni-app x released two consecutive versions: 5.23 (August 6) and 5.24 (August 13).

5.1 Version 5.23: Android Steam Mode Online

① [Important] Android Steam Mode Officially Online

Following the HarmonyOS Steam Mode in May and the iOS Steam Mode in July, the Android Steam Mode officially went online in 5.23. This means uni-app x has achieved Steam Mode coverage on all three platforms: Android/iOS/HarmonyOS, and the self-developed rendering engine route is basically complete.

Moreover, this Steam Mode no longer requires strong typing; you can write in js/ts, further lowering the barrier to entry.

② [Important] WeChat Mini Program Supports WeChat AI

The WeChat Mini Program platform of uni-app x can now integrate WeChat AI capabilities.

③ Steam Mode Component Capability Enhancements

④ Other Platform Updates

5.2 Version 5.24: Bug Fixes

Fixed issues introduced in version 5.23, such as the text component failing to render in time when text is updated frequently, vue useComputedStyle failing to get updated styles in some cases, and uts paid plugin compilation errors.

5.3 Lao Liu's Comments

The launch of Android Steam Mode means uni-app x has completed an important milestone on its self-developed rendering engine route: all three platforms now have Steam Mode. And this time, Steam Mode no longer mandates strong typing, making it more developer-friendly. Coupled with WeChat AI support, uni-app x is also accelerating in the direction of AI + Mini Program integration. If your project needs to cover both App and Mini Programs simultaneously, it's worth keeping up with the updates.

As I always say, having both an app and a mini program doesn't mean most of their functionalities overlap.

So, I only recommend using the same tech stack when the functionalities of the app and mini program are basically consistent. Otherwise, I still suggest choosing solutions separately.


6. .NET MAUI: Preview 7 Released, Passkey Authentication + XAML Incremental Hot Reload

.NET MAUI blog: https://devblogs.microsoft.com/dotnet/category/maui/

On August 11, .NET 11 Preview 7 was released, the second-to-last preview before the official .NET 11 release. The MAUI-related updates are as follows:

6.1 Cross-Platform Passkey Authentication

A brand new Passkeys Essentials API, supporting Android 14+, iOS 16+, Mac Catalyst 16+, and Windows 10 1903+. Use Passkeys.IsSupported to check availability, Passkeys.CreateAsync to register credentials, and Passkeys.AssertAsync for authentication.

6.2 XAML Incremental Hot Reload

A preview feature that uses source generators and MetadataUpdateHandler to update already instantiated pages without rebuilding the application. Supports property changes, adding/removing child elements, structural reordering, attached properties, markup extensions, bindings, and ResourceDictionary updates. Enabled by default in Debug builds.

6.3 Shell Route Templates

Shell routing now supports path parameter templates similar to ASP.NET Core, including required, optional, default values, constraints, catch-all, and mixed segments.

6.4 AOT-Safe RelativeSource Binding

The XAML source generator now compiles {RelativeSource AncestorType=...} bindings into trim-safe TypedBinding, avoiding reflection issues in AOT publish builds.

6.5 NavigationPage and TabbedPage Migrated to Handler Architecture

On iOS and Mac Catalyst, NavigationPage and TabbedPage now use the standard Handler architecture, replacing the previous bulky Renderer.

6.6 Third-Party Platform Backend Extension Points

Preview 7 provides unified extension points for community platform backends; XAML OnPlatform now supports GTK, macOS, and WPF.

6.7 Other Updates

6.8 Lao Liu's Comments

Preview 7's Passkey authentication is a new direction worth watching: the standardization of cross-platform biometric authentication APIs is a plus for MAUI's value in enterprise application scenarios. XAML incremental hot reload is also a feature long requested by developers. However, MAUI has now reached Preview 7 in the .NET 11 preview cycle, and the official version should be near; it is recommended to wait for the official version before evaluating an upgrade.


7. Summary of Cross-Platform Technology Changes This Month

Framework July Status August Status Key Changes
Flutter 3.44.6 3.47.0 Material/Cupertino independent packages, Impeller default on desktop, Widget Previews stable, Wasm push
KMP 2.4.20-Beta1 2.4.20-RC Swift Export sealed class/cross-language inheritance, automatic Package.swift, BTA expansion, native compiler image
React Native 0.86 (No change) 0.87 Strict TypeScript API default, Metro 0.87, experimental SwiftPM, AGP 9 support
uni-app x 5.14 / 5.15 5.23 / 5.24 Android Steam Mode online, WeChat AI support, full Steam Mode coverage on three platforms
.NET MAUI Preview 6 Preview 7 Passkey authentication, XAML incremental hot reload, Shell route templates, Handler architecture migration

Lao Liu's Suggestions

  1. Flutter Users 3.47 is a major version; the Material/Cupertino decoupling requires migration. It is recommended to try it immediately on non-production projects; for production projects, run the migration process on a test branch first. Impeller becoming the default on desktop is worth paying attention to.

  2. KMP Users 2.4.20-RC is the final candidate before the official version. Mapping sealed classes to Swift enums and cross-language inheritance significantly improve the iOS development experience; it is recommended to try it in a development environment.

  3. RN Users The Strict TypeScript API in 0.87 is worth upgrading to immediately; the improvement in the type system is a long-term benefit. Pay attention to breaking changes, especially the migration of deep imports.

  4. uni-app x Users Android Steam Mode is online, full Steam Mode coverage on three platforms, and strong typing is no longer mandatory. App projects are recommended to try it immediately.

  5. MAUI Users Preview 7's Passkey authentication and XAML incremental hot reload are worth watching, but it is recommended to wait for the official .NET 11 release before evaluating an upgrade.

The wheels of technology roll forward; only by continuous learning can one always stay at the table.


🤝 If any students reading this are interested in client-side or Flutter development, feel free to contact Lao Liu; let's learn from each other.

🎁 Private message to get Lao Liu's compiled "Flutter Development Manual" for free, covering 90% of application development scenarios. It can be used as a knowledge map for learning Flutter.

💬 : laoliu_dev

📂 Lao Liu has also organized his historical articles in a GitHub repository for everyone's convenience.

🔗 https://github.com/lzt-code/blog