Dart
The language of the Flutter framework: one codebase compiled to mobile, web, and desktop.
27 steps across 1 tours, from the basics to complete programs.
The tours
- First released
- 2011
- Created by
- Google (Lars Bak and Kasper Lund)
- Typing
- Static with inference and sound null safety; hot reload sets the tempo
- Snippets target
- 3.12
- File extensions
- .dart
What it is for
Dart is, above all, the language of Flutter: Google's UI toolkit renders pixel-identical interfaces on iOS, Android, web, Windows, macOS, and Linux from one Dart codebase, and that pairing carries most of the language's enormous app-store footprint. The language was built for the job — ahead-of-time compilation to native ARM for release builds, a JIT with stateful hot reload for development, so the edit-see loop feels like a scripting language while shipping like a compiled one.
The language itself is a pragmatic, modern object language: sound null safety baked into the type system since 2021, records and full pattern matching since Dart 3, mixins, extension methods, and async/await over Futures and Streams as the only concurrency story an app developer usually needs. Isolates — share-nothing workers passing messages — cover the rest without data races.
Beyond Flutter it compiles to JavaScript and WebAssembly for the web, runs CLI tools and servers on its own VM, and keeps a tidy package ecosystem on pub.dev. It is rarely anyone's first language and often their second favorite: the one they learned for Flutter and kept for how little it argues back.
Where it came from
Google unveiled Dart in October 2011, designed by Lars Bak — whose V8 engine had just made JavaScript fast — and Kasper Lund, aimed squarely at replacing JavaScript with something structured. The web had other plans: no other browser vendor would embed the Dart VM, and by 2015 Google dropped that ambition in favor of compiling Dart to JavaScript.
The language found its purpose when Flutter, which had picked Dart in 2014 for its mix of AOT compilation and hot reload, hit 1.0 in December 2018. Dart 2 had just rebuilt the language around a sound static type system, shedding the optional-typing experiment of its first decade; adoption from there tracked Flutter's climb into one of the most-used cross-platform frameworks.
Dart 2.12 delivered sound null safety in 2021, migrating the entire ecosystem; Dart 3 in 2023 made it mandatory and added records, patterns, sealed classes, and class modifiers. Since then the frontier has been the web again — this time compiling to WebAssembly — and macros and static metaprogramming on the horizon.
What it is like to type
Dart types like Java with the ceremony sanded off: the same braces, semicolons, and dots, but var and final open most lines and the types mostly infer. String interpolation keeps $ busy, => ends small functions before they start feeling heavy, and the null-safety punctuation — ?., ??, ??=, the occasional ! — works the right-hand pinky. Dart 3 brought => arms to switch and record parentheses everywhere; cascades (..sort()) and named arguments (count: 2) are the local accent. Nothing exotic under the fingers, which is rather the point.
27 steps across 1 tours, from the basics to complete programs.
Official documentation
- dart.dev
- The language tour
- The core library reference
- Effective Dart (the style guide)
- pub.dev, the package repository