Today, at Flutter Live,
we're announcing Flutter 1.0,
the first stable release of Google's UI toolkit for creating beautiful,
native experiences for iOS and Android from a single codebase.

Cross-platform mobile development today
is full of compromise. Developers are forced to choose between either
building the same app multiple times for multiple operating systems, or
to accept a lowest common denominator solution that trades native speed
and accuracy for portability. With Flutter, we believe we have a
solution that gives you the best of both worlds: hardware-accelerated
graphics and UI, powered by native ARM code, targeting both popular
mobile operating systems.

Introducing Flutter

Flutter doesn't replace the traditional
Apple and Android app models for building mobile apps; instead, it's an
app engine that you can either embed into an existing app or use for an
entirely new app.

We think of the characteristics of
Flutter along four dimensions:

Flutter enables you to build
beautiful apps. We want to enable designers to
deliver their full creative vision without being forced to water it
down due to limitations of the underlying framework. Flutter lets
you control every pixel on the screen, and its powerful compositing
capabilities let you overlay and animate graphics, video, text and
controls without limitation. Flutter includes a full set of widgets
that deliver pixel-perfect experiences on both iOS and Android. And
it enables the ultimate realization of Material Design, Google's
open design system for digital experiences.

Flutter is
fast.
It's powered by the same hardware-accelerated Skia 2D graphics
engine that underpins Chrome and Android. We architected Flutter to
be able to support glitch-free, jank-free graphics at the native
speed of your device. Flutter code is powered by the world-class
Dart platform, which enables compilation to native 32-bit and 64-bit
ARM code for iOS and Android.

Flutter is
productive.
Flutter introduces stateful hot reload, a revolutionary new
capability for mobile developers and designers to iterate on their
apps in real time. With stateful hot reload, you can make changes to
the code of your app and see the results instantly without
restarting your app or losing its state. Stateful hot reload
transforms the way developers build an app -- and in user surveys,
developers say it makes their development cycle three times more
productive.

Lastly, Flutter is
open. Flutter is an open source project with a
BSD-style license, and includes the contributions of hundreds of
developers from around the world. In addition, there's a vibrant
ecosystem of thousands of plug-ins. And because every Flutter app is
a native app that uses the standard Android and iOS build tools, you
can access everything from the underlying operating system,
including code and UI written in Kotlin or Java on Android, and
Swift or Objective-C on iOS.

Put this all together, combine it with
best-in-class tooling for Visual Studio Code, Android Studio, IntelliJ
or the programmer's editor of your choice, and you have Flutter -- a
development environment for building beautiful native experiences for
iOS or Android from a single codebase.

Flutter Growth and Momentum

We announced the first beta of Flutter at
Mobile World Congress ten months ago, and we've been excited to see how
quickly it has been adopted by the broader community, as evidenced by
the thousands of Flutter apps that are already published to the Apple
and Google Play stores even before our 1.0 release. It's clear that
developers are ready for a new approach to UI development.

Internally, Flutter is being used at
Google for a wide array of products, with Google Ads
already having switched to Flutter for their iOS and Android app. And
even before 1.0, a wide range of global customers including Abbey Road
Studios, Alibaba, Capital One, Groupon, Hamilton, JD.com, Philips Hue,
Reflectly, and Tencent are developing or shipping apps with Flutter.

Michael Jones, Senior Director of
Engineering from the Capital One team, says the following about their
experiences with Flutter:

"We are excited by Flutter's unique
take on high-performing cross-platform development. Our engineers
have appreciated the rapid development promise and hot reload
capabilities, and over the past year we have seen tremendous
progress in the framework and especially the native integration
story.

"Flutter can allow Capital One to
think of features not in an 'iOS or Android-first' fashion, but
rather in a true mobile-first model. We are excited to see Flutter
1.0 and continue to be impressed with the pace of advancement and
the excitement in the engineering community."

At the Flutter Live event today, the
popular payment service Square announced two new Flutter SDKs
that make it easy to accept payments for goods and services with
Flutter, whether in-person using a Square payment reader or by taking
payments inside a mobile app. Square demonstrated an example of using
their payments SDK using an app from Collins Family Orchards,
a family farm that grows and sells fruit in farmers markets around the
Pacific Northwest.

The developer of the Collins Family
Orchards app, Dean Papastrat, had this to say about his experience:

"I was blown away by the speed of all
the animations and transitions in production builds. As a web
developer, it was super easy to make the transition to Flutter, and
I can't believe I was able to build a fully working app that can
take payments in just a week."

Also at Flutter Live, 2Dimensions
announced the immediate availability of Flare,
a remarkable new tool for designers to create vector animations that can
be embedded directly into a Flutter app and manipulated with code. Flare
eliminates the need to design in one app, animate in another, then
convert all of that to device-specific assets and code.

Animations built with Flare can be
embedded into an existing Flutter app as a widget, allowing them to
participate in the full compositor and be overlaid with other text,
graphical layers or even UI widgets. Integrating in this way frees
animations from the 'black box' limitations of other architectures, and
allows ongoing collaboration between designers and developers right up
to the completion of the app. Such tight integration between Flutter and
Flare provides a uniquely compelling offering for digital designers and
animators who want to create highly-polished mobile experiences.

Another partner who has bet on Flutter is
Nevercode,
a fast-growing provider of continuous integration and delivery (CI/CD)
tooling for mobile apps. At Flutter Live, they announced Codemagic,
a new tool designed specifically for Flutter to make it easy to automate
the process of building and packaging Flutter apps for both Android and
iOS from a single automation. Available today in beta, Codemagic allows
you to select a GitHub repo containing a Flutter project, and with just
a few clicks, create continuous build flows that run tests, and generate
binary app bundles that you can upload to the Apple and Google Play
stores.

We put together a short video to
highlight the range and variety of the apps developers have been
building with Flutter since the beta:

New Features in Flutter 1.0

Since the first beta, we've been working
to add features and polish to Flutter. In particular, we rounded out our
support for pixel-perfect iOS apps
with new widgets; added support for nearly twenty different Firebase
services; and worked on improving performance and reducing the size of
Flutter apps. We've also closed out thousands of issues based on
feedback from the community.

Flutter also includes the latest version
of the Dart platform, 2.1, an update to Dart 2 that offers smaller code
size, faster type checks, and better usability for type errors. Dart 2.1
also has new language features to improve productivity when building
user experiences. Developers who have already adopted Dart 2.1 tell us
they're seeing significant speed improvements just by switching to the
latest engine:

While the primary focus of the 1.0
release is bug fixes and stabilization, we're also introducing previews
of two major new features for developers to try out in preview mode that
we anticipate will ship in our next quarterly release in February 2019:
Add to App and platform views.

Add to App

When we first built Flutter, we focused
on productivity for the scenario where someone is building a new
application from scratch. But of course, not everyone has the luxury of
being able to start with a clean slate. Talking to some of our larger
customers, it was clear that they wanted to use Flutter for new user
journeys or features within an existing application, or to convert their
existing application to Flutter in stages.

The architecture of Flutter supports this
model well: after all, every Flutter app includes a host Android and iOS
container. But we've been working to make it easier to incrementally
adopt Flutter by updating our templates, tooling and guidance for
existing apps. We've made it easier to share assets between Flutter and
host code. And we've also reworked the tooling to make it easy to attach
to an existing Flutter process without launching the debugger with the
application.

We will continue to work to make this
experience even better. Even though a number of customers are already
using our guidance on Add to App successfully, we're continuing to add
samples and expand support for complex scenarios. In the meantime, our
instructions for adding Flutter to existing
apps are on our wiki, and you can
track the remaining work on the GitHub project board.

Platform Views

While Add To App is useful as a way to
gradually introduce Flutter to an existing application, sometimes it's
useful to go the other way round and embed an Android or iPhone platform
control in a Flutter app.

So we've introduced platform view widgets
(AndroidView
and UiKitView)
that let you embed this kind of content on each platform. We've been
previewing Android support for a couple of months, but now we're
expanding support to iOS, and starting to add plug-ins like Google Maps
and WebView
that take advantage of this.

Like other components, our platform view
widgets participate in the composition model, which means that you can
integrate it with other Flutter content. For example, in the screenshot
above, the floating action button in the bottom right corner is a
Flutter widget that has background color with 50% alpha. This
demonstrates the unique architectural advantages of Flutter well.

While this work is ready for developers
to try out, we're continuing to work on improving performance and device
compatibility, so we recommend caution if deploying apps that depend on
PlatformViews. We're continuing to actively optimize platform views and
expect them to be ready for production in time for our next quarterly
update.

Flutter Beyond Mobile

The primary target for Flutter has so far
been iOS and Android. Yet our ambitions for Flutter extend beyond mobile
to a broader set of platforms. Indeed, from the outset Flutter was
architected as a portable UI toolkit that is flexible enough to go
wherever pixels are painted.

Some of this work has already been taking
place in the open. Flutter Desktop Embedding
is an early-stage project that brings Flutter to desktop operating
systems including Windows, MacOS, and Linux. We also recently published
informal details of using
Flutter on Raspberry Pi, as a way
to demonstrate Flutter embedding support to smaller-scale devices that
may not include a full desktop environment.

This week, at Flutter Live, we gave the
first sneak peek of an experimental project we're working on in the labs
that significantly expands where Flutter can run.

Hummingbird is a web-based implementation
of the Flutter runtime that takes advantage of the capability of the
Dart platform to compile not just to native ARM code but also to
JavaScript. This enables Flutter code to run on the standards-based web
without change.

Of course, mobile remains our immediate
priority, and you can expect to see the bulk of our investment in these
core mobile scenarios over the coming months.

Conclusion

With the release of Flutter 1.0, we've
established a new 'stable' channel, in addition to the existing beta,
dev, and master channels. The stable channel updates less often than
other channels, but we have a higher confidence in its quality since
builds have already been vetted through the other channels. We
anticipate that we'll update our stable channel on a quarterly basis
with our most battle-tested builds.

We owe a particular debt to the early
adopters who have joined us on the journey so far, providing feedback,
identifying issues, creating content, and generally shaping the product.
The Flutter community is one of our greatest assets as a project: a
welcoming, diverse, helpful group of individuals who volunteer
selflessly because they also care about this open source project. Thank
you!