July 31, 2025

Flutter's Big Move: Why Decoupling Material & Cupertino is a Game-Changer

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.

The Problem with a "Batteries-Included" Approach

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:

  • Forced Migrations: To get the latest framework bug fixes or performance improvements, developers were often forced into time-consuming UI refactors, like the migration from Material 2 to Material 3.
  • Slow Design Updates: Critical UI bug fixes and design updates were tied to Flutter's quarterly stable release cycle, meaning apps could feel out-of-sync with the latest OS aesthetics.
  • Difficulty with Custom UIs: Developers building bespoke design systems had to "fight the framework," untangling their UI from Material's opinions or reinventing core components from scratch.

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.

A More Modular Future: The Three Pillars of Change

The Flutter team's plan is a strategic, three-phased approach designed to create a more modular and powerful framework.

1. Strengthen the Core

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.

2. Decouple and Relocate

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.

3. Provide a Clear Migration Path

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.

What This Means For You: A Practical Look

So, how will this change your day-to-day workflow? The initial changes are straightforward.

Updating Your 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

Updating Your Imports

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.

The Benefits of Decoupling

This new architecture unlocks several key advantages:

  • Faster Updates: Get the latest Material 3 Expressive features or iOS 26 design updates without waiting for the next Flutter stable release.
  • More Control: You decide when to migrate to a new design version. You can pin your app to an older version of the material package while still upgrading the core Flutter SDK to get the latest performance and security improvements.
  • A Stronger Foundation for Custom UI: For those building custom design systems, the strengthened core widgets library provides a powerful, design-agnostic foundation, reducing boilerplate and improving accessibility.
  • A Thriving Ecosystem: This move levels the playing field, placing community-driven design systems like fluent_ui and yaru on equal footing with Material and Cupertino, fostering greater innovation.

Your Questions, Answered

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.

The Road Ahead

This is a long-term evolution, not an overnight switch. The transition is already underway and will continue through 2026 and beyond.

  • Phase 1 (Now - End of 2025): Reinforcing the core widgets library.
  • Phase 2 (Early 2026): Relocating the libraries to new packages on pub.dev.
  • Phase 3 (Late 2026 and Beyond): A phased deprecation and eventual removal of the old libraries from the SDK.

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