One common request from enterprises is professional components. We’re partnering with SyncFusion, whose Essential Studio product now includes a range of high-quality Flutter components including charting, PDF manipulation and barcode generation. With their 2020.1 release, all components support Android, iOS and web out of the box, and they now have a web-based preview of their controls.

Updating our release process

Lastly, as we look towards our next stable release, we wanted to share some changes we’re making to our release model that we think will further improve stability and predictability of our releases.

Today’s release process was designed to be simple and low maintenance. This process served Flutter well when we were a smaller team and a more nascent framework, but at our current scale, we have encountered some issues affecting Flutter contributors and developers including:

lack of clarity on when the release would be built, and therefore what code was in it

lack of testing for branches causing hotfix releases to have regressions

Starting with the April release of Flutter, we are moving to a branching model with a stabilization period for beta and stable releases. We will now branch at the beginning of the month for a beta release and stabilize this release by cherry-picking any critical fixes. Roughly once a quarter, the current beta branch will be promoted to our stable release. We will continue to do hotfixes on this release if necessary. Our infrastructure now supports testing against branches, meaning we can validate cherrypicks and will accept some requests based on severity.

We also took this opportunity to align the Flutter and Dart release processes and channels. As a result, Dart has added a beta channel, and moving forward releases will be synced (for example, Flutter beta releases will contain a Dart beta release).

If you’re already shipping a Flutter app based on the stable channel, we encourage you to test your app on beta candidate releases and influence the quality of the stable release by reporting any issues. You can also escalate regressions or blocking bugs on the stable channel following the new Flutter cherry-pick process on the Flutter wiki.

We think this new process will both provide higher confidence in the quality and predictability of our releases, and an easier way to deliver hotfixes to the stable channel.

Versioning changes

As a part of this branching model, we are making some minor changes to the way releases are versioned.

The full technical details can be found at the Flutter build release channels wiki page; a quick summary follows:

Non-stable release versions will be annotated with .pre in the version string to denote their pre-release status. Given a version string of x.y.z-n.m.pre , dev channel builds will increment n each time a new one is built from master .

1.18.0–1.0.pre : first dev build after master moves to 1.18

: first build after moves to 1.18.0–2.0.pre : next dev build from a more recent point on master

Beta releases will be built from a dev release point, as above. When we do cherry-picks on one of these releases, the m version will increment. For example, if we took the 15th dev build from master as our 1.18 release from beta , the versioning would look like:

1.18.0–15.0.pre : initial beta candidate (same release that went to dev )

: initial candidate (same release that went to ) 1.18.0–15.1.pre : subsequent build on the (now) beta branch with some cherry-picks

: subsequent build on the (now) branch with some cherry-picks 1.18.0–15.2.pre : second subsequent build

Stable releases will be versioned x.y.0 . Subsequent hotfix releases, if necessary, will increment the patch number. x.y.1 , x.y.2 , etc.)

1.18.0–15.4.pre : last beta build on branch

: last beta build on branch 1.18.0 : stable release, same bits as 1.18.0–15.4-pre

: stable release, same bits as 1.18.1 : potential hotfix of 1.18.0

What’s next?

Our first release using this new versioning model will be our next stable release, which we plan to ship next week. Come back then for a full rundown of all the new features.

In the meantime, check out some of the other announcements we’ve made over the last couple of weeks. Last week, we announced CodePen support of Flutter. We are enjoying seeing the pens that various creators have built over the last few days. Here are a few of our favorites: