Dart is a programming language developed by Google, first unveiled in October 2011 and aimed at building structured client applications. It is a strongly typed, object-oriented language in which everything is an object inheriting from a common Object type, with support for generics, first-class functions, type inference, and built-in asynchronous programming through async/await, Future, and Stream. Although it was initially positioned as an alternative to JavaScript for web development, Dart found its most enduring role as the language behind the Flutter UI toolkit.
A distinctive strength of Dart is its dual compilation model. During development it can run via just-in-time (JIT) compilation, which enables fast incremental rebuilds and supports Flutter’s stateful hot reload. For production, Dart compiles ahead-of-time (AOT) to native machine code, giving shipped applications predictable startup and runtime performance. Dart can also compile to JavaScript for the web, allowing the same language to target browsers as well as native platforms.
Dart’s type system evolved significantly over its lifetime. The language reached its 1.0 milestone, and then Dart 2.0 introduced a new sound type system; before 2.0 the language was not fully sound and relied more heavily on runtime type checking, so 1.x code had to be migrated. The official evolution documentation records this transition as a deliberate move toward static soundness.
A major later addition was sound null safety, introduced in Dart 2.12 (released in March 2021). Under null safety, types are non-nullable by default, and a variable cannot hold null unless its type is explicitly marked nullable with a trailing question mark; the exclamation operator asserts that a value is non-null. This shifted a large class of null-reference errors from runtime crashes to compile-time errors. With the Dart 3.0 release, support for pre-2.12 language versions was dropped, making sound null safety mandatory for modern Dart code.
As a managed language, Dart uses automatic memory management with garbage collection, freeing developers from manual allocation. Its combination of a familiar object-oriented syntax, sound static typing, null safety, and flexible compilation made it well suited to Flutter’s needs, and the language’s development has been closely tied to the growth of that framework.