If you've been following the Flutter ecosystem, you've likely heard the buzz. The Flutter team has announced a significant architectural shift: the Material and Cupertino design libraries are being moved out of the core SDK and into standalone packages.
This isn't just a minor housekeeping update; it's a fundamental evolution in Flutter's philosophy. It’s a direct response to years of community feedback and a strategic move to make the framework lighter, faster, and more flexible than ever before.
Let's break down what this means, why it's happening now, and how it will shape the future of app development with Flutter.
From its inception, Flutter's "batteries-included" approach was one of its greatest strengths. By bundling the Material and Cupertino libraries directly into the framework, new developers could get a beautiful, functional app up and running in minutes.
However, as Flutter has matured and expanded beyond mobile to the web, desktop, and embedded devices, the limitations of this tightly-coupled architecture have become clear:
The message from the community was clear: it was time for a change. In fact, the request to move Material and Cupertino out of the core framework is the most upvoted issue with the team-design
label on Flutter's GitHub.
The Flutter team's plan is a strategic, three-phased approach designed to create a more modular and powerful framework.
The first step is to invest heavily in the core widgets
library. This means extracting the essential, non-visual logic (the "headless" primitives) from the design libraries. Think of things like platform-native text editing, page transitions, and basic button behaviors. This creates a robust, un-opinionated foundation that any design system can build upon.
Next, the material
and cupertino
libraries will be moved into their own first-party packages on pub.dev. This is the core of the decoupling process. It means they will be versioned and updated independently of the Flutter SDK.
This transition will be gradual, with a long and well-communicated deprecation cycle. The goal is to make the migration as seamless as possible, starting with a simple "lift and shift" of your existing code.
So, how will this change your day-to-day workflow? The initial changes are straightforward.
pubspec.yaml
You'll now explicitly declare your design system dependencies, just like any other package. This gives you granular control over which version you use.
Before:
# pubspec.yaml
dependencies:
flutter:
sdk: flutter
After:
# pubspec.yaml
dependencies:
flutter:
sdk: flutter
# Add the new packages (final names TBD)
material: ^1.0.0
cupertino: ^1.0.0
To create a clearer separation of concerns, you'll need to explicitly import the widgets
library for foundational widgets like Column
, Row
, and StatelessWidget.
Before:
// main.dart
import 'package:flutter/material.dart';
After:
// main.dart
import 'package:flutter/widgets.dart'; // For foundational widgets
import 'package:material/material.dart'; // For Material widgets
The Flutter team is exploring dart fix
commands to make this a one-time, automated migration.
This new architecture unlocks several key advantages:
material
package while still upgrading the core Flutter SDK to get the latest performance and security improvements.widgets
library provides a powerful, design-agnostic foundation, reducing boilerplate and improving accessibility.fluent_ui
and yaru
on equal footing with Material and Cupertino, fostering greater innovation.Is Google abandoning Material and Cupertino? No, quite the opposite. This move allows the Flutter team to provide better and faster support for these design systems.
Will Material 2 and Material 3 be separate packages? The current plan is to release a single material
package that uses semantic versioning to indicate breaking changes (e.g., v3.0, v4.0). This empowers the community to fork and maintain specific older versions if needed.
What happens to the flutter create
experience? It will remain seamless. The default template will simply be updated to automatically include the new packages in the pubspec.yaml.
For new developers, nothing changes.
This is a long-term evolution, not an overnight switch. The transition is already underway and will continue through 2026 and beyond.
widgets
library.This is a bold and exciting step for the Flutter framework. By embracing modularity, the Flutter team is building a more stable, flexible, and innovative platform for the future. It’s a future where developers have more control, the ecosystem is more diverse, and Flutter is faster in every sense of the word.
Want to dive deeper or get involved?
Written by Fernando Castagno, CTO at Leenspace