Xshell Pro
📖 Tutorial

6 Essential Insights into Flutter's Material and Cupertino Code Freeze

Last updated: 2026-05-04 16:45:18 Intermediate
Complete guide
Follow along with this comprehensive guide

Flutter's development team recently announced a significant milestone: the Material and Cupertino libraries within the Flutter framework are now frozen. This means no new changes can be made to these libraries inside the main flutter/flutter repository. The ultimate goal is to decouple these design-language components into standalone packages called material_ui and cupertino_ui on pub.dev. For contributors and curious developers, here are six crucial things you need to know about this transition.

1. What the Code Freeze Entails

As of April 7, all contributions to the Material and Cupertino libraries in flutter/flutter are frozen. This does not mean development stops—it simply shifts entirely to the flutter/packages repository once the new packages are published. The frozen state ensures that the code copied to the new packages remains stable and consistent across different Flutter channels. For most developers who don't directly work on these libraries, this freeze is invisible; the libraries still function as usual inside the framework until the migration begins. However, for those actively modifying Material or Cupertino widgets, this marks a clear boundary: no more pull requests targeting these parts of the framework will be accepted after the freeze date. Instead, future efforts must target the upcoming material_ui and cupertino_ui packages.

6 Essential Insights into Flutter's Material and Cupertino Code Freeze

2. Impact on App and Plugin Developers

If you build Flutter apps or plugins but never touch Material or Cupertino source code, you can safely ignore this change for now. Your existing code will continue to work without any immediate modifications. However, this reprieve is temporary. After the Flutter 3.44 stable release, the new packages will be published, and the old Material and Cupertino code in the framework will be marked as deprecated. A subsequent stable release will delete that deprecated code entirely. When that time comes, detailed migration instructions will be provided. In practice, you'll need to add explicit dependencies on material_ui and cupertino_ui to your pubspec.yaml file and update any import statements. But for now, you can keep building without disruption—just be aware that a future upgrade step is coming.

3. Handling Existing Pull Requests

For contributors with open pull requests that touch Material or Cupertino code, there's no need to panic. Those PRs will remain open in flutter/flutter, and reviewers will continue providing feedback as usual. Once the new packages (material_ui and cupertino_ui) are published and the migration infrastructure is ready, detailed instructions will be shared on how to port your changes to the flutter/packages repository. Essentially, you'll need to reopen your PR against the new package's repository, adjusting for any differences in the code structure. The Flutter team is committed to minimizing interruptions, so your contribution will still make it into a future release of the design libraries, just through a different pathway.

4. How Issues Are Managed

All existing and new issues related to Material or Cupertino will remain tracked in the flutter/flutter issue tracker. This unified approach keeps everything in one place, even after the libraries move to separate packages. It's the same pattern used for other packages in the flutter/packages repository. So if you encounter a bug or have a feature request for a specific widget, you should still file it in the main Flutter repository. The team will then triage and possibly transfer the issue to the appropriate package repository if needed. This consistency saves contributors from having to hunt across multiple repositories for known problems.

5. Why the Freeze Was Necessary

The primary reason for freezing the code now is to ensure a seamless migration experience for every Flutter developer, regardless of which release channel they use (stable, beta, dev, or master). By freezing the Material and Cupertino libraries one stable release cycle earlier, the team can copy that exact frozen code into the new packages. This guarantees that when developers upgrade to Flutter 3.44 or later, they have a stable, known version of these libraries in their framework. Any subsequent changes to the packages won't cause unexpected breaking changes because the baseline is locked. It's a careful strategy to avoid the chaos of trying to synchronize two moving targets. The freeze effectively creates a clean snapshot that both the old and new worlds can share.

6. What Comes Next: Timeline and Migration

The roadmap is clear: after the Flutter 3.44 stable release, the material_ui and cupertino_ui packages will be published on pub.dev as version 1.0.0. At that point, developers can start migrating their projects. The old Material and Cupertino code inside flutter/flutter will be deprecated in the stable release immediately following 3.44, and eventually deleted in a later release. When migration begins, you'll need to add the new package dependencies and update imports. Detailed guides will be provided. Until then, keep an eye on the Flutter repository for announcements. If you're a contributor, prepare your PRs for porting; if you're an app developer, simply stay on top of Flutter version updates.

In summary, the code freeze marks a pivotal step in decoupling Material and Cupertino from the Flutter framework. While it brings immediate restrictions for contributors, it sets the stage for faster, more independent evolution of these design libraries. Migrating will eventually be required, but the process has been thoughtfully planned to minimize disruption. Stay tuned for the next milestone when the new packages land.