Announcing Dart 2 Stable and the Dart Web Platform

Signals the rebirth of Dart as a mainstream programming language for mobile and web development

Kevin Moore
Aug 7, 2018 · 7 min read

Today, we’re announcing the immediate availability of the stable release of Dart 2, including a rewrite of the Dart web platform that offers a unique combination of productivity, performance and scalability.

Flutter developers are already enjoying many of the benefits of Dart 2, since Flutter has been bundling prerelease versions of the Dart 2 SDK for several months. However, the stable release of Dart 2 is another important milestone towards the stable release of Flutter, due to the tight coupling between framework and language. If you haven’t already installed Flutter, start here.

With the release of Dart 2, web developers can now leverage the same language, libraries and tools along with a number of web-specific enhancements. Web developers should start at the Get Started page for instructions on installing tools and building a first application.

Dart: Growing Excitement

Over the last year, Dart has seen dramatic growth. Our own analytics suggest a ten-fold growth in external usage. In the last quarter, Dart was one of the fastest growing languages on GitHub, as measured by pull requests; the growth of StackOverflow questions also provides a vivid demonstration of Dart’s momentum:

Internally, Dart is one of a handful of languages Google uses for web application development, with millions of lines of code from dozens of different projects including Google Ads, Google Shopping and our own internal infrastructure teams.

In fact, you might already be using Dart without realizing it: the popular Sass stylesheet preprocessor was recently rewritten in Dart to make it faster, more portable, and easier to write. Sass is now distributed as a standalone executable on Homebrew and Chocolatey, and compiled to pure JavaScript on npm. Dart makes it easy to install applications anywhere without external dependencies, and to slot into the workflows of both people who use Dart and people who don’t.

Dart 2 is focused on three areas: strengthening and tightening the language, developing our support for web and mobile frameworks, and bringing some of the tooling and components that support Google’s usage of Dart to the outside world. The rest of this post will explore these themes.

Dart 2: A Client-Optimized Language

With Dart 2, you can’t get into a state where an expression evaluates to a value that doesn’t match the expression’s static type. This means that you can scale your codebase to millions of lines, tackle large refactoring projects, and deploy your code with confidence.

Don’t worry: soundness doesn’t mean mountains of boilerplate. The type system includes advanced inference — even for generic type arguments.

final _field = [3.14, 6.28];void main() {
// No type parameter is provided, but <int> is inferred
print([1, 2, 3].runtimeType); // List<int>
// If types are unmatched, their common base type is used
// int (1) and double (3.14) are both `num`
print([1, 3.14].runtimeType); // List<num>
// Inference goes beyond variables.
// You can omit types on fields, too.
print(_field.runtimeType); // List<double>

To learn more about the Dart 2 type system, check out this page.

As mentioned in previous blog posts, Dart 2 also reduces the language ceremony in a few key areas: for example, the new keyword is now optional, and the const keyword is optional within a constant context.

Lastly, we’ve done lots of work behind the scenes to unify various supporting tools, with a common front-end that now supports our compilers and runtimes. This ensures consistency for our users now and promises to improve the velocity and quality of new features as Dart continues to evolve.

Dart on the Web: A Rich, Powerful Framework

While the core Dart SDK provides libraries to access modern browser APIs, we also support a robust Angular-inspired framework for building complex web applications. AngularDart 5, shipped as part of Dart 2, takes advantage of Dart’s sound type system and the new build system (described below) to offer fast incremental builds during development and smaller compiled JavaScript when you’re ready to deploy.

One major area of focus for this release has been improving the amount of code that is processed on page load, significantly reducing the ‘time to interactivity’ for web pages. Many apps have seen code size reduced by more than half compared to AngularDart 4.

To showcase the improvements in Dart’s web platform, we built out a Dart-based client implementation for the HackerNews site as a Progressive Web App; this is published along with other sample implementations at the popular HNPWA site. Using best practices for building Dart web apps, we were able to ship a full-featured experience that is fully interactive in one second on modern devices and under five seconds on a modest mobile device on a slow 3G network. This is competitive even with lightweight web frameworks that are optimized for smaller apps.

Our framework investments extend to our core components, which we’ve also updated. You now have access to 100 new classes, including a number of date, time, and menu Material components. You can explore all of our components in the component gallery.

Material Date Picker — one of the rich components available for your web application

Flexible Tooling for Dart 2

With Dart 2, our web tools embrace a 100% JavaScript development model with two complementary JavaScript compilers. The development compiler, dartdevc, provides fast incremental compilation while generating JavaScript that is easy to read and debug. This allows our production compiler, dart2js, to focus on producing highly optimized JavaScript for progressive web apps for mobile and complex enterprise experiences for the desktop. Both compilers leverage Dart’s sound type system to optimize their output.

Our web tools are based on a new build system, designed to be fast, debuggable, and extensible. Now tasks like generating serialization code, compiling Sass to CSS and compiling Dart to JavaScript happen in one toolchain that supports fast, incremental updates as you change parts of your application. The build system is also designed to support uses beyond the web. An example: it’s being used by Flutter developers, to generate JSON serialization code.

With Dart 2, we also have an expanded set of developer tools. In addition to support for Android Studio and the JetBrains suite of tools, including IntelliJ IDEA and WebStorm, we also support Visual Studio Code with the Dart Code extension. And we also have a great scratchpad for experimenting: DartPad, which has been fully updated for Dart 2.

Finally, the Dart SDK comes with a suite of other useful tools: a package manager that works with our package site, a static analyzer, a linter that you can consume from the command line or as a package, and tooling for web documentation and code formatting that conforms with the Dart style guide.

Learn more

The release notes provide a detailed technical breakdown of the numerous other smaller improvements made since Dart 1, some of which are breaking changes for older Dart code. If you run into problems that a Google search can’t solve, we recommend starting at StackOverflow. Subscribe to the Dart Announcements mailing list and follow us on Twitter to get updates. We’d also love to see you in our communities, for example the Gitter chat room and r/dartlang subreddit.

Thank you

We are grateful to the Dart and Flutter communities and well as the hundreds of Google engineers who have helped us on this journey. We couldn’t have done it without you!


Dart is a client-optimized language for fast apps on any platform.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store