# Changelog
## [0.15.2] - 2023-01-08
### Added
- `PackageMetadata::to_feature_set` converts a single package to a `FeatureSet`.
### Changed
- MSRV updated to Rust 1.62.
## [0.15.1] - 2022-12-04
### Added
- Detailed documentation about dependency cycles in Cargo, as part of the [`Cycles`](https://docs.rs/guppy/latest/guppy/graph/struct.Cycles.html) struct. Thanks [Aria](https://github.com/Gankra) for writing it!
## [0.15.0] - 2022-11-07
### Changed
- `guppy::Error::UnknownRegistryName` now boxes the internal `summary` and is smaller as a result.
## [0.14.4] - 2022-10-05
### Changed
- Internal dependency update: `cargo_metadata` updated to 0.15.1.
## [0.14.3] - 2022-09-30
### Changed
- Repository location update.
- MSRV updated to Rust 1.58.
Thanks to [Carol Nichols](https://github.com/carols10cents) for her contributions to this release!
## [0.14.2] - 2022-05-29
### Fixed
- On Windows, guppy now behaves correctly when a path dependency is on a different drive from the workspace ([#642]).
[#642]: https://github.com/facebookincubator/cargo-guppy/issues/642
### Changed
- Internal dependency updates.
## [0.14.1] - 2022-03-18
### Added
- `Workspace::target_directory` returns the target directory provided in the Cargo metadata.
- `Workspace::metadata_table` returns the freeform `workspace.metadata` table.
## [0.14.0] - 2022-03-14
### Added
Support for [weak dependencies and namespaced features]:
- Cargo build simulations now take into account weak dependencies and namespaced features.
- Optional dependencies (`"dep:foo"`) and namespaced features (`"foo"`) are now represented as separate nodes in a `FeatureGraph`, even with Rust versions prior to 1.60.
- Feature names are now represented as a new `FeatureLabel` enum.
[weak dependencies and namespaced features]: https://rust-lang.github.io/rfcs/3143-cargo-weak-namespaced-features.html
### Changed
- MSRV updated to Rust 1.56.
## [0.13.0] - 2022-02-13
### Added
- `doc_cfg`-based feature labels to rustdoc.
- `MetadataCommand::cargo_command` returns the underlying `std::process::Command` instance.
### Changed
- `guppy::graph::feature::CrossLink` renamed to `ConditionalLink`, and now covers some same-package
features. For more, see the documentation for [`ConditionalLink`].
- Public dependency bump: `target-spec` updated to version 1.
### Fixed
- A small fix to Cargo build simulations ([#596](https://github.com/facebookincubator/cargo-guppy/issues/596)).
[`ConditionalLink`]: https://docs.rs/guppy/0.13/guppy/graph/feature/struct.ConditionalLink.html
## [0.12.6] - 2021-12-19
### Added
- `PackageMetadata::homepage`, `documentation` and `default_run`, exposed by newer versions of Cargo.
## [0.12.5] - 2021-12-17
### Added
- `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.
## [0.12.4] - 2021-12-08
- Reverted change in 0.12.3 because of [#524](https://github.com/facebookincubator/cargo-guppy/issues/524).
## [0.12.3] - 2021-11-28
- Internal dependency `guppy-workspace-hack` updated to [`workspace-hack`](https://crates.io/crates/workspace-hack).
## [0.12.2] - 2021-11-25
### Added
- `PackageMetadata::link_between`, `link_from` and `link_to` look up a direct link from one package to another.
## [0.12.1] - 2021-11-23
### Changed
- The `toml` crate is now built with the `preserve_order` feature.
- This feature ensures that the key ordering in metadata is preserved.
## [0.12.0] - 2021-11-23
This is a minor breaking change that should not affect most consumers.
### Fixed
- Summaries generated by old versions of `guppy` can now be parsed by this version, even if the metadata
is in a different format.
### Changed
- Relative paths are now stored and presented with forward slashes on all platforms, including Windows.
- `guppy-summaries` updated to 0.6.0.
## [0.11.3] - 2021-11-20
### Added
- `PackageMetadata::rust_version` returns the `package.rust-version` field, if specified. Thanks [@foresterre](https://github.com/foresterre)!
## [0.11.2] - 2021-10-06
### Added
- Rudimentary support for alternate registries. This is a temporary workaround until [Cargo issue #9052](https://github.com/rust-lang/cargo/issues/9052)
is resolved.
- This is currently only hooked up to `hakari`.
## [0.11.1] - 2021-10-01
### Added
- A new abstraction `PlatformSpec` can represent the union of all platforms, the intersection
of all platforms, or a single platform.
- Methods like `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)`.
- Omitted packages 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" }`.
- The resolver will now also fail if any specifiers are unmatched.
### Changed
- Platform-related types have been moved into the new `platform` module at the top level.
- In Cargo options summaries, `version = "v1"` and `version = "v2"` have been renamed to `resolver = "1"` and
`resolver = "2"` respectively, to align with Cargo.
- The old specifiers will continue to work.
- Because of the changes to how omitted packages are represented, old-style `CargoOptionsSummary` instances
may no longer parse correctly.
- MSRV updated to Rust 1.53.
## 0.11.0 - 2021-10-01
(This release was incorrectly made and was yanked.)
## [0.10.1] - 2021-09-13
### Changed
- Public dependency version bumps:
- `target-spec` updated to 0.8.0.
- As a result, `Platform` no longer has a lifetime parameter.
- `guppy-summaries` updated to 0.5.0.
- `semver` updated to 1.0.
- MSRV updated to Rust 1.51.
## [0.10.0] - 2021-09-13
(This release was yanked because `guppy-summaries` needed to be upgraded as well.)
## [0.9.0] - 2021-03-11
### Added
- `DependencyKind::VALUES` lists out all the values of `DependencyKind`.
- `DependencyReq::no_default_features()` returns the enabled status for a dependency when `default-features = false`.
### Changed
- `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`.
[#320]: https://github.com/facebookincubator/cargo-guppy/issues/320
## [0.8.0] - 2021-02-23
### Changed
- `guppy` now uses [`camino`](https://crates.io/crates/camino) `Utf8Path` and `Utf8PathBuf` wrappers. These wrappers
provide type-level assertions that returned paths are valid UTF-8.
- Public dependency version bumps:
- `proptest` updated to version 1 and the corresponding feature renamed to `proptest1`.
## [0.7.2] - 2021-02-15
### Fixed
- Restored compatibility with Rust 1.48. (1.48 is the MSRV, and is now tested in CI.)
## [0.7.1] - 2021-02-14
### Changed
- Packages within a cycle are now returned in non-dev order. When the direction is forward,
if package Foo has a dependency on Bar, and Bar has a cyclic dev-dependency on
Foo, 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.)
## [0.7.0] - 2021-02-03
### Added
* `PackageSource` now has support for parsing external sources through a new `parse_external` method.
* Cargo simulations have some new features:
* New `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.
* New enum `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`.
### Changed
* Feature filters `all_filter`, `default_filter` and `none_filter` have been combined into a single enum
`StandardFeatures`.
* Cargo builds are now done through `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`.
* Public dependency version bumps:
* `semver` updated to 0.11.
* `target-spec` updated to 0.6.
## [0.6.3] - 2021-01-11
### Fixed
* Fix an unintentional use of `serde`'s private exports.
## [0.6.2] - 2020-12-09
### Fixed
* `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.
## [0.6.1] - 2020-12-02
This includes all the changes from version 0.6.0, plus a minor fix:
### Fixed
* Removed "Usage" section from the README, the version number there keeps falling out of sync.
## [0.6.0] - 2020-12-02
(Version 0.6.0 wasn't released to crates.io.)
### Added
* New feature `rayon1`, which introduces support for parallel iterators with [Rayon](https://github.com/rayon-rs/rayon).
Currently, only a few workspace iterators are supported. More methods will be added as required (if you need
something, please file an issue or open a PR!)
* `PackageSet` and `FeatureSet` now have `PartialEq` and `Eq` implementations.
* These implementations check for the graph being same through pointer equality. This means that sets that originate
from different `PackageGraph` instances will always be unequal, even if they refer to the same packages.
* Added `PackageSet::to_package_query` to convert a `PackageSet` to a `PackageQuery` starting from the same
elements.
### Changed
* Some methods have been renamed for greater fluency:
* `FeatureGraph::query_packages` is now `PackageQuery::to_feature_query`.
* `FeatureGraph::resolve_packages` is now `PackageSet::to_feature_set`.
* The `semver` dependency has been updated to 0.11.
## [0.5.0] - 2020-06-20
This includes the changes in version 0.5.0-rc.1, plus:
### Added
* Support for writing out *build summaries* for `CargoSet` instances through the optional `summaries` feature.
### Changed
* `target-spec` has been upgraded to 0.4.
### Fixed
* `MetadataCommand::exec` and `build_graph` are now `&self`, not `&mut self`.
## [0.5.0-rc.1] - 2020-06-12
### Added
* `PackageGraph::query_workspace_paths` and `resolve_workspace_paths` provide convenient ways
to create queries and package sets given a list of workspace paths.
* `PackageMetadata::source` provides the source of a package (a local path, `crates.io`, a `git` repository or a custom
registry).
* `PackageQuery::initials` returns the initial set of packages specified in a package query.
* `FeatureQuery::initials` returns the initial set of features specified in a feature query.
* `FeatureQuery::initial_packages` returns the initial set of *packages* specified in a feature query.
* Improvements to Cargo resolution:
* `CargoSet` now carries with it the original query and information about
direct third-party dependencies.
* A number of bug fixes around edge cases.
* `Workspace::members_by_paths` and `Workspace::members_by_names` look up a list of workspace members
by path or name, respectively.
* `FeatureGraph::all_features_for` returns a list of all known features for a specified package.
### Changed
* Lookup methods like `PackageGraph::metadata` now return `Result`s with errors instead of `Option`s.
* `target-spec` has been upgraded to 0.3.
* `proptest` has been upgraded to 0.10. The feature has accordingly been renamed to
`proptest010`.
* `Workspace::members` is now `Workspace::iter_by_path`, and `Workspace::members_by_name` is now `Workspace::iter_by_name`.
### Fixed
* In `FeatureQuery<'g>` and `FeatureSet<'g>`, the lifetime parameter `'g` is now [covariant].
Compile-time assertions ensure that all lifetime parameters in `guppy` are covariant.
[covariant]: https://github.com/sunshowers/lifetime-variance-example/blob/main/src/lib.rs
### Upcoming
* Support for *build summaries* is currently in an experimental state.
## [0.4.1] - 2020-05-07
This is a small followup release with some APIs that were meant to be added to 0.4.0.
### Added
- `PackageGraph` now has some new `resolve_` methods:
- `resolve_ids`: creates a `PackageSet` with the specified package IDs.
- `resolve_workspace`: creates a `PackageSet` with all workspace packages (but no transitive dependencies).
- `resolve_workspace_names`: creates a `PackageSet` with the specified workspace packages by name (but no transitive
dependencies).
## [0.4.0] - 2020-05-06
This is a major overhaul of `guppy`, with many new features and several changed APIs.
### Added
- Support for graph analysis on a per-feature basis.
- The APIs are contained in `guppy::graph::feature`, and are accessible through `PackageGraph::feature_graph`.
- An almost complete set of queries and operations is available through `FeatureQuery` and `FeatureSet`.
- Support for simulating what packages and features would be built by Cargo.
- The APIs are contained in `guppy::graph::cargo`, and are accessible by constructing a `FeatureQuery` and using its
`resolve_cargo` method.
- Both the current resolver and the upcoming [V2 resolver](https://github.com/rust-lang/cargo/pull/7820) are
supported, and there are extensive property-based tests to ensure that `guppy` faithfully emulates `cargo`.
- `PackageQuery` (and `FeatureQuery`) can now be introspected with new methods `direction` and `starts_from`.
- `PackageMetadata` instances now have `has_build_script` and `is_proc_macro` methods.
- Add `PackageGraph::query_workspace_names` to make a `PackageQuery` by workspace name.
### Changed
- `PackageSet`'s consuming `into_` iterators have been turned into borrowing iterators.
- `into_ids` is now `ids`, and `into_links` is now `links`.
- Direct dependency and reverse dependency queries now live on `PackageMetadata` instances.
- `PackageLink`, instead of having public `from`, `to` and `edge` fields, now has methods which return that data.
- The functionality of `PackageEdge` has been subsumed into `PackageLink`.
- The data model for platform-specific statuses has been overhauled. See `EnabledStatus`, `PlatformStatus` and
`PlatformEval`.
- `PackageResolver` (and `FeatureResolver`) improvements.
- Resolver instances now have the query passed in, to make it easier to write stateless resolvers.
- Resolver instances now take in `&mut self` instead of a plain `&self` (or `FnMut` instead of `Fn`).
- `MetadataCommand` has been reimplemented in `guppy`, and now has a `build_graph` method.
- `Metadata` has been reworked as well, and renamed to `CargoMetadata`.
### Removed
- `PackageGraph::retain_edges` no longer exists: its functionality can be replicated through `PackageResolver`.
## [0.3.1] - 2020-04-15
### Added
- Support for listing and querying build targets (library, binaries, tests, etc) within a package.
- `PackageMetadata::build_targets`: iterates over all build targets within a package.
- `PackageMetadata::build_target`: retrieves a build target by identifier.
## [0.3.0] - 2020-04-14
This is a breaking release with some minor API changes.
### Added
- `PackageGraph::directly_depends_on`: returns true if a package directly depends on another.
- `Workspace` has new `member_by_name` and `members_by_name` methods for workspace lookups by name.
### Fixed
- `guppy` now checks for duplicate names in workspaces and errors out if it finds any.
### Changed
- `Workspace::members` and `Workspace::member_by_path` now return `PackageMetadata` instances, not `PackageId`.
## [0.2.1] - 2020-04-13
### Fixed
- Fixed a build issue on nightly Rust.
## [0.2.0] - 2020-04-13
This is a breaking release. There are no new or removed features, but many existing APIs have been cleaned up.
### Changed
- The `select_` methods have been renamed to `query_`.
- `PackageSelect` is now `PackageQuery`.
- `select_all` is now `resolve_all` and directly produces a `PackageSet`.
- `DependencyLink` is now `PackageLink`, and `DependencyEdge` is now `PackageEdge`.
- `into_iter_links` is now `PackageSet::into_links`.
- `PackageId` is now custom to `guppy` instead of reusing `cargo_metadata::PackageId`.
- `PackageDotVisitor` now takes a `&mut DotWrite`.
### Removed
- All previously deprecated methods have been cleaned up.
## [0.1.8] - 2020-04-08
### Added
- Implemented package resolution using custom resolvers, represented by the `PackageResolver` trait.
- Added new APIs `PackageSelect::resolve_with` and `PackageSelect::resolve_with_fn`.
- A `PackageResolver` provides fine-grained control over which links are followed.
- It is equivalent to `PackageGraph::retain_edges`, but doesn't borrow mutably and is scoped to a single selector.
- Added `PackageSet` to represent a set of known, resolved packages.
- `PackageSet` comes with the standard set operations: `len`, `contains`, `union`, `intersection`, `difference` and
`symmetric_difference`.
- A `PackageSet` can also be iterated on in various ways, listed in the "Deprecated" section.
### Changed
- Updated repository links.
### Deprecated
- The following `into_` methods on `PackageSelect` have been deprecated and moved to `PackageSet`.
- `select.into_iter_ids()` -> `select.resolve().into_ids()`
- `select.into_iter_metadatas()` -> `select.resolve().into_metadatas()`
- `select.into_root_ids()` -> `select.resolve().into_root_ids()`
- `select.into_root_metadatas()` -> `select.resolve().into_root_metadatas()`
## [0.1.7] - 2020-04-05
### Added
- Support for [platform-specific dependencies](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#platform-specific-dependencies), including:
- Querying whether a dependency is required or optional on the current platform, or on any other platform.
- Evaluating which features are enabled on a platform.
- Handling situations where the set of [target features](https://github.com/rust-lang/rfcs/blob/master/text/2045-target-feature.md) isn't known.
### Changed
- Internal improvements -- `into_iter_ids` is a further 10-15% faster for large graphs.
- Made several internal changes to prepare for feature graph support, coming soon.
- Sped up build times by removing some dependencies.
### Deprecated
- As part of support for platform-specific dependencies, `DependencyMetadata::target` has been replaced with the `_on` methods.
- For example, to figure out if a dependency is enabled on a platform, use the `enabled_on` method.
## [0.1.6] - 2020-03-11
### Fixed
- Handle cyclic dev-dependencies properly. Previously, `guppy` could produce incomplete results if it encountered cycles.
### Changed
- As a result of algorithmic improvements to handle cycles, `into_iter_ids` is now around 60% faster for large graphs.
## [0.1.5] - 2020-03-06
### Fixed
- Fix a bug involving situations where different dependency sections depend on the same package with different versions:
```toml
[dependencies]
lazy_static = "1"
[dev-dependencies]
lazy_static = "0.2"
```
## [0.1.4] - 2020-01-26
### Added
- New selector `select_workspace` to select packages that are part of the workspace and all their transitive
dependencies. In general, `select_workspace` is preferable over `select_all`.
### Fixed
- Fixed a bug in `into_root_ids` and `into_root_metadatas` that would cause it to return packages that aren't roots of
another package.
### Changed
- Internal upgrades to prepare for upcoming feature graph analysis.
## [0.1.3] - 2019-12-29
### Added
- `PackageSelect::into_root_metadatas` returns package metadatas for all roots within a selection.
- New optional feature `proptest010` to help with property testing.
### Changed
- Upgrade to `petgraph` 0.5 -- this allows for some internal code to be simplified.
### Deprecated
- Package selectors have been renamed. The old names will continue to work for the 0.1 series, but will be removed in the 0.2 series.
- `select_transitive_deps` → `select_forward`
- `select_reverse_transitive_deps` → `select_reverse`
- `select_transitive_deps_directed` → `select_directed`
## [0.1.2] - 2019-11-26
### Fixed
- Fixed the return type of `into_root_ids` to be `impl Iterator` instead of `impl IntoIterator`.
## [0.1.1] - 2019-11-22
### Fixed
- Fixed a publishing issue with version 0.1.0.
## [0.1.0] - 2019-11-22
### Added
- Initial release.
[0.15.2]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.15.2
[0.15.1]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.15.1
[0.15.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.15.0
[0.14.4]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.14.4
[0.14.3]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.14.3
[0.14.2]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.14.2
[0.14.1]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.14.1
[0.14.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.14.0
[0.13.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.13.0
[0.12.6]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.12.6
[0.12.5]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.12.5
[0.12.4]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.12.4
[0.12.3]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.12.3
[0.12.2]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.12.2
[0.12.1]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.12.1
[0.12.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.12.0
[0.11.3]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.11.3
[0.11.2]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.11.2
[0.11.1]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.11.1
[0.10.1]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.10.1
[0.10.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.10.0
[0.9.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.9.0
[0.8.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.8.0
[0.7.2]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.7.2
[0.7.1]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.7.1
[0.7.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.7.0
[0.6.3]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.6.3
[0.6.2]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.6.2
[0.6.1]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.6.1
[0.6.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.6.0
[0.5.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.5.0
[0.5.0-rc.1]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.5.0-rc.1
[0.4.1]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.4.1
[0.4.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.4.0
[0.3.1]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.3.1
[0.3.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.3.0
[0.2.1]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.2.1
[0.2.0]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.2.0
[0.1.8]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.1.8
[0.1.7]: https://github.com/guppy-rs/guppy/releases/tag/guppy-0.1.7
[0.1.6]: https://github.com/guppy-rs/guppy/releases/tag/0.1.6
[0.1.5]: https://github.com/guppy-rs/guppy/releases/tag/0.1.5
[0.1.4]: https://github.com/guppy-rs/guppy/releases/tag/0.1.4
[0.1.3]: https://github.com/guppy-rs/guppy/releases/tag/0.1.3
[0.1.2]: https://github.com/guppy-rs/guppy/releases/tag/0.1.2
[0.1.1]: https://github.com/guppy-rs/guppy/releases/tag/0.1.1
[0.1.0]: https://github.com/guppy-rs/guppy/releases/tag/0.1.0