PackageTrack
Sign in Get early access

spdx

Helper crate for SPDX expressions

0.13.5 21M downloads/mo #2028 most downloaded on crates.io EmbarkStudios/spdx

What this package is like to depend on

Last release 17 days ago

06 Aug 2026

Release timing varies

gaps range from 1 weeks to 6 months

Nearly every release is documented

notes for 40 of 40 stable releases

1 version withdrawn

withdrawn after publishing

7 years old

41 releases · first in 2019

6 releases in the last 12 months

see the full history below

Release timeline

41 releases · Jun 2019 to Aug 2026
2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 41
  1. 0.13.5 06 Aug 2026
    Release notes

    Fixed

    • PR#96 fixed LicenseItem's PartialEq and PartialOrd implementations to agree with its total ordering, resolving #95.
    Open source →
    Release notes

    Fixed

    • PR#96 fixed LicenseItem's PartialEq and PartialOrd implementations to agree with its total ordering, resolving #95.
    Open source →
  2. 0.13.4 26 Feb 2026
    Release notes

    Changed

    Open source →
    Release notes

    Changed

    Open source →
  3. 0.13.3 17 Dec 2025
    Release notes

    Changed

    • PR#90 changed this crate to default to no_std, unless the detection feature is enabled, closing PR#89. Thanks @so-rose!
    • PR#91 changed the license terms from MIT OR Apache2.0 to just Apache-2.0, as PR#84 merged external code that was only licensed under Apache-2.0. See #88 for the original raising of this mismatch.
    Open source →
    Release notes

    Changed

    • PR#90 changed this crate to default to no_std, unless the detection feature is enabled, closing PR#89. Thanks @so-rose!
    • PR#91 changed the license terms from MIT OR Apache2.0 to just Apache-2.0, as PR#84 merged external code that was only licensed under Apache-2.0. See #88 for the original raising of this mismatch.
    Open source →
  4. 0.13.2 04 Dec 2025
    Release notes

    Fixed

    • PR#87 fixed a code generation bug introduced in PR#86 that caused LicenseId::text() to return the incorrect license text.
    Open source →
    Release notes

    Fixed

    • PR#87 fixed a code generation bug introduced in PR#86 that caused LicenseId::text() to return the incorrect license text.
    Open source →
  5. 0.13.1 03 Dec 2025
    Release notes

    Changed

    • PR#86 changes the license detection for GNU licenses (GPL, AGPL, LGPL, GFDL). In 0.13.0 they would be detected as their deprecated (eg. AGPL-3.0) variant due to the variants (root, -only, and -or-later) using the exact same license text. GNU licenses are now detected as the <root>-or-later version. This is an arbitrary decision, which I hope to not change, but if someone makes a convincing argument it could be.
    Open source →
    Release notes

    Changed

    • PR#86 changes the license detection for GNU licenses (GPL, AGPL, LGPL, GFDL). In 0.13.0 they would be detected as their deprecated (eg. AGPL-3.0) variant due to the variants (root, -only, and -or-later) using the exact same license text. GNU licenses are now detected as the <root>-or-later version. This is an arbitrary decision, which I hope to not change, but if someone makes a convincing argument it could be.
    Open source →
  6. 0.13.0 02 Dec 2025
    Release notes

    Added

    • PR#84 resolved #67 by inlining the askalono crate to allow detection of license texts or headers from arbitrary text data. There are multiple features flags associated with this new feature.
    • PR#85 resolved #82 by optionally allowing the parsing of unknown identifiers via ParseMode::allow_unknown. Unknown identifiers are either treated as LicenseRef-<unknown identifier> or AdditionRef-<unknown identifier> depending on their position. Unknown identifiers on positions that are invalid for either licenses or exceptions are still considered parse errors.
    Open source →
    Release notes

    Added

    • PR#84 resolved #67 by inlining the askalono crate to allow detection of license texts or headers from arbitrary text data. There are multiple features flags associated with this new feature.
    • PR#85 resolved #82 by optionally allowing the parsing of unknown identifiers via ParseMode::allow_unknown. Unknown identifiers are either treated as LicenseRef-<unknown identifier> or AdditionRef-<unknown identifier> depending on their position. Unknown identifiers on positions that are invalid for either licenses or exceptions are still considered parse errors.
    Open source →
  7. 0.12.0 19 Aug 2025
    Release notes

    Added

    • PR#81 resolved #68 by adding support for the WITH [%s"DocumentRef-"(idstring)":"]%s"AdditionRef-"(idstring) syntax. Thanks @weihanglo!
    Open source →
    Release notes

    Added

    • PR#81 resolved #68 by adding support for the WITH [%s"DocumentRef-"(idstring)":"]%s"AdditionRef-"(idstring) syntax. Thanks @weihanglo!
    Open source →
  8. 0.11.1 11 Aug 2025
    Release notes

    Changed

    • PR#80 changed how Licensee::satisfies works for GNU licenses again, it now requires that the license ids match exactly. This is incredibly pedantic but means it's up to consumers if the want to have a smarter comparison, I just don't want to have to care about GNU licenses, ever.

    Fixed

    • PR#80 reverted a change introduced in PR#78 that would auto-fixup GNU licenses to their non-deprecated forms eg. GPL-2.0 => GPL-2.0-only. This is no longer done, resolving #79.
    Open source →
    Release notes

    Changed

    • PR#80 changed how Licensee::satisfies works for GNU licenses again, it now requires that the license ids match exactly. This is incredibly pedantic but means it's up to consumers if the want to have a smarter comparison, I just don't want to have to care about GNU licenses, ever.

    Fixed

    • PR#80 reverted a change introduced in [PR#78] that would auto-fixup GNU licenses to their non-deprecated forms eg. GPL-2.0 => GPL-2.0-only. This is no longer done, resolving #79.
    Open source →
  9. 0.11.0 08 Aug 2025
    Release notes

    Changed

    • PR#78 removed ParseMode::allow_lower_case_operators, newer revisions of the SPDX spec allow all lower-case operators, making the option pointless.
    • PR#78 added ParseMode::allow_deprecated, which will cause an error if a deprecated license identifier is used, false in LAX and true in STRICT.
    • PR#78 changed the various imprecise names for GPL licenses to be mapped to the non-deprecated -only versions.
    • PR#78 Expression::canonicalize now always changes GNU licenses to be -only or -or-later as the bare identifiers are deprecated.

    Added

    • PR#78 added LicenseId::version to retrieve the numeric version of the license if it has one.
    • PR#78 added LicenseId::base to retrieve the base name of the license.
    • PR#78 added gnu_license_id which attempts to retrieve the license id for a GNU license from its base identifier. This retrieves the -only or -or-later license that matches.
    • PR#78 added Licensee::parse_mode, Licensee::parse now forwards to that function with ParseMode::STRICT.
    • PR#78 added Reason::GnuPlusWithSuffix and Reason::DeprecatedLicenseId as errors.

    Fixed

    • PR#78 fixed an issue where Licensee::satisfies would not properly allow some licenses if the version was not at the end when using a +, notably the BSD licenses have the version in the middle of the license id.
    • PR#78 fixed the handling of GNU licenses in Licensee::satisfies, at least to my best understanding.
      Licensee GPL-1.0-only GPL-1.0-or-later GPL-2.0-only GPL-2.0-or-later GPL-3.0-only GPL-3.0-or-later
      GPL-1.0-only
      GPL-1.0-or-later
      GPL-2.0-only
      GPL-2.0-or-later
      GPL-3.0-only
      GPL-3.0-or-later
    Open source →
    Release notes

    Changed

    • [PR#78] removed ParseMode::allow_lower_case_operators, newer revisions of the SPDX spec allow all lower-case operators, making the option pointless.
    • [PR#78] added ParseMode::allow_deprecated, which will cause an error if a deprecated license identifier is used, false in LAX and true in STRICT.
    • [PR#78] changed the various imprecise names for GPL licenses to be mapped to the non-deprecated -only versions.
    • [PR#78] Expression::canonicalize now always changes GNU licenses to be -only or -or-later as the bare identifiers are deprecated.

    Added

    • [PR#78] added LicenseId::version to retrieve the numeric version of the license if it has one.
    • [PR#78] added LicenseId::base to retrieve the base name of the license.
    • [PR#78] added gnu_license_id which attempts to retrieve the license id for a GNU license from its base identifier. This retrieves the -only or -or-later license that matches.
    • [PR#78] added Licensee::parse_mode, Licensee::parse now forwards to that function with ParseMode::STRICT.
    • [PR#78] added Reason::GnuPlusWithSuffix and Reason::DeprecatedLicenseId as errors.

    Fixed

    • [PR#78] fixed an issue where Licensee::satisfies would not properly allow some licenses if the version was not at the end when using a +, notably the BSD licenses have the version in the middle of the license id.
    • [PR#78] fixed the handling of GNU licenses in Licensee::satisfies, at least to my best understanding.
      Licensee GPL-1.0-only GPL-1.0-or-later GPL-2.0-only GPL-2.0-or-later GPL-3.0-only GPL-3.0-or-later
      GPL-1.0-only
      GPL-1.0-or-later
      GPL-2.0-only
      GPL-2.0-or-later
      GPL-3.0-only
      GPL-3.0-or-later
    Open source →
  10. 0.10.9 12 Jul 2025
    Release notes

    Changed

    • PR#74 update SPDX license list to 3.27.0.
    Open source →
    Release notes

    Changed

    • PR#74 update SPDX license list to 3.27.0.
    Open source →
  11. 0.10.8 31 Dec 2024
    Release notes

    Changed

    • PR#74 update SPDX license list to 3.26.0.
    Open source →
  12. 0.10.7 15 Nov 2024
    Release notes

    Changed

    • PR#72 update SPDX license list to 3.25.0.
    Open source →
  13. 0.10.6 31 May 2024
    Release notes

    Changed

    • PR#70 update SPDX license list to 3.24.0.
    Open source →
  14. 0.10.4 26 Feb 2024
    Release notes

    Changed

    • PR#65 update SPDX license list to 3.23.
    Open source →
  15. 0.10.3 04 Jan 2024
    Release notes

    Changed

    • PR#63 update SPDX license list to 3.22.

    Added

    • PR#64 resolved #56 by adding Expression::canonicalize which fixes otherwise valid expressions into a form parsable with ParseMode::STRICT
    Open source →
  16. 0.10.2 14 Jul 2023
    Release notes

    Changed

    • PR#61 updated the SPDX license list from 3.20 => 3.21.

    Fixed

    • PR#60 fixed a few typos.
    Open source →
  17. 0.10.1 06 Apr 2023
    Release notes

    Changed

    • PR#59 updated the SPDX license list from 3.19 => 3.20.
    Open source →
  18. 0.10.0 20 Dec 2022
    Release notes

    Changed

    • PR#57 updated the SPDX license list from 3.18 => 3.19.
    Open source →
  19. 0.9.0 25 Aug 2022
    Release notes

    Changed

    • PR#55 updated the SPDX license list from 3.14 => 3.18.
    Open source →
  20. 0.8.1 04 Feb 2022
    Release notes

    Changed

    • PR#51 updates the crates.io metadata for the crate.
    Open source →
  21. 0.8.0 21 Dec 2021
    Release notes

    Changed

    • PR#50 changed ParseMode to be a struct with several fields to give finer grained control over which parts of expression parsing/evaluation can be relaxed. Thanks @Turbo87!
    Open source →
  22. 0.7.0 23 Nov 2021
    Release notes

    Changed

    • PR#48 resolved #45 by making the original error string owned in the case of a parse error, simplifying the handling of errors. Thanks @hoijui!
    • PR#49 bumped the MSRV to 1.56.1, as well as moving to the 2021 edition and setting the rust-version there.
    Open source →
  23. 0.6.2 21 Oct 2021
    Release notes

    Fixed

    • PR#44 fixed the Display for various GNU licenses, since they are "special" and diverge from the SPDX spec for reasons. Thanks @mmurto!

    Added

    • PR#43 added the text feature flag, which includes the full license and exception texts. They can be retrieved via LicenseId::text and ExceptionId::text respectively.
    • PR#43 added the Expression::minimized_requirements method which allows a set of potential licensees be reduced down to the minimum possible requirements for an expression.
    Open source →
  24. 0.6.1 04 Oct 2021
    Release notes

    Added

    • PR#41 added a NOASSERTION license. Hopefully this will become part of spec in the future.
    Open source →
  25. 0.6.0 16 Aug 2021
    Release notes

    Changed

    • PR#40 updated the SPDX license list from 3.11 => 3.14.

    Fixed

    • PR#40 resolved #39 by taking the GFDL exceptional differences from all other licenses (include the other GNU ones) into account.
    Open source →
  26. 0.5.0 20 Jul 2021
    Release notes

    Changed

    • PR#38 fixed various clippy lints which also bumps the MSRV to 1.53.0. Previously, PR#37 had bumped the MSRV to 1.52 so now this crate will check the MSRV so changes are intentional.
    • PR#38 replaced the unmaintained difference crate with similar-asserts.
    Open source →
  27. 0.4.1 14 Jun 2021
    Release notes

    Changed

    • PR#37 removed the dependencies on regex and lazy_static used for parsing some license expression parts, which gives a nice compile speed up with no behavior changes. Thanks @Swagadon!
    Open source →
  28. 0.4.0 26 Mar 2021
    Release notes

    Changed

    • Renamed LicenseItem::SPDX => LicenseItem::Spdx and Token::SPDX => Token::Spdx.
    Open source →
  29. 0.3.6 12 Feb 2021
    Release notes

    Changed

    • Updated to version 3.11 of the SPDX license list
    Open source →
  30. 0.3.5 12 Feb 2021
    Release notes

    Fixed

    Open source →
  31. 0.3.4 04 Mar 2020
    Release notes

    Added

    • Added Expression::iter() which iterates over both the license requirements and the operators.
    Open source →
  32. 0.3.3 29 Feb 2020
    Release notes

    Changed

    • Updated to version 3.8 of the SPDX license list
    Open source →
  33. 0.3.2 29 Jan 2020
    Release notes

    Changed

    • PR#19 added the #[non_exhaustive] attribute to the new ParseMode enum, which bumped the minimum required Rust version to use this crate to 1.40. PR#21 removed this attribute as that enum is primarily an input for this crate, and had little benefit.
    Open source →
  34. 0.3.1 28 Jan 2020 withdrawn
    Release notes

    Added

    • PR#19 Added ParseMode enum, which has a Lax variant that allows certain invalid license identifiers found in some crates on crates.io, as well as the invalid / expression separator. Thanks @kornel!
    Open source →
  35. 0.3.0 14 Dec 2019
    Release notes

    Added

    • Added LicenseId::is_gnu to indicate the GNU licenses (GPL, AGPL, LGPL, GFDL), which use a different suffix format than all other licenses
    • std::error::Error is now (properly) implemented for error::ParseError
    • LicenseReq not implements From<LicenseId>

    Changed

    • Lexer and Token can now be reached via the lexer module
    • parser and expression are no longer part of the public API
    • IS_COPYLEFT, IS_DEPRECATED, IS_FSF_LIBRE, and IS_OSI_APPROVED are no longer part of the public API
    • The GFDL* licenses are now marked as copyleft

    Fixed

    • When creating a LicenseReq from a GNU license, the license identifier is converted into its base form, eg. GPL-2.0-or-later becomes GPL-2.0+ so that the GNU style license identifiers can be used just the same as all of the other ones. See this issue
    Open source →
  36. 0.2.4 25 Nov 2019
    Release notes

    Added

    • Impl Display for Licensee
    Open source →
  37. 0.2.3 07 Nov 2019
    Release notes

    Changed

    • Updated the list of licenses to version 3.7 of the SPDX license list
    Open source →
  38. 0.2.2 06 Nov 2019
    Release notes

    Added

    • Added LicenseId::full_name which is the full name for the license, eg "MIT License" for the "MIT" short identifier
    Open source →
  39. 0.2.1 21 Oct 2019
    Release notes

    Added

    Open source →
  40. 0.2.0 03 Oct 2019
    Release notes

    Added

    • Added a Expression which can parse and validate an SPDX license expression is both syntactically and semantically correct, as well as evaluate the expression via a user provided callback
    • Added an update exe for pulling new SPDX information, copied from https://github.com/rust-lang-nursery/license-exprs
    • Added support for some of the metadata available from the SPDX format, namely "IsDeprecated", "IsFSFLibre", and "IsOSIApproved"

    Changed

    Open source →
  41. 0.1.0 19 Jun 2019
    Release notes

    Added

    <!-- next-url --> [Unreleased]: https://github.com/EmbarkStudios/spdx/compare/0.13.5...HEAD [0.13.5]: https://github.com/EmbarkStudios/spdx/compare/0.13.4...0.13.5 [0.13.4]: https://github.com/EmbarkStudios/spdx/compare/0.13.3...0.13.4 [0.13.3]: https://github.com/EmbarkStudios/spdx/compare/0.13.2...0.13.3 [0.13.2]: https://github.com/EmbarkStudios/spdx/compare/0.13.1...0.13.2 [0.13.1]: https://github.com/EmbarkStudios/spdx/compare/0.13.0...0.13.1 [0.13.0]: https://github.com/EmbarkStudios/spdx/compare/0.12.0...0.13.0 [0.12.0]: https://github.com/EmbarkStudios/spdx/compare/0.11.1...0.12.0 [0.11.1]: https://github.com/EmbarkStudios/spdx/compare/0.11.0...0.11.1 [0.11.0]: https://github.com/EmbarkStudios/spdx/compare/0.10.9...0.11.0 [0.10.9]: https://github.com/EmbarkStudios/spdx/compare/0.10.9...0.10.9 [0.10.9]: https://github.com/EmbarkStudios/spdx/compare/0.10.8...0.10.9 [0.10.8]: https://github.com/EmbarkStudios/spdx/compare/0.10.7...0.10.8 [0.10.7]: https://github.com/EmbarkStudios/spdx/compare/0.10.6...0.10.7 [0.10.6]: https://github.com/EmbarkStudios/spdx/compare/0.10.5...0.10.6 [0.10.4]: https://github.com/EmbarkStudios/spdx/compare/0.10.3...0.10.4 [0.10.3]: https://github.com/EmbarkStudios/spdx/compare/0.10.2...0.10.3 [0.10.2]: https://github.com/EmbarkStudios/spdx/compare/0.10.1...0.10.2 [0.10.1]: https://github.com/EmbarkStudios/spdx/compare/0.10.0...0.10.1 [0.10.0]: https://github.com/EmbarkStudios/spdx/compare/0.9.0...0.10.0 [0.9.0]: https://github.com/EmbarkStudios/spdx/compare/0.8.1...0.9.0 [0.8.1]: https://github.com/EmbarkStudios/spdx/compare/0.8.0...0.8.1 [0.8.0]: https://github.com/EmbarkStudios/spdx/compare/0.7.0...0.8.0 [0.7.0]: https://github.com/EmbarkStudios/spdx/compare/0.6.2...0.7.0 [0.6.2]: https://github.com/EmbarkStudios/spdx/compare/0.6.1...0.6.2 [0.6.1]: https://github.com/EmbarkStudios/spdx/compare/0.6.0...0.6.1 [0.6.0]: https://github.com/EmbarkStudios/spdx/compare/0.5.0...0.6.0 [0.5.0]: https://github.com/EmbarkStudios/spdx/compare/0.4.1...0.5.0 [0.4.1]: https://github.com/EmbarkStudios/spdx/compare/0.4.0...0.4.1 [0.4.0]: https://github.com/EmbarkStudios/spdx/compare/0.3.6...0.4.0 [0.3.6]: https://github.com/EmbarkStudios/spdx/compare/0.3.5...0.3.6 [0.3.5]: https://github.com/EmbarkStudios/spdx/compare/0.3.4...0.3.5 [0.3.4]: https://github.com/EmbarkStudios/spdx/compare/0.3.3...0.3.4 [0.3.3]: https://github.com/EmbarkStudios/spdx/compare/0.3.2...0.3.3 [0.3.2]: https://github.com/EmbarkStudios/spdx/compare/0.3.1...0.3.2 [0.3.1]: https://github.com/EmbarkStudios/spdx/compare/0.3.0...0.3.1 [0.3.0]: https://github.com/EmbarkStudios/spdx/compare/0.2.4...0.3.0 [0.2.4]: https://github.com/EmbarkStudios/spdx/compare/0.2.3...0.2.4 [0.2.3]: https://github.com/EmbarkStudios/spdx/compare/0.2.2...0.2.3 [0.2.2]: https://github.com/EmbarkStudios/spdx/compare/0.2.1...0.2.2 [0.2.1]: https://github.com/EmbarkStudios/spdx/compare/0.2.0...0.2.1 [0.2.0]: https://github.com/EmbarkStudios/spdx/compare/0.1.0...0.2.0 [0.1.0]: https://github.com/EmbarkStudios/spdx/releases/tag/0.1.0

    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive