Flutter 3.47 Lands Days Before the UIKit Deadline, but 3.41.9 Remains the Production King
Hello everyone, I'm Old Liu
It's the end of August, and there's only one week left until the mandatory UIKit migration in September.
Last month I said "July-August is the migration window," and some classmates in the group replied: "No rush, let's talk about it in September." Buddy, are you still not worried now?
Fortunately, August was eventful: Flutter 3.47 was released just before the deadline, and it brought Dart 3.13 along with it. As usual, let's first sort out the version situation for August, then talk about what to do next.
1. Major Flutter Events in August
Flutter 3.47 Released Just Before the Deadline
On August 13, Flutter 3.47 officially launched, less than three weeks before the September deadline. This release was accompanied by Dart 3.13.
Old Liu thinks there are three key points:
1. Material and Cupertino Split from the Core SDK
The material_ui and cupertino_ui independent packages officially reached 1.0 on pub.dev. From now on, they can iterate at their own weekly pace without waiting for the quarterly SDK updates. An official migration tool is provided:
dart fix --apply --code=migrate_design_widgets
Note that the built-in Material and Cupertino libraries in the SDK will be officially marked as deprecated in this November's autumn release. Another new countdown has been hung on the wall.
2. Paving the Way for Xcode 27 and iOS 27
The iOS 27 SDK mandates the UIScene lifecycle. Apps built with Xcode 27 that do not adopt UIScene will fail to launch directly. For most apps, the Flutter CLI will automatically complete the migration during the build process, but if your AppDelegate has custom native code, or if plugins are still tied to the old lifecycle, you'll need to do it manually.
Two other numbers to remember: the minimum iOS support has been raised from 13 to 15, and macOS from 10.15 to 12. For teams that still need to support older iPhone models, this is the practical reason you can't move to 3.47 yet.
3. Impeller Fully Lands on Desktop
Impeller becomes the default rendering engine on macOS, Windows, and Linux. Desktop text has also switched to SDF rendering, with a noticeable improvement in clarity. Widget Previews have officially graduated to stable, and GenUI has reached version 0.10.
The 3.44 Series Has Quieted Down
Let's compare the rhythm: 5 patches were released in July, averaging one per week; in August, only one small patch, 3.44.9, was released on August 7.
The intensive repair period is over, and 3.44 has finally quieted down. The baton has been passed to 3.47.
3.47.1 Emergency Follow-up Within a Week
What's more telling is 3.47 itself: just one week after the 3.47.0 release, 3.47.1 was rushed out on August 20, fixing 12 issues in one go:
- A race condition in SwiftPM integration during parallel multi-target builds on iOS/macOS caused a FileSystemException
- Validated plugin class names against package name identifiers, blocking an arbitrary code injection vulnerability into GeneratedPluginRegistrant. Note, this is a security issue
- Hot restart failure for WASM Web builds
- Shader compiler crash when Windows paths contain Unicode characters
12 fixes in a week, including a security-level one. The new king has ascended, but the break-in period has just begun.
2. In-Depth Analysis of the Last 5 Flutter Versions (August Update)
1. Version List
To more intuitively display the release timeline and lifecycle of each version, let's first look at a core version evolution diagram:
| Flutter Major Version | Latest Patch Release Date | Dart Major Version | Description |
|---|---|---|---|
| 3.47 | August 20, 2026 (3.47.1) | Dart 3.13.1 | Just released, rapidly breaking in |
| 3.44 | August 7, 2026 (3.44.9) | Dart 3.12.2 | Stabilizing, handed over to 3.47 |
| 3.41 | May 1, 2026 (3.41.9) | Dart 3.11.5 | Currently recommended production mainstay |
| 3.38 | February 12, 2026 (3.38.10) | Dart 3.10.9 | September deadline, final ultimatum |
| 3.35 | October 23, 2025 (3.35.7) | Dart 3.9.2 | Completely obsolete |
2. Core Version Analysis
Flutter 3.47.1 - New Version Break-in Period, Ideal for Pre-research
Status Not for production use; pre-research in testing environments.
Assessment A follow-up release with 12 fixes just one week after launch, including code injection protection for the plugin registrar, indicates that 3.47's architectural adjustments are significant: splitting the design system and deep SwiftPM integration are both major overhauls.
Remember those friends who rushed to upgrade when 3.44 was first released? They've learned their lesson this time; let the dust settle a bit longer.
Strategy For teams wanting to smooth the path before the November design library deprecation and the December SwiftPM deadline, you can now start pre-researching 3.47.1 on a separate branch. Focus on verifying two things: the compatibility of the
dart fixdesign library migration, and the stability of the SwiftPM build.
Flutter 3.44.9 - Quiet Finale, Qualified but Not Worth a Special Move
Status Has the qualifications to be a mainstay, but Old Liu still does not recommend upgrading specifically for it.
Assessment Only one small patch in August shows that the serious issues in the 3.44 series have been basically cleared. Teams still on 3.44 don't need to panic; the version you have is currently safe.
At this point, some classmates will surely slam the table: 3.44 has been out for over 3 months, has 10 patches, and its fix rhythm has dropped to zero. According to my own "major version stability boundary" from July, it should have been promoted long ago. Why isn't it listed as the production mainstay?
Old Liu's three considerations:
First, the principle of minimizing migrations. The threshold for the September UIKit deadline is only 3.41, and the threshold for the December SwiftPM deadline is 3.44. By setting the production mainstay at 3.41.9, most teams only need to move once by the end of the year; if you fully switch to 3.44 now, you'll have to migrate again once 3.47 stabilizes. For a production environment, the number of forced moves is itself a risk.
Second, different standards of evidence. The threshold I set for "absolute mainstay" is "long-term zero patches + ecosystem fully digested," not just "fewer patches." The first 5 patches for 3.44 fixed issues at the level of build failures and rendering misalignment, and these types of fixes themselves need a period of production validation. The rhythm only dropped to zero in August, so the observation window of one month is still too short.
Third, an awkward position. The November deprecation of built-in design libraries and the mandatory SwiftPM switch in December mean the storm's eye is right next to this generation. 3.44 is destined to be a transitional version, unsuitable for core projects to settle on long-term. Rather than oscillating back and forth on 3.44, it's better to wait for 3.47 to release .2 or .3 and then upgrade in one step.
That said, if you are already on 3.44, staying on 3.44.9 is perfectly valid; there's no need to tinker. What's truly not worthwhile is making a special move from a stable 3.41 just for it.
Strategy Maintain the status quo, and conveniently run
flutter analyzeto check for any blocking items related to the independent UI package migration. You should be on the first wave upgrade list when 3.47 stabilizes; except for projects that need to deliver SwiftPM adaptation by year-end, you can directly use 3.44.9 as a baseline and start validation early.
Flutter 3.41.9 - Absolute Mainstay, The Record Continues
Status Strongly recommended for production use.
Assessment Released on May 1st, nearly 4 months ago, and the zero-patch record continues. Set against the backdrop of 3.44's weekly patches in the first half of the year, this quietness is especially precious.
It is the minimum threshold for the September UIKit migration, making now the perfect time to get on board.
Flutter 3.38.10 - Final Ultimatum
Status No buffer room left whatsoever.
Assessment Last month's phrasing was "the migration window is closing"; this month, the phrasing needs to change: the door is only a crack away from being shut. The September UIScene mandatory migration takes effect, compounded by this autumn's Xcode 27 and iOS 27. Every day spent on 3.38 is accumulating risk.
Strategy Act this week. First, get 3.41.9 running in a testing environment, confirm all plugins are normal, then schedule the official upgrade. There really is no "next month" anymore.
3. Version Selection Advice for August
Stable Production
Recommendation Flutter 3.41.9
Reasoning The zero-patch record is about to hit 4 months, with impeccable stability. The minimum requirement for the September mandatory UIKit migration is precisely 3.41, while 3.47 is still in its break-in period. From any angle, 3.41.9 is the safest answer right now. (Some classmates will surely ask: why not the equally stable 3.44? Old Liu already did the math on that in Section 2.)
Development Environment & New Projects
Recommendation Flutter 3.41.9
Reasoning The fact that 3.47.1 fixed 12 issues in a week shows the new toolchain hasn't been smoothed out yet. New projects need to spend time writing code, not accompanying a new architecture through its break-in period. Wait until 3.47.2 or the next quarterly release comes out before looking again.
Tech Exploration
Recommendation Flutter 3.47.1
Reasoning If you want to experience the independent UI packages, desktop Impeller, and the graduated Widget Previews early, now is the best time. Besides, the two hurdles of November's design library deprecation and December's mandatory SwiftPM will eventually need to be crossed with 3.47. Might as well start now.
4. Technical Focus Points: Three Countdowns Running Simultaneously
The most important change this month is that three countdowns are on the table at the same time:
1. September: UIScene Lifecycle Mandatory Migration (Next Week)
The iOS 27 SDK mandates the UIScene lifecycle; apps built with Xcode 27 will fail to launch directly without it.
- Minimum Requirement: Flutter 3.41
- For most standard projects, the Flutter CLI will automatically complete the migration during the build.
- Custom AppDelegate native code and plugins dependent on the old lifecycle require manual modification.
Advice
Students still on 3.38 should get 3.41.9 running this week. Those who have already upgraded to 3.41 shouldn't be careless; build once with the Xcode 27 beta to confirm the app can launch normally.
2. November: SDK Built-in Design Library Deprecation (A Newly Hung Countdown)
Starting with 3.47, Material and Cupertino have independent pub.dev packages, and the SDK built-in versions will be officially deprecated in the November autumn release.
- The migration tool is ready:
dart fix --apply --code=migrate_design_widgets - During the transition period, the
MaterialUiCompatibilityBridgecan be used. Migrate your own code first, and clean up old references in dependencies later.
Advice
Teams that finish the UIKit migration in September should start evaluating the design library migration in October. Tackle one thing at a time; don't mix the two migrations together.
3. December: SwiftPM Mandatory Migration
- Minimum Requirement: Flutter 3.44
- Latest official data: 92 out of the Top 100 iOS plugins have completed the SwiftPM migration.
- CocoaPods has entered maintenance mode; unmigrated plugins will be downranked on pub.dev.
Advice
The ecosystem is more than halfway ready; what's left is your own plugin list. Spend half an hour going through your dependencies, list the ones that haven't migrated, and find alternatives. This task can be done this week.
4. Continuous Evolution of the AI Toolchain
With Widget Previews graduating to stable, the release of GenUI 0.10, and the continuous landing of Agentic Hot Reload, the AI toolchain is moving from concept to daily productivity.
Old Liu maintains his judgment from the first half of the year: Developers proficient in using AI tools have an output efficiency 3-5 times that of those who don't. This gap will only widen by the end of the year.
Summary
In the Flutter community this August, the biggest variable was the last-minute release of 3.47. The design system split, automatic UIScene migration, and desktop Impeller are all paving the way for several major milestones in the second half of the year.
Old Liu's advice: Production environments should continue to hold firm on 3.41.9; those still on 3.38 must act this week; users on 3.44 can stay put and upgrade directly when 3.47 stabilizes; pre-research teams should jump on 3.47 now to blaze the trail for everyone else.
Among the three countdowns, the one in September is the loudest. Don't wait until the wall collapses to remember it's moving day.
🤝 If any classmates reading this are interested in client-side or Flutter development, feel free to contact Old Liu; let's learn from each other.
🎁 DM to get Old Liu's compiled "Flutter Development Handbook" for free, covering 90% of application development scenarios. It can serve as a knowledge map for learning Flutter.
💬 : laoliu_dev
📂 Old Liu has also organized his historical articles in a GitHub repository for easy reference.
Top 1 from juejin.cn, machine-translated. The original thread is authoritative.
How do you fix the issue in 3.41 where some Android fonts become bolder than intended after bolding? Otherwise, I'd have to upgrade to 3.44.