NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #4690 most downloaded on crates.io
Manage workspace-hack packages that do feature unification inside workspaces.
Last release 19 days ago
19 Sep 2026
Release timing varies
gaps range from 2 weeks to 10 months
Nearly every release is documented
notes for 39 of 39 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
39 releases · first in 2021
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.Builtin targets updated to Rust 1.92.
Updated target-spec to version 3.4.2.
Updated target-spec to version 3.4.2.
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. Resolver version 3 enables MSRV-aware version resolution in Cargo.
Added support for the upcoming Cargo resolver version 3. Resolver version 3 enables MSRV-aware version resolution in Cargo.
The portion of dependency resolution that hakari works with (package and feature
resolution) happens after dependency versions have been resolved and
Cargo.lock is refreshed. This means that from hakari's perspective, resolver
version 3 is the same as version 2.
cargo hakari init now sets edition = "2021" in the created workspace-hack's Cargo.toml. This silences a Cargo warning about a missing edition.
cargo hakari init now sets edition = "2021" in the created workspace-hack's Cargo.toml. This
silences a Cargo warning about a missing edition.
Builtin targets updated to Rust 1.81.
Fixed a crash in some workspaces ([#292]).
This may change some checked-in workspace-hacks, but it is a bugfix and not a breaking change. Testing against several real-world workspace-hacks, onl…
hakari.toml template for new projects now suggests Apple Silicon
(aarch64-apple-darwin) as well.This may change some checked-in workspace-hacks, but it is a bugfix and not a breaking change. Testing against several real-world workspace-hacks, only one of them changed.
Add WorkspaceHackLineStyle to list of public exports.
Add WorkspaceHackLineStyle to list of public exports.
New config option workspace-hack-line-style, with three possible values:
New config option workspace-hack-line-style, with three possible values:
"full": my-workspace-hack = { version = "0.1", path = ... }. This is the default and a
good way to get started.
"version-only": my-workspace-hack = { version = "0.1" }. Specifying versions this way is
useful if you've published a stub crate to crates.io (see the publishing
section). You can use this in combination with a patch directive in the root Cargo.toml:
[patch.crates-io.my-workspace-hack]
path = "workspace-hack"
"workspace-dotted": my-workspace-hack.workspace = true. To use this, define a workspace
dependency in the root Cargo.toml:
[workspace.dependencies]
my-workspace-hack = { version = "0.1", path = "workspace-hack" }
# or, along with a patch directive:
my-workspace-hack = { version = "0.1" }
### Changed - guppy updated to 0.17.1.
guppy updated to 0.17.1.### Changed - guppy updated to 0.17.0.
guppy updated to 0.17.0.### Changed - guppy updated to 0.16.0.
guppy updated to 0.16.0.Canonicalize paths correctly on Windows ([#70]).
The default template for hakari.toml now specifies dep-format-version = "4".
The default template for hakari.toml now specifies dep-format-version = "4".
Introduced a new dep-format-version, version 4, with a change to always sort outputs alphabetically. This matches the order produced by cargo-sort ([#
Introduced a new dep-format-version, version 4, with a change to always sort outputs alphabetically. This
matches the order produced by cargo-sort (#65).
Introduced a new dep-format-version, version 3, with these changes:
Introduced a new dep-format-version, version 3, with these changes:
5.4.0+g7f361a3, don't show the bit after the + sign). Thanks Nikhil Benesch for your first contribution!Fixed a panic in rare circumstances ([#38]).
### Changed - Updated guppy to 0.15.0.
Thanks to Carol Nichols for her contributions to this release!
Thanks to Carol Nichols for her contributions to this release!
Dependency updates: in particular, guppy updated to 0.14.2.
Support for [weak dependencies and namespaced features].
Support for weak dependencies and namespaced features.
guppy updated to 0.14.0.A small fix to Cargo build simulations (#596). This is not a breaking change to the hakari output because it is a bugfix.
doc_cfg-based feature labels to rustdoc.Reverted the changes in version 0.7.3 because of #524.
…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.
cargo hakari explain.VerifyErrors now prints out information in the same format as explain---as a result, some of its APIs have
changed.Internal dependency guppy-workspace-hack updated to `workspace-hack`.
guppy-workspace-hack updated to workspace-hack.Internal updates for cargo-hakari 0.9.8.
Internal updates for cargo-hakari 0.9.8.
Support for publishing a dummy workspace-hack. This is an alternate publishing method that integrates better with existing workflows.
dep-format-version, to control workspace-hack = ... lines in other Cargo.tomls.
dep-format-version = "2".Updated example in README.md now that the cargo-guppy repository has a workspace-hack.
README.md now that the cargo-guppy repository has a workspace-hack.guppy 0.12.0.Backed out the algorithmic improvement from earlier because it didn't handle some edge cases.
Support for alternate registries through the [registries] section in the config.
[registries] section in the config.
A new UnifyTargetHost::Auto strategy, which uses the ReplicateTargetOnHost strategy if there are internal build dependencies or proc macros in the wor
UnifyTargetHost::Auto strategy, which uses the ReplicateTargetOnHost strategy
if there are internal build dependencies or proc macros in the workspace, or the UnifyIfBoth strategy
if not.UnifyTargetHost:
Auto is the new default strategy.ReplicateTargetAsHost has been renamed to ReplicateTargetOnHost.UnifyOnBoth has been renamed to UnifyIfBoth.WorkspaceOps.hakari now outputs packages corresponding to the intersection of all platforms, then outputs any other platform-specific packages left. This simplifie
final_excludes to remove packages from the result at the end of computation.
traversal_excludes (renamed from omitted_packages) which removes
packages both during and after computation.cli-support feature contains several new structs used by cargo-hakari.HakariBuilderSummary, version = "v2" etc has been renamed to resolver = "2" to align with
cargo.
HakariBuilderSummary, traversal-excludes and final-excludes are now easier to describe while
deserializing: they now take a workspace-members list of names, and a third-party list of specifiers such as
{ name = "serde", version = "1" }.
omitted_packages renamed to traversal_excludes.HakariBuilderSummary instances
may no longer parse correctly.guppy updated to 0.11.1.Public dependency version bump: guppy updated to 0.10.1.
guppy updated to 0.10.1.Public dependency version bump: guppy updated to 0.9.0.
guppy updated to 0.9.0.HakariCargoToml now uses camino's UTF-8 paths.
HakariCargoToml::new now accepts impl Into<Utf8PathBuf> rather than impl Into<PathBuf>.HakariCargoToml::toml_path returns &Utf8Path instead of &Path.hakari now uses `camino` Utf8Path and Utf8PathBuf wrappers. These wrappers provide type-level assertions that returned paths are valid UTF-8.
hakari 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.Experimental Windows support. There may still be bugs around path normalization: please report them.
<!-- next-url --> [0.18.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.18.0 [0.17.9]: https://github.com/guppy-rs/guppy/releases/tag/haka
Initial release.
<!-- next-url --> [0.18.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.18.0 [0.17.9]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.17.9 [0.17.8]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.17.8 [0.17.7]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.17.7 [0.17.6]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.17.6 [0.17.5]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.17.5 [0.17.4]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.17.4 [0.17.3]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.17.3 [0.17.2]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.17.2 [0.17.1]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.17.1 [0.17.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.17.0 [0.16.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.16.0 [0.15.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.15.0 [0.14.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.14.0 [0.13.2]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.13.2 [0.13.1]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.13.1 [0.13.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.13.0 [0.12.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.12.0 [0.11.1]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.11.1 [0.11.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.11.0 [0.10.2]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.10.2 [0.10.1]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.10.1 [0.10.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.10.0 [0.9.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.9.0 [0.8.1]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.8.1 [0.8.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.8.0 [0.7.3]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.7.3 [0.7.2]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.7.2 [0.7.1]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.7.1 [0.7.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.7.0 [0.6.2]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.6.2 [0.6.1]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.6.1 [0.6.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.6.0 [0.5.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.5.0 [0.4.1]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.4.1 [0.4.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.4.0 [0.3.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.3.0 [0.2.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.2.0 [0.1.1]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.1.1 [0.1.0]: https://github.com/guppy-rs/guppy/releases/tag/hakari-0.1.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →