Dart 3.13.1
Dart 3.13.1, a stable release of the Dart SDK, is now available. Released on August 18, 2026, the headline change is the arrival of primary constructors in the language, alongside new dart:core and dart:io additions, a set of synchronous concurrency APIs in dart:isolate, and fresh analyzer lints. Here is the formal rundown.
Overview
Dart 3.13 lands on the stable channel and pairs with the current Flutter 3.47 toolchain. This is a feature release rather than a pure maintenance pass: it introduces one new language feature of note and rounds out several library and tooling gaps that had been accumulating through the 3.12 line.
Primary Constructors
The marquee feature is primary constructors. It introduces no new semantics — it is purely a brevity feature — but it lets you express a class, its constructor, and a set of instance variables in a single declaration header. To opt in, set your package's SDK lower bound to 3.13 or greater (sdk: '^3.13.0').
Instead of writing a constructor and field declarations by hand, you can now declare them inline:
// Before
class Point {
int x;
int y;
Point(this.x, this.y);
}
// After
class Point(var int x, var int y);
When a primary constructor needs an initializer list or a body, you specify them inside the class using the this body syntax:
class Point(var int x, var int y) {
this : assert(x >= 0) {
print('Point created at $x, $y');
}
}
The feature also lets you use new and factory keywords to declare constructors in the class body without repeating the class name — for example new(this.x, this.y) for the default constructor, or a named new origin().
Library Additions
dart:async— AddedFuture.pauseas a simpler alternative toFuture.delayedwith no callback.dart:core— AddedList.unmodifiableOfandMap.unmodifiableOfwith better typing than theirunmodifiableequivalents.dart:core— Two new efficient bit-counting getters onint:trailingZeroBitCount(ctz) andoneBitCount(popcount).dart:io— File access and modification timestamps now preserve microsecond precision instead of truncating to milliseconds.dart:io— The cookie-date parser has been restored to the permissive algorithm the RFC specifies.
Synchronous Concurrency in dart:isolate
Several new APIs bring synchronous execution and event-loop control to Isolate: Isolate.runSync, Isolate.create, Isolate.shutdownSync, Isolate.pinToCurrentThread, Isolate.isPinnedToCurrentThread, Isolate.runEventLoopSync, Isolate.onEvent, and Isolate.handleEvent.
Breaking Changes and Deprecations
- A minor change to type promotion avoids unsound behavior (SDK issue #62889).
NetworkInterface.addressesnow returnsList<InterfaceAddress>instead ofList<InternetAddress>; code that overridesaddressesmust update its return type.InternetAddress.lookupno longer accepts invalid IPv4 addresses traditionally accepted byinet_aton.
Tooling
The analyzer gains LSP support for Inline Values (textDocument/inlineValue) so IDEs and debuggers can render inline variable evaluations during debugging. Custom LSP methods expose Flutter Widget Preview metadata and let clients pair the Analysis Server with the Dart Tooling Daemon. Two new lints — no_raw_types and no_dynamic_casts — replace the older strict-raw-types and strict-casts options.
Upgrade
Set your SDK constraint to sdk: '^3.13.0' and update dependencies. The usual dart pub upgrade will pull the new SDK toolchain. Review the breaking changes above before upgrading, particularly the NetworkInterface.addresses return-type change if you work with network interfaces.