NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #126 most downloaded on pub.dev
A package for authoring build_runner compatible code generators.
Last release 1 months ago
02 Sep 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
111 releases · first in 2016
- Added Resolvers.reset method.
Resolvers.reset method.Increased the upper bound for the sdk to <3.0.0.
<3.0.0.Throw when attempting to use a BuildStep after it has been completed.
BuildStep after it has been completed.One column per quarter.
Added List get pathSegments to AssetId.
List<String> get pathSegments to AssetId.log will now always return a Logger instance.package:analyzer 0.32.0.Add exclude support to FileDeletingBuilder.
FileDeletingBuilder.Add PostProcesBuilderFactory typedef.
FileDeletingBuilder.PostProcesBuilderFactory typedef.Added an isRoot boolean to BuilderOptions, which allows builders to have different behavior for the root package, if desired.
isRoot boolean to BuilderOptions, which allows builders to have
different behavior for the root package, if desired.PostProcessBuilder. This is only supported by build_runner.Include stack trace in log for exceptions throw by builders.
Add BuilderOptions.empty and BuilderOptions.overrideWith.
BuilderOptions.empty and BuilderOptions.overrideWith.Added the Future digest(AssetId id) method to the AssetReader interface. There is a default implementation which uses readAsBytes and md5.
Future<Digest> digest(AssetId id) method to the AssetReader
interface. There is a default implementation which uses readAsBytes and
md5.Support the latest analyzer package.
analyzer package.Bug Fix Correctly handle encoding AssetIds as URIs when they contain characters which are not valid for a path segment.
AssetIds as URIs when they contain
characters which are not valid for a path segment.Bug Fix: MultiplexingBuilder now filters inputs rather than calling _every_ builder on any input that matched _any_ builder.
MultiplexingBuilder now filters inputs rather than calling every
builder on any input that matched any builder.Add BuilderOptions and BuilderFactory interfaces. Along with package:build_config this will offer a consistent way to describe and create the Builder
BuilderOptions and BuilderFactory interfaces. Along with
package:build_config this will offer a consistent way to describe and create
the Builder instances exposed by a package.Breaking: AssetReader.findAssets now returns a Stream instead of an Iterable . This also impacts BuildStep since that implements AssetReader.
AssetReader.findAssets now returns a Stream<AssetId>
instead of an Iterable<AssetId>. This also impacts BuildStep since that
implements AssetReader.Added the MultiPackageAssetReader interface which allows globbing within any package.
MultiPackageAssetReader interface which allows globbing within
any package.
BuildStep class does not implement this interface.AssetReader#findAssets have changed such that it globs within
the current package instead of the root package (typically defined as
buildStep.inputId.package).
Fix an issue where multiple ResourceManagers would share Resource instances if running at the same time.
ResourceManagers would share Resource
instances if running at the same time.Remove restrictions around the root package when Builders are running. It is the responsibility of the build system to ensure that builders are only r
Resource class, and BuildStep#fetchResource method.Breaking: Removed deprecated method BuildStep.hasInput - all uses should be going through BuildStep.canRead.
BuildStep.hasInput - all uses should
be going through BuildStep.canRead.Resolver has asynchronous APIs for resolution and is retrieved
synchronously from the BuildStep.Resolver.getLibrary with libraryFor and
getLibraryByName with findLibraryByName.AssetReader.canRead to always return a Future.Bug Fix: Capture asynchronous errors during asset writing.
Add support for resolving asset: URIs into AssetIds
asset: URIs into AssetIdsuri property on AssetIdNothing published for this version
Skip Builders which would produce no outputs.
Deprecate BuildStep.hasInput in favor of BuildStep.canRead.
BuildStep.hasInput in favor of BuildStep.canRead.AssetReader.hasInput as canRead. This is breaking for implementers
of AssetReader and for any clients passing a BuildStep as an AssetReadercanRead return a FutureOr for more flexibilityManagedBuildStep class.BuildStep.logger. All logging should go through the top level log.BuildStep.writeAs* methods now take a FutureOr for content. Builders which
produce content asynchronously can now set up the write without waiting for it
to resolve.declareOutputs is replaced with buildExtensions. All Builder
implementations must now have outputs that vary only based on the extensions
of inputs, rather than based on any part of the AssetId.Add AssetReader.findAssets to allow listing assets by glob.
AssetReader.findAssets to allow listing assets by glob.Add BuildStep.inputLibrary as a convenience.
BuildStep.inputLibrary as a convenience.AssetId.resolve to prepend lib/ when resolving packages.Add an AssetId.resolve constructor to easily construct AssetIds from import uris.
AssetId.resolve constructor to easily construct AssetIds from import
uris.log.info. Depending on the environment a print can be hazardous so this
makes all builders safe and consistent by default.Deprecate BuildStep.logger - it is replaced by log
log getter which is scoped to running builds and can be used
anywhere within a build rather than passing around a logger. This replaces the
BuildStep.logger field.BuildStep.logger - it is replaced by logManagedBuildStep, all build runs should go through runBuilders.Use comment syntax for generic method - not everyone is on an SDK version that supports the real syntax.
This will hopefully be the last breaking change before the 1.0 release, but it is a fairly large one.
A number of changes to the apis, primarily to support reading/writing as bytes,
as this is going to inevitably be a required feature. This will hopefully be the
last breaking change before the 1.0 release, but it is a fairly large one.
AssetWriter class now has a
Future writeAsBytes(AssetId id, List<int> bytes) method.AssetReader class now has a Future<List<int>> readAsBytes(AssetId id)
method.Resolver#release on any resolvers you get from
a BuildStep (in fact, the Resolver interface no longer has this method).BuildStep#resolver getter, which resolves the primary input,
and returns a Future<Resolver>. This replaces the BuildStep#resolve
method.Resolver has a new isLibrary method to check whether an asset is a Dart
library source file before trying to resolve it's LibraryElementAsset class has been removed entirely.AssetWriter#writeAsString signature has changed to
Future writeAsString(AssetId id, String contents, {Encoding encoding}).AssetWriterSpy#assetsWritten getter has changed from an
Iterable<Asset> to an Iterable<AssetId>.BuildStep#input has been changed to BuildStep#inputId, and its type has
changed from Asset to AssetId. This means you must now use
BuildStep#readAsString or BuildStep#readAsBytes to read the primary input,
instead of it already being read in for you.Resolver no longer has a release method (they are released for you).BuildStep#resolve no longer exists, and has been replaced with the
BuildStep#resolver getter.Resolver.getLibrary will now throw a NonLibraryAssetException instead of
return null if it is asked to resolve an impossible library.Note: The changes to AssetReader and AssetWriter also affect BuildStep
and other classes that implement those interfaces.
Add hook for build_barback to write assets from a Future
build_barback to write assets from a Future- Remove unused dependencies
BuildStep now implements AssetReader and AssetWriter so it's easier to share with other code paths using a more limited interface.
BuildStep now implements AssetReader and AssetWriter so it's easier to
share with other code paths using a more limited interface.BREAKING Move some classes and methods out of this package. If you are using build, watch, or serve, along with PhaseGroup and related classes add a d
build, watch, or serve, along with PhaseGroup and related
classes add a dependency on build_runner. If you are using
BuilderTransformer or TansformerBuilder add a dependency on
build_barback.const Resolvers() as a default instance import build_barback
and used const BarbackResolvers() instead.BREAKING BuilderTransformer must be constructed with a single Builder. Use the MultiplexingBuilder to cover cases with a list of builders
- Support analyzer 0.28.x
- Support analyzer 0.29.x
Stop using removed argument useSharedSources when constructing Resolvers
useSharedSources when constructing ResolversWith the default logger, print exceptions with a terse stack trace.
dev_dependencies so tests run.BREAKING BuilderTransformer must be constructed with a List rather than inherit and override.
BREAKING Renamed values of three enums to be lower-case: BuildType, BuildStatus, and PackageDependencyType.
BuildType, BuildStatus, and PackageDependencyType.buildStep.resolve.Resolvers instance.Fix an AssetGraph bug where generated nodes might be created as non-generated nodes if they are attempted to be read from previous build steps.
Enable serving files outside the server root by default (enables serving files from other packages).
Fixed BuilderTransformer so that logs are passed on to the TransformLogger.
Add error and stack trace to log messages from the BuilderTransformer.
Fix duplicate logs issue when running as a BuilderTransformer.
Fix duplicate logs issue when running as a BuilderTransformer.
Support crypto 2.0.0.
Convert packages paths in the file watcher to their absolute paths. This fixes #109.
packages paths in the file watcher to their absolute paths. This
fixes #109.Added the deleteFilesByDefault option to all top level methods. This will skip the prompt to delete files, and instead act as if you responded y.
deleteFilesByDefault option to all top level methods. This will
skip the prompt to delete files, and instead act as if you responded y.
Updated the top level classes to take a PhaseGroup instead of a List >.
PhaseGroup instead of a
List<List<Phase>>..build folder to .dart_tool/build. Other packages in the future
may also use this folder.Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →