NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2487 most downloaded on crates.io
Track and query Cargo dependency graphs.
Last release 14 days ago
24 Sep 2026
Ships fairly regularly
a new release about every 6 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
3 versions withdrawn
withdrawn after publishing
7 years old
78 releases · first in 2019
custom-platforms : Add support for custom platforms specified as JSON.
New features:
custom-platforms: Add support for custom platforms specified as JSON.custom-cfg-platforms: Add support for custom platforms specified as rustc --print=cfg output.These features forward to target-spec's custom and custom-cfg features, respectively.
Thanks UebelAndre for your contribution!
ConditionalLink::declarations , which returns a new LinkDeclarations enum: whether the link's platform statuses were derived from every declaration of
ConditionalLink::declarations, which returns a new LinkDeclarationsUnsplit), only the ones withoutoptional = true (Required), or only the ones with it (Optional).LinkDeclarations::includes_required and includes_optional answer whetherConditionalLink::package_link is replaced by package_links, an iterator
over every PackageLink the conditional link was derived from. This is
usually one link, but one dependency name can resolve to several packages,
either through a package = "..." rename or through different versions of
one package declared for different targets. For example, consider this
Cargo.toml:
[package]
name = "main"
[dependencies]
serde = { package = "serde_core", version = "1", optional = true }
[target.'cfg(any())'.dependencies]
serde = { version = "1", optional = true }
[features]
serde = ["dep:serde", "serde/std"]The package graph has two links out of main, main -> serde_core and
main -> serde, both with the dependency name serde. The feature serde
produces three conditional links:
main/serde -> main/dep:serde, from dep:serde. This activates thepackage_links returns both main -> serde_core andmain -> serde.main/serde -> serde_core/std, from serde/std. package_links returnsmain -> serde_core.main/serde -> serde/std, also from serde/std. package_links returnsmain -> serde.FeatureQuery::resolve_with and resolve_with_fn now visit a weak dependency
feature (dep?/feature) once for each kind of declaration of dep, not once
for the whole edge. Consider:
[dependencies]
foo = { version = "1" }
[build-dependencies]
foo = { version = "1", optional = true }
[features]
weak = ["foo?/std"]The visitor sees weak -> foo/std as a Required link covering
[dependencies]. If dep:foo is activated, it sees the same endpoints again
as an Optional link covering [build-dependencies]. The edge is followed if
the visitor accepts either link. Use ConditionalLink::declarations to tell
the two apart. FeatureSet::conditional_links is unchanged: it returns one
Unsplit link for the edge.
This is part of the fix to weak dependency features described below.
Features that refer to a dependency name shared by several packages now take
all of those packages into account (#682).
One dependency name can resolve to several packages, either through a
package = "..." rename or through different versions of one package
declared for different targets. For example, semver 1.0.28 does something
like this:
[dependencies]
serde = { version = "1", package = "serde_core", optional = true }
[target.'cfg(any())'.dependencies]
serde = { version = "1", optional = true }
[features]
serde = ["dep:serde"]The name serde resolves to both serde_core and serde. Previously, the
feature graph kept only one of the packages under each name. For semver,
that was serde, which cfg(any()) never builds, so enabling the serde
feature left serde_core out of guppy's feature resolution, and therefore
out of CargoSet results.
Now, matching Cargo:
dep:serde is activated wherever any declaration of serde applies.serde/feature turns on feature in each package, under that package'sdep:serde wherever anserde?/feature turns on feature in each package that is otherwiseAs a result, if only some of the packages under a name have a feature that
name/feature or name?/feature refers to, the feature graph now reports a
missing-feature warning for the others. (Cargo itself rejects such a
manifest, so this only happens with metadata that didn't come from Cargo.)
Thanks UebelAndre for your first
contribution!
With the version 2 and 3 feature resolvers, an optional build dependency
activated only through its own package's features was never built (#699):
[build-dependencies]
cc = { version = "1", optional = true }
[features]
bundled = ["dep:cc"]Enabling bundled now builds cc on the host, as Cargo does. cc/feature
entries and the version 1 resolver were not affected.
Fixed a number of more contrived cases in guppy's simulation of Cargo's
feature resolution:
Several bugs with weak dependency features (dep?/feature). guppy tracked
whether dep was activated at all, whereas Cargo resolves each declaration
of dep on its own. Consider:
[dependencies]
foo = { version = "1" }
bar = { version = "1", optional = true }
[build-dependencies]
foo = { version = "1", optional = true }
bar = { version = "1" }
helper = { version = "1" } # helper depends on foo itself
[features]
weak = ["foo?/std", "bar?/std"]Previously, enabling weak:
dep:foo, so foo was also built on the host. It no longerweak todep:foo. A dependency required on one platform and optional on anotherdep:foo added the same way.std on the foo that helper builds on the host, even thoughfoostd.dep:bar in the same way, so bar was also built on thebar only gets std on the host, where it is required, andOf these, the second did not affect the version 1 resolver, which unifies
features across the host and the target.
As part of this fix, FeatureQuery::resolve_with and resolve_with_fn
visit a weak dependency feature once for each kind of declaration. See the
entry under "Changed" above.
Reverse feature queries with FeatureQuery::resolve_with or
resolve_with_fn could leave out weak dependency features, depending on
which features the query started from. For example, regex-automata has:
[dependencies]
aho-corasick = { version = "1", optional = true }
[features]
logging = ["aho-corasick?/logging"]A reverse query from aho-corasick/logging did not return
regex-automata/logging.
Reverse queries now offer both links of a weak dependency feature as soon as
it is reached. With a visitor that accepts every link, a reverse query
returns the same set as FeatureQuery::resolve. Forward queries are
unchanged.
A foo/std entry could also turn on a feature named foo in the same
package, in cases where Cargo doesn't. For example:
[package]
name = "main"
[dependencies]
bar = { version = "1" }
[target.'cfg(unix)'.dependencies]
foo = { version = "1" }
[target.'cfg(windows)'.dependencies]
foo = { version = "1", optional = true }
[features]
foo-std = ["foo/std"]
bar = []
bar-std = ["bar/std"]On Unix:
foo-std turns on foo's std feature. It doesn't turn onmain's foo feature, because foo is only optional on Windows.bar-std turns on bar's std feature. It doesn't turn onmain's bar feature, because bar is never optional.Previously, guppy also turned on:
main's foo feature on Unix.main's bar feature on all platforms.guppy now matches Cargo:
foo/std only turns on main's foo feature if an optional declarationfoo applies to the platform. Here, that is true only on Windows.bar has no optional declarations, so bar/std never turns on main'sbar feature.As part of this change, ConditionalLink::declarations returns Optional,
not Unsplit, for the links from foo-std to dep:foo and to foo.
One column per quarter.
With the summaries feature, toml is updated to 1.1.4 ( #600 ). Error::TomlSerializeError now wraps toml 1.x's ser::Error , a breaking change for code…
PlatformSpec::Platforms, a new variant holding a list of platforms
(#438, #630), and PlatformSpec::platforms, a constructor that accepts
any iterator of Platform or Arc<Platform>. A query against Platforms is
enabled if it is enabled on at least one of the platforms. Platforms([]) is
the union of no platforms: nothing is enabled on it, not even unconditional
dependencies.
Per-platform results are combined with the same Kleene K3
OR
that guppy already uses to combine a dependency's target specs for a single
platform: Enabled wins, then Unknown, then Disabled.
PackageQuery and FeatureQuery are now represented as a set of initialPackageSet and FeatureSet (#609, #610).
PackageQuery::initials now returns a &PackageSet, andFeatureQuery::initials a &FeatureSet, rather than iterators overinitials().packages(direction) and initials().features(direction).PackageQuery::starts_from and FeatureQuery::starts_from are removed.initials().contains(id) instead, which returns the sameResult<bool, Error>.Debug output of both query types now goes through the set types'Debug impls. PackageQuery's Debug no longer dumps the entireFeatureQuery's now prints its initial packages withPackageResolver is now PackageLinkVisitor, and FeatureResolver isFeatureLinkVisitor. The "resolver" name was easily confused withaccept is now visit_link on both traits.visit_link (and the closures passed to PackageQuery::resolve_with_fnFeatureQuery::resolve_with_fn) takes a &PackageLinkContext or&FeatureLinkContext instead of a &PackageQuery or &FeatureQuery.query(); the context also providesdirection() and starts_from_initial(&link).CargoSet::with_package_resolver is nowCargoSet::with_cargo_link_visitor and takes a new CargoLinkVisitorguppy::graph::cargo). Its CargoLinkContext exposes whichbuild_platform()), the platformplatform_spec() and build_dep_platform_spec()), andconsiders_dev_deps and considers_build_deps respectively).proptest1 feature, Prop010Resolver is nowProp010LinkVisitor and PackageGraph::proptest1_resolver_strategy isproptest1_link_visitor_strategy.CargoOptions::new now defaults to version 3 of the Cargo featureset_resolver(CargoResolverVersion::V1).CargoSetInputs struct in guppy::graph::cargo combinesCargoOptions and the features-only set, and CargoSet now keeps a copyCargoSet::inputsCargoSet::features_only is removed; useinputs().features_only instead.summaries feature, CargoOptionsSummary is renamed toCargoSetInputsSummary, and CargoSet::to_summary uses the inputs thefeatures-only entry now recordsbase = false whenPlatformSpec::Platform is removed in favor of PlatformSpec::Platformssummaries feature, PlatformSpecSummary::PlatformPlatformSpecSummary::Platforms(Vec<PlatformSummary>) (#630).target-platform = [] or [[target-platform]]), which older versions ofguppy cannot read.summaries feature, PlatformSpecSummary::to_platform_spec nowPlatformSpecSummaryError, which names the platform that could notTargetSpecError (#628). The error alsoindex and count methods. Both its Display output andError::InvalidPlatformSpecSummary's name the triple and, for a list, the"always" and "any" insidespec alongside any platform key such as triple ortarget-features; unknown keys in a platform table; empty triples; andspec values other than "always" or "any". (Previously,spec = "<triple>" was silently treated as that platform.)PackageMetadata::minimum_rust_version is renamed toPackageMetadata::rust_version, replacing the deprecated method of thatrust_version now returns Option<&Version>Option<&VersionReq>.
.matches(version) on the old return value will fail toversion >= *rust_version instead.>=1.65.0 to a plain version such as1.65.0.summaries feature, toml is updated to 1.1.4 (#600).Error::TomlSerializeError now wraps toml 1.x's ser::Error, a breakingtomlThe following deprecated APIs are removed (#616):
PackageMetadata::rust_version's old form, deprecated since 0.17.1, whichOption<&VersionReq> with a single >=X.Y.Z comparatorrust-version field. See the rename above for theBuildTarget::doc_tests, deprecated since 0.17.16. UseBuildTarget::doctest_by_default instead.PlatformSpec::current, deprecated since 0.17.13. UsePlatformSpec::build_target instead.debug_ignore crate at the root of guppy.debug-ignore directly ifFeatureSet::union, intersection, difference and symmetric_differenceself's graph against itselfPackageSet operations already checked this correctly.)summaries feature, rebuilding Cargo set inputs from a summary noHakari::structural_excludes and Hakari::is_structural_excluded reportHakari::toml_name_map now returns an iddqd::IdOrdMap of TomlNameEntrytoml to 1.1.4 and toml_edit to 0.25.13.
HakariConfig::from_str, HakariBuilderSummary::to_string andHakariBuilderSummary::write_to_string now return error types from tomlTomlOutError::Toml wraps toml 1.x's ser::Error, a breakingtoml 0.5 parser accepted butdiffy to 0.5.2. hakari does not enable any ofdiffy's optional features. To use PatchFormatter::with_color, add adiffy 0.5 with the color feature enabled.[patch] section redirects theHakari::computed_map or Hakari::output_map. Previously, a third-partycamino's Hash implementation, which changed in camino 1.2.3. Thecamino 1.2.2 and earlier. Buildscamino 1.2.3 or later produced different names;Cargo.toml.A node with a self-loop edge -- typically a package with a path dev-dependency on its own crate, or a feature node like base/[base] arising from one -
A node with a self-loop edge -- typically a package with a path
dev-dependency on its own crate, or a feature node like base/[base]
arising from one -- was treated inconsistently by several APIs. The root
cause was that self-edges were counted as incoming edges in the SCC and
topological-sort machinery, which transitively confused everything built
on top:
Sccs::externals / forward roots. Previously, a package whose onlyquery_workspace().resolve().root_ids(_) did not see it, and forwardTopoWithCycles::new filteredCycles::is_cyclic and feature::Cycles::is_cyclic. Previously,true for every package or feature, regardlesstrue only when theCycles::all_cycles and feature::Cycles::all_cycles. Previously,all_cycles() andis_cyclic(x, x) agree on what counts as a cycle. (#590)FeatureGraphWarning::SelfLoop. Previously, this warning was[features] a = ["a"], which really are user errors. (#592)PackageGraph::directly_depends_on andFeatureGraph::directly_depends_on. Previously, both documentedfalse when the two IDs were equal. Thedep_graph.contains_edge(a, b),true for self-loop edges, so theFeatureGraph::directly_depends_on. Previously, the docstringfeature_a is a direct dependency offeature_b," with the operands inverted relative to the actualfeature_b is a direct dependency of feature_a.Cycles] type-level documentation. Previously, the long-formserde and serde_derive). It now also acknowledges single-nodeCargo metadata generated on Windows is now parseable on Unix. Windows paths are always normalized to forward slashes on Unix, which allows operations
Cargo metadata generated on Windows is now parseable on Unix. Windows paths are always normalized to forward slashes on Unix, which allows operations like .parent() to work. (Cross-platform parsing is not fully tested yet so you might run into issues. Please file a bug if you do.)
Workspace::build_directory() returns the build directory for intermediate build artifacts (requires Cargo 1.91+).
Workspace::build_directory() returns the build directory for intermediate build artifacts (requires Cargo 1.91+).Workspace::default_members() and Workspace::default_member_ids() iterate over workspace default members (requires Cargo 1.71+; returns empty iterator for older Cargo versions).PackageLink::registry() returns the registry URL for a dependency, if it uses a non-default registry.PackageLink::path() returns the file system path for path dependencies.Internal dependency update: cargo_metadata updated to 0.23.0.
cargo_metadata updated to 0.23.0.Replaced obsolete doc_auto_cfg with doc_cfg, to fix Rust nightly builds with the doc_cfg flag enabled.
Replaced obsolete doc_auto_cfg with doc_cfg, to fix Rust nightly builds with the doc_cfg flag enabled.
Internal dependency update: cargo_metadata updated to 0.22.0.
cargo_metadata updated to 0.22.0.Internal dependency update: cargo_metadata updated to 0.21.0.
cargo_metadata updated to 0.21.0.
Internal dependency update: cargo_metadata updated to 0.20.0.
cargo_metadata updated to 0.20.0.cargo_metadata. If you run into an error, please update your nightly toolchain. Nightly versions from at least 2024-07 do not appear to produce invalid metadata.CargoSet::with_package_resolver supports passing in a PackageResolver for additional dynamic filtering of dependency edges.
CargoSet::with_package_resolver supports passing in a PackageResolver for additional dynamic filtering of dependency edges.CargoSet::target_links and host_links return the set of PackageLink instances followed on the target and host platforms, respectively.Thanks to anforowicz for these contributions!
Add PlatformEval::target_specs to obtain the list of TargetSpec instances backing a platform evaluator. Thanks to anforowicz for the contribution!
PlatformEval::target_specs to obtain the list of TargetSpec instances backing a platform evaluator. Thanks to anforowicz for the contribution!BuildTarget::doc_tests is now BuildTarget::doctest_by_default. The old name has been deprecated, but is kept around for compatibility.
BuildTarget::test_by_default returns true if tests are run for a build target by default.BuildTarget::doc_by_default returns true if documentation is enabled for a build target, respectively.BuildTarget::doc_tests is now BuildTarget::doctest_by_default. The old name has been deprecated, but is kept around for compatibility.(This version was yanked due to incorrect documentation.)
(This version was yanked due to incorrect documentation.)
MetadataCommand::env adds environment variables to the cargo metadata command.
MetadataCommand::env adds environment variables to the cargo metadata command.
Thanks to anforowicz for your first contribution!
The old method is still available but has been marked deprecated.
PlatformSpec::current to PlatformSpec::build_target to indicate that it is determined at build time, not at runtime. The old method is still available but has been marked deprecated.Added support for custom sparse registries (sparse+https://...). Thanks to jonhoo for your first contribution!
Added support for custom sparse registries (sparse+https://...). Thanks to jonhoo for your first contribution!
Added support for the upcoming Cargo resolver version 3: within guppy, CargoResolverVersion::V3. Resolver version 3 enables MSRV-aware version resolut
Added support for the upcoming Cargo resolver version
3:
within guppy, CargoResolverVersion::V3. Resolver version 3 enables MSRV-aware
version resolution in Cargo.
The portion of dependency resolution that guppy works with (package and feature
resolution) happens after dependency versions have been resolved and
Cargo.lock is refreshed. This means that from guppy's perspective, resolver
version 3 is the same as version 2, and CargoResolverVersion::V3 acts as an
alias for CargoResolverVersion::V2.
Internal dependency update: cargo_metadata updated to 0.19.1.
cargo_metadata updated to 0.19.1.Graphs can now be generated even if the workspace Cargo.toml is within a subdirectory of one of its members. (This is an uncommon situation, but one t
Cargo.toml is within a subdirectory of one
of its members. (This is an uncommon situation, but one that is supported by Cargo.)cargo_metadata updated to 0.19.0.Fixed a case of dependency matching with renamed packages ([#317]).
target-spec to 3.2.2.### Changed - Update target-spec to 3.2.1.
target-spec to 3.2.1.Fixed feature graph construction accidentally inserting self-loops in some cases ([#292]). This was causing cargo-hakari to crash in some workspaces.
The Debug impl for FeatureSet is now more useful. (PRs welcome to make the Debug impls for types like PackageSet more useful as well.)
Debug impl for FeatureSet is now more useful. (PRs welcome to make the Debug impls for
types like PackageSet more useful as well.)Attempted to address PackageGraph creation with artifact dependencies as supported by nightly Rust ([#174]). Note that this is not a complete fix, as
Fixed a PackageGraph creation edge case ([#158]).
PackageGraph creation edge case (#158).Improve PackageGraph creation algorithm to address issues like nextest-rs/nextest#1090.
PackageGraph creation algorithm to address issues like nextest-rs/nextest#1090.PackageMetadata::rust_version has been deprecated because it returns a VersionReq even though it actually should be a Version. In the next major relea…
PackageMetadata::minimum_rust_version provides the rust-version field of a package as a Version.PackageMetadata::rust_version has been deprecated because it returns a VersionReq even though
it actually should be a Version. In the next major release of guppy, the current definition of
rust_version will go away and be replaced with minimum_rust_version.target-spec updated to version 3.
target-spec updated to version 3.prop010_ to proptest1_.target-spec updated to version 2.
target-spec updated to version 2.PackageMetadata::to_feature_set converts a single package to a FeatureSet.
PackageMetadata::to_feature_set converts a single package to a FeatureSet.Detailed documentation about dependency cycles in Cargo, as part of the `Cycles` struct. Thanks Aria for writing it!
guppy::Error::UnknownRegistryName now boxes the internal summary and is smaller as a result.
guppy::Error::UnknownRegistryName now boxes the internal summary and is smaller as a result.Internal dependency update: cargo_metadata updated to 0.15.1.
cargo_metadata updated to 0.15.1.Thanks to Carol Nichols for her contributions to this release!
Thanks to Carol Nichols for her contributions to this release!
On Windows, guppy now behaves correctly when a path dependency is on a different drive from the workspace ([#642]).
Workspace::target_directory returns the target directory provided in the Cargo metadata.
Workspace::target_directory returns the target directory provided in the Cargo metadata.Workspace::metadata_table returns the freeform workspace.metadata table.Support for [weak dependencies and namespaced features]:
Support for weak dependencies and namespaced features:
"dep:foo") and namespaced features ("foo") are now represented as separate nodes in a FeatureGraph, even with Rust versions prior to 1.60.FeatureLabel enum.doc_cfg-based feature labels to rustdoc.
doc_cfg-based feature labels to rustdoc.MetadataCommand::cargo_command returns the underlying std::process::Command instance.guppy::graph::feature::CrossLink renamed to ConditionalLink, and now covers some same-package
features. For more, see the documentation for ConditionalLink.target-spec updated to version 1.PackageMetadata::homepage, documentation and default_run, exposed by newer versions of Cargo.
PackageMetadata::homepage, documentation and default_run, exposed by newer versions of Cargo.guppy now supports a "light" mode if --no-deps is passed in. This mode doesn't provide any information about third-party packages or dependency edges,
guppy now supports a "light" mode if --no-deps is passed in. This mode doesn't provide any information
about third-party packages or dependency edges, but is much faster if the only information needed
is workspace lookups.Reverted change in 0.12.3 because of #524.
Internal dependency guppy-workspace-hack updated to `workspace-hack`.
guppy-workspace-hack updated to workspace-hack.PackageMetadata::link_between, link_from and link_to look up a direct link from one package to another.
PackageMetadata::link_between, link_from and link_to look up a direct link from one package to another.The toml crate is now built with the preserve_order feature.
toml crate is now built with the preserve_order feature.
This is a minor breaking change that should not affect most consumers.
This is a minor breaking change that should not affect most consumers.
guppy can now be parsed by this version, even if the metadata
is in a different format.guppy-summaries updated to 0.6.0.PackageMetadata::rust_version returns the package.rust-version field, if specified. Thanks @foresterre!
PackageMetadata::rust_version returns the package.rust-version field, if specified. Thanks @foresterre!Rudimentary support for alternate registries. This is a temporary workaround until Cargo issue #9052 is resolved.
hakari.A new abstraction PlatformSpec can represent the union of all platforms, the intersection of all platforms, or a single platform.
PlatformSpec can represent the union of all platforms, the intersection
of all platforms, or a single platform.
EnabledStatus::required_on and EnabledStatus::enabled_on have been switched
to accepting a &PlatformSpec rather than a &Platform.CargoOptions::set_platform and related methods now accept either a Platform or a PlatformSpec.EnabledStatus::enabled_on_any is now EnabledStatus::enabled_on(&PlatformSpec::Any).workspace-members
list of names, and a third-party list of specifiers such as { name = "serde", version = "1" }.
platform module at the top level.version = "v1" and version = "v2" have been renamed to resolver = "1" and
resolver = "2" respectively, to align with Cargo.
CargoOptionsSummary instances
may no longer parse correctly.(This release was incorrectly made and was yanked.)
(This release was incorrectly made and was yanked.)
Public dependency version bumps:
target-spec updated to 0.8.0.
Platform no longer has a lifetime parameter.guppy-summaries updated to 0.5.0.semver updated to 1.0.(This release was yanked because guppy-summaries needed to be upgraded as well.)
(This release was yanked because guppy-summaries needed to be upgraded as well.)
DependencyKind::VALUES lists out all the values of DependencyKind.
DependencyKind::VALUES lists out all the values of DependencyKind.DependencyReq::no_default_features() returns the enabled status for a dependency when default-features = false.PackageMetadata::publish now returns a new, more descriptive PackagePublish enum (#320).PackageMetadata::readme now returns &Utf8Path rather than &Path.BuildTarget::path now returns &Utf8Path rather than &Path.…ordering of nested metadata tables. This is a breaking change for code that names the following types:
Updated toml to 1.1.4. The on-disk format written by
Summary::write_to_string is unchanged: summaries are now written by the new
toml_compat module, which reproduces the output of toml 0.5's pretty
serializer, including its ordering of nested metadata tables. This is a
breaking change for code that names the following types:
Summary::metadata is now toml 1.x's Table.Summary::parse, Summary::with_metadata, Summary::to_string andSummary::write_to_string return toml 1.x's error types.Summary::with_metadata no longer rejects metadata whose fields areSummaryDiff is still serialized with toml's own serializer, whoseSummaries are parsed strictly according to the TOML 1.1 specification;
documents that the lenient toml 0.5 parser accepted but that are not valid
TOML are now rejected.
MSRV updated to Rust 1.91, as required by dependencies.
guppy now uses camino Utf8Path and Utf8PathBuf wrappers. These wrappers
provide type-level assertions that returned paths are valid UTF-8.proptest updated to version 1 and the corresponding feature renamed to proptest1.Restored compatibility with Rust 1.48. (1.48 is the MSRV, and is now tested in CI.)
…then Foo is returned before Bar. (This is not a breaking change because it is an additional constraint on guppy itself, not on its consumers.)
PackageSource now has support for parsing external sources through a new parse_external method.
PackageSource now has support for parsing external sources through a new parse_external method.CargoOptions::set_initials_platform method can be used to simulate builds on exclusively the host
platform.CargoSet::new accepts an additional argument, features_only, which represents additional inputs that are only
used for feature unification. This may be used to simulate, e.g. cargo build --package foo --package bar, when
you only care about the results of foo but specifying bar influences the build.graph::cargo::BuildPlatform represents either the target platform or the host. New methods
CargoSet::platform_features and CargoSet::platform_direct_deps accept the BuildPlatform enum.FeatureSet::contains_package returns true if a feature set has at least one feature in the given package.semver::VersionReq is now exposed in guppy.FeatureGraph::resolve_ids resolves feature IDs into a FeatureSet.all_filter, default_filter and none_filter have been combined into a single enum
StandardFeatures.FeatureSet instances, not FeatureQuery. This is because Cargo builds always
happen in the forward direction.
FeatureQuery::resolve_cargo has been renamed to FeatureSet::into_cargo_set.CargoOptions::with_ methods have been renamed to begin with either set_ or add_.Obs is now a type rather than a trait.CargoOptions::set_proc_macros_on_target was replaced with InitialsPlatform::ProcMacrosOnTarget.semver updated to 0.11.target-spec updated to 0.6.Fix an unintentional use of serde's private exports.
serde's private exports.FeatureGraph::is_default_feature no longer follows cross-package links.
FeatureGraph::is_default_feature no longer follows cross-package links.
Cyclic dev-dependencies can enable non-default features (such as testing-only features), and previously
is_default_feature would have returned true for such features. With this change, is_default_feature
returns false for such features.
The default_filter feature filter, which uses is_default_feature, has been fixed as well.
Your coding agent can read these notes before it upgrades. Set up the MCP server →