[PUBLIC] Flutter 2023 Strategy

18 min read Original article ↗

Permanent link: https://flutter.dev/go/strategy-2023

This is a public-facing, slightly edited version of the Flutter 2023 strategy document published internally at Google.

Flutter 2023 Strategy

Statement of purpose

Flutter is an open source, portable UI framework that gives developers the superpower to build beautiful, high quality apps for any platform from a single codebase. It combines the productivity of a unified codebase and rapid iterative development with the performance and power of native compilation and hardware-accelerated rendering. Flutter builds on Dart, an industrial-strength multi-platform language which enables cornerstone Flutter features that include stateful hot reload; fast, iterative compilation to native and web; and a thriving package ecosystem.

Our mission has remained unchanged for several years, and we repeat it here:

Our mission is to build the most popular, highest-quality, and highest-productivity UI toolkit for developers

Over the last year, we have consolidated our lead as the most popular cross-platform application UI framework. One in five of all new mobile apps are now built with Flutter, and with the release of support for Windows, macOS and Linux as well as growing maturity on the Web and with embedded devices, we have the means to provide Google a flourishing ecosystem that accelerates the growth of businesses like Ads, Android, Play and Cloud.

We aspire for Flutter to produce top-quality apps without compromises on any platform. To do that, we will emphasize app quality and ease of transition across mobile, web, and desktop, reduce frictions in the developer experience, and build on-ramps for new developers to Google. As a result, we hope to shift perceptions of Flutter from being an excellent, no-compromise cross-platform UI framework to being an excellent, no-compromise UI framework, period.

State of the market

Flutter has reached a powerful position in the developer ecosystem, with a large and still growing developer base, high customer satisfaction, and a brand that is the most loved among all Google’s developer products.

As of January 2023, there are over 700,000 apps in the Play Store that are built with Flutter, and one in five new apps on the Play Store use Flutter, more than all other cross-platform frameworks put together. Flutter is picking up market share from other cross-platform frameworks, which are flat or declining over the last twelve months.

Turning to other platforms, 2022 saw the release of Windows, macOS and Linux platform support to the stable channel. Usage has been surprisingly robust. Ubuntu has contributed the Linux port, and are broadly using it for upcoming releases of their Linux distribution, including their installer and software distribution tooling. With an addressable market of 12.8m developers (SlashData) and resurgent macOS and Windows app stores, desktop provides opportunities for Google to bring many new developers to our ecosystem. Developers are also often using desktop as a way to write and test code without having to connect a mobile device, even if their final target is a different platform.

Flutter’s web support is perhaps the most immature, as it builds on leading-edge web technologies that are still not pervasively deployed. Unlike traditional web frameworks, Flutter looks beyond the DOM and JavaScript to a new generation of Canvas and WebAssembly based APIs. Our early releases suffered from slow startup performance and gaps in accessibility and web integration. The team has made substantial progress at addressing these impediments, and customers such as Rive, FlutterFlow, Formula 1 and Google FamilyLink are now using Flutter in production on the web. The web remains a tantalizing (but not fully realized) growth opportunity for Flutter, with a large developer base, a low-footprint install experience, and scope for raising the bar versus traditional approaches.

For all our success to date, it would be foolish to become complacent. As just a taste of the challenges that remain for us, over the coming years, we must:

  • migrate our ecosystem to null safety without fragmentation
  • continue to advance Dart tastefully and carefully
  • eradicate jank and other performance impediments with minimal customer effort
  • deliver unparalleled performance on all platforms
  • reduce or eliminate friction when calling system APIs
  • build in supply-chain security without impeding non-Google contributors
  • build an ecosystem that is self-sustaining
  • maintain and grow our reputation for quality
  • win a reputation with design agencies and iOS developers
  • close API and package divergences between platforms
  • grow the diversity of our community
  • support or integrate emerging ways of building UI, such as ML code completion and low-code tools.

Core planning principles

  • We believe in "focus on the user and all else will follow". This manifests in our emphasis on developer experience (more on this later).
  • We are primarily built for the broad community of developers outside Google, but internal adoption of Flutter remains of great value to Google and the Flutter team. We believe Google adoption is a long-term investment requiring maintenance and long time horizons.  We’re focused on slow internal growth through delighting key internal customers while public adoption continues.
  • Our customer base is broad and includes anyone who wants to build an app. We inevitably have sweet spots where our advantages particularly stand out: for example customers that target multiple platforms, either because of resources or a desire to build and deliver a coherent experience.
  • It is important for us to be a good partner to other teams in Google. Our goal for app developers and publishers is to draw them more deeply into a mutually beneficial relationship with Google. While Google engineers will sometimes invest in features that particularly benefit Google, we will not design them in a way that excludes others from delivering a parity experience.
  • We want customers to have a delightful and trustworthy experience with Flutter; as part of Google, this inevitably leads to them being more likely to adopt other technologies. By setting a vision that customers believe in, we encourage them to join us on our journey.
  • New feature work should be heavily scrutinized. We will be careful about adding new surface area, both because of the challenging macroeconomic environment and Google-wide mandate to sharpen focus, and because we need to first get healthy with our current feature set (e.g. issues, tech debt). We expect new investments to be first validated through UX concept testing. 

In 2023, our north star objective remains the growth of active users. Even a beautifully designed framework or programming language is of limited use without an ecosystem that includes libraries, developer tooling, training and a pervasive developer community. Developers also benefit when they are part of a larger ecosystem: through career opportunities, networking with others, and services that are tailored to their needs. Conversely, ecosystems that are perceived to be stagnant tend to quickly find themselves in decline, as new developers choose offerings that seem to have more opportunity. Growth therefore remains an imperative for Flutter and Dart.

As we’ve said in previous years, developer experience is essential to customers choosing us, since there is no platform for which using Dart or Flutter is the default. (In contrast, for example, Swift and SwiftUI are the default solution for iOS development, Kotlin and Jetpack Compose are the default for Android development, HTML and JavaScript are the default for web development, etc.)

This makes the developer experience one of the most critical aspects of Dart and Flutter.

As it happens, Flutter and Dart are well positioned here, because we have long focused on the developer experience as a fundamental value. This gives our platform a competitive edge. Our 2023 investments focus on six sub-areas of developer experience that we believe are critical to building the most popular, highest-quality, and highest-productivity UI toolkit for developers. These areas are, in no particular order: performance, interoperability, portability, ecosystem, security, and fundamentals.

A note: given the unclear macroeconomic situation and resourcing, our velocity may be slower than originally anticipated. The direction remains unchanged, but we may not complete all this work in 2023.

1. Performance

Performance is one of the biggest perceived hurdles for any cross-platform framework to overcome, and indeed has been a pitfall for other cross-platform UI frameworks, which have traded performance for portability. We do not plan to make the same trade-off, both because of the technical characteristics of our solution (compile to machine code) and because we have made this a high priority from the beginning.

We need to continue to scale our platform for the future. On mobile, our early investments in Impeller are paying off with vastly more fluid results as evidenced by Wonderous. We need to complete this work so that it is ready for broad adoption on both iOS and Android. On the web, we are midway through a large rearchitecture to target WebAssembly, support multi-threaded rendering, and reduce downloaded payload sizes to dramatically improve load time and runtime performance.

Performance is not merely about pushing pixels, of course. It includes generating high-quality machine code. Or, like with the new two-way scrolling API, designing features that lead customers by default to high performance outcomes. For Google products using Dart, such as Ads, it’s also critical that it can support very large codebases extending to millions of lines of code.

Performance also includes improving the edit/compile/debug cycle, providing tooling to help developers diagnose issues, and improving the performance of that tooling itself (for example optimizing Dart's static analyzer).

2. Interoperability

For Flutter to meet the needs of professional developers, we must make it easier to integrate with existing apps and platforms. While clearly there’s a balance where disruptive innovation must not pull outdated technical limitations forward, we can do more to reduce the impedance to adopting Flutter:

  • For Android, we want to make it easier for apps to integrate seamlessly with the underlying operating system. This includes reducing the costs of calling Jetpack libraries, reducing memory buffer copies, and making it easier to embed Flutter into existing Android projects.
  • For iOS, we need to improve our ability to stay up to date with the latest iOS releases, including updates to the Cupertino widget set, modernizing the package ecosystem to use Swift Package Manager, and improving performance. We are also working on improving interop with Swift and Objective-C code through FFI. 
  • On the web, there is work to reduce the ‘uncanny valley’ syndrome where developers notice differences between Flutter and DOM-based content; we need to support embedding Flutter into existing web projects through technologies like Web Components; we need to modernize our JavaScript interop libraries; and we need to continue our work on supporting Wasm, Web Workers, and WebGPU for a more cohesive web experience.
  • On Windows and macOS, there are third-party libraries for UI (Fluent and macos_ui respectively). However, we need to complete the work we’ve started on platform views so that we can embed content from other SDKs into Flutter apps, as well as improving accessibility and adding multi-window support.

This work is shared across multiple parts of the project: the Dart language, runtimes, and libraries, the Flutter engine and Flutter framework itself, and our package ecosystem.

3. Portability

For Flutter to be the best way to paint UI on any platform, both Flutter and Dart need to continue to support a broad range of processor architectures, instruction sets and platforms. Our customers tell us clearly that this is a key part of the promise they are buying when they bet on Flutter, and so we will continue to invest here.

Our primary target in 2023 is WebAssembly, specifically the emerging work around support for garbage collected languages known as WasmGC. While WasmGC is not yet supported by any major browser, when complete Dart will have a binary target for the web in addition to desktop and mobile platforms.

We are also working on supporting new processor architectures. Desktop-class operating systems are increasingly moving to ARM, and we therefore need to support ARM for those operating systems. In addition, RISC-V is an emerging platform that we will continue to investigate so we can support Flutter and Dart in embedded scenarios as well as future potential use in Android.

Portability also extends to the UI. While we have historically provided some features to help developers create applications that automatically adapt to the user's device, more efforts in this direction will simplify the task of writing applications with Flutter.

4. Ecosystem

Flutter itself is only a part of the overall solution, and we must surround the core engine and libraries with support from Google or the industry if we are to offer developers a cohesive full-stack experience. In 2022, we explored the use of vertical toolkits to help drive adoption with the launch of a casual game toolkit. This relatively small investment on our part has scaled well, driving broader energy and investment from others. Notably, Flame is becoming a mature offering for 2D games, offering constructs like sprites and particle effects, sound, physics, and collision detection that build on the core Flutter framework. As of November 2022, there are over 15,000 games published to the Play Store using Flutter, which represents 59% growth over the last twelve months.

In 2023, we will release a second vertical toolkit focused on news, developed by a partner and co-funded by and in partnership with the Google News Initiative. This toolkit offers a mobile alternative to AMP, providing news publishers with an application template that implements common features (onboarding, content feed, article pages, paywalls, ads, notifications), informed by research from the Google News team.

We will also continue to build partnerships with others who are investing in tooling to support Flutter and Dart in 2023. This includes design tools like Supernova, Figma, Widgetbook and Rive, as well as low-code and cloud-based development tooling including FlutterFlow, Codemagic, Zapp and Codelessly. We will collaborate with GitHub, Realm, Canonical, Linaro and others to ensure that we participate and connect with the broader ecosystem.

5. Security

One area of growing concern is security, with many examples of sophisticated actors probing for vulnerabilities. Other open source projects like npm have been targeted, and with Flutter’s popularity, there is no reason to assume that we are not also an active target.

In 2023, we will continue to increase the robustness of our build system, with code signing enabled for all public releases that we produce, and reproducible builds. We will measure this by tracking our continued progress towards compliance with SLSA-4 standards. We will also continue to work on tooling to support developers in building secure applications, for example providing provenance attestations or providing a structured approach to documenting vulnerabilities in packages.

A related topic of concern is the analytics data that we collect. In 2023, we plan to complete our work to unify and clarify our instrumentation across Flutter and Dart, making it more obvious what data we collect and publishing anonymized, aggregated data for the community at large. In doing so, we aim to increase trust and build confidence in Flutter and Dart as open source projects.

6. Fundamentals

In addition to these active areas of developer growth, we also need to continue to take care of the fundamentals. This includes documentation, engineering velocity, UI fidelity, addressing technical debt, and responding to customer issues.

Documentation is a good example of how all these fundamentals play out. Flutter and Dart developers regularly call out our documentation as a major strength; it is comprehensive, integrated in the source code, and tested automatically with every build. Yet it is badly fragmented, and split across too many different sites, each with its own infrastructure and discrete search. We need to make progress both by investing in content (refining existing content, adding more samples, etc.), investing in platforms like dartdoc that increase our velocity, and dealing with long-standing infra debt and customer issues.

More broadly, our issue backlog continues to grow. We crossed 10,000 open issues in 2022, and customers continue to open issues faster than we close them. Aside from any internal velocity challenges, this has two effects: it cools customer interest, as they fear that our product may be more buggy than competitors (regardless of whether this is a fair metric), and it leads to dissatisfaction, as customers often feel that reported bugs don’t get sufficiently rapid responses. We need to invest more heavily in polishing the features we already have.

Maximizing Flutter and Dart’s value to Google

The value of our products to Google isn’t fully delivered with a large, happy developer base. We are accountable to our shareholders and leadership to build a broader ecosystem for Google as a whole, building success for other products as well as our own.

Flutter, Dart, and internal customers

Supporting usage of Flutter and Dart in Google is an important part of our work and we have a team dedicated to this task. While we don’t expect to see wholesale conversion of Google apps to Flutter (as app rewrites are disruptive and expensive), we choose to support adoption by Google teams for a number of reasons:

  1. They’re a proof point for Flutter and Dart: if Google engineers aren’t able to build high-quality experiences with our software, we certainly can’t expect third-party customers to do so. (Conversely, we can iterate much faster on improvements with an internal customer and codebase.)
  2. They help us demonstrate a good return on investment for the millions of dollars Google invests in our products: if we make each of the thousands of developers building with Dart inside Google even 10% more productive, we’ve already paid for ourselves.
  3. Having customers whose code we can inspect and test helps us build a better product and learn more about real-world usage of our framework, libraries and language.
  4. Many Google products need Flutter, Dart, or a solution very like it to be successful at their own goals.

For 2023, our work here will continue to hinge on helping teams be successful with Flutter and Dart. Part of this work is reactive, implementing features that are requested by large internal teams (e.g. scaling compilation of large apps, supporting internal plugins and integrations, and internal standards for accessibility and performance). We also aim to broaden Flutter's ability on the web to provide UI-rich features embedded inside existing internal web applications using other frameworks such as Angular, allowing teams to leverage Flutter within an existing solution where it makes sense.

Flutter as an on-ramp for Google

Flutter serves Google in that a large satisfied customer base is more likely to be receptive towards other Google messages and products, and more likely to adopt and deploy other Google technologies. Yet we have to be extremely careful not to lose sight of what makes us successful. Our heart is as an open source project that is sponsored by Google, rather than exclusively owned by Google. Our contributors come from many different companies, including our competitors; our stewardship needs to be open to others’ success as much as our own. This essence has proved beneficial; indeed, the scale of these contributions mean that Google's investment in Flutter is lower than it would need to be to get equivalent results if it was a closed-source project.

How do we bridge this tension? By starting with what makes customers successful. We refuse to fall into the trap of creating customer-hostile choices for short-term gain. Instead, we give customers great paths to success with Google. As some specific examples:

  • For Cloud and Firebase, that means offering packages like FlutterFire that make it easy to complement Flutter apps with our cloud backend, as well as documentation and guidance for hosting Dart in the cloud. It includes supporting Cloud account teams who are selling full-stack solutions to their customers.
  • For Android, we help customers “shift left”: giving iOS developers a path to build on a supported Google stack that also targets Android. This also includes the sizable revenue stream we are building for in-app purchases with Play. In 2023, we will continue to enthusiastically build pathways to help developers light up on Android, in collaboration with the Android team.
  • For Ads, we continue to partner on breadth opportunities, with first-party support for a broad set of mobile ads formats, targeted campaigns around casual gaming, and product investments around deep-linking. In 2023, we will broadly roll out our work with news publishers to offer a custom toolkit that incorporates ads and Firebase.
  • For Geo, we will partner with them to grow our maps plugin, including adding support for client-side directions, and integration into the Google Maps developer docs.

Roadmap

As in previous years, we’re planning to deliver stable releases on a roughly quarterly basis, delivering on the goals expressed above.

Our first moment is Flutter Forward, in January 2023, which will sow the seeds for the investments we’ll make through the remainder of the year. We’ll demonstrate early progress against each of the areas above, giving customers the incentive to buy not just our “today” but also our “tomorrow”.

We will continue to ship beta releases on a monthly basis, with the expectation that these will become the “fast” channel for developers who prefer earlier access to features with a more rapid cadence. As Flutter matures, we’ll shift our focus over 2023 away from stable releases as the primary vehicle for announcing new features and towards beta releases as the proving ground, as Chrome does. This will incentivize early adopters to use the beta releases and reduce the impetus for teams to ship features on a date-driven basis.