Releases: obi1kenobi/cargo-semver-checks
Release list
v0.51.0
In this release
C-ABI variadic functions are new in Rust 1.99, and this is the first time a new language feature has had immediate SemVer linting support in the corresponding cargo-semver-checks release 🎉
- Six new lints for variadic functions:
function_no_longer_variadicfunction_now_variadicinherent_method_no_longer_variadicinherent_method_now_variadictrait_method_no_longer_variadictrait_method_now_variadic
- Bugfix in
inherent_method_now_doc_hiddenwhen multipleimplblocks for the same type have the same method name - Support for symlinks inside git repos used by the
--baseline-revflag- Thanks to @heaths for the initial PR that helped set this up.
- Lots of security hardening, both in this repository and in dependencies that I also manage

✨ This adorable animation was made by @dekirisu ✨
This release requires Rust 1.93+ both to install (MSRV) and at runtime.
All merged PRs
What's Changed
- Change =false to !=true in query filters by @ivelieu in #1692
- Weekly
cargo updateof dependencies by @obi1kenobi in #1693 - Weekly
cargo updateof dependencies by @obi1kenobi in #1694 - Weekly
cargo updateof dependencies by @obi1kenobi in #1695 - Proactively check query sort key columns when testing queries. by @obi1kenobi in #1698
- Weekly
cargo updateof dependencies by @obi1kenobi in #1699 - Add next Rust minor to test matrix by @obi1kenobi in #1700
- Apply security hardening tweaks to workflows based on
zizmoradvice. by @obi1kenobi in #1701 - Fix missing check in CI workflow. by @obi1kenobi in #1702
- Ensure rustdoc caches are properly reused across jobs. by @obi1kenobi in #1703
- Optimize sha256sum calls to be faster especially in GitHub runners. by @obi1kenobi in #1704
- Use
-Z min-publish-agewith 7 days in deps-update script. by @obi1kenobi in #1705 - Add a build-script policy with hashes for allowed build scripts. by @obi1kenobi in #1706
- Add a seven-day Dependabot cooldown by @obi1kenobi in #1707
- Use owned fork for
ref-slicebreakage checking; don't persist creds. by @obi1kenobi in #1708 - Check SHA256 for downloaded yq binary. by @obi1kenobi in #1709
- Reduce workflow permissions to the absolute minimum required. by @obi1kenobi in #1710
- Serialize workflows that can force-push their branches. by @obi1kenobi in #1711
- Harden release workflow to avoid races and sanitize interpolation. by @obi1kenobi in #1713
- Add missing
run-on-bare-repositoryjob to CI dependencies. by @obi1kenobi in #1714 - Harden the automated Rust upgrade workflow against unexpected changes. by @obi1kenobi in #1715
- Pin all external actions to specific commit hashes. by @obi1kenobi in #1716
- Build release and binaries without holding tokens. by @obi1kenobi in #1717
- Limit credentials down to the specific step that needs them. by @obi1kenobi in #1721
- Do not cancel
mainbranch in-progress releases on new push. by @obi1kenobi in #1722 - Enforce Zizmor audit comes back clean in CI. by @obi1kenobi in #1723
- Remove Settings app to reduce blast radius. by @obi1kenobi in #1724
- Update Rust setup actions in release workflows by @obi1kenobi in #1729
- Check actionlint binary's hash and merge into main CI workflow. by @obi1kenobi in #1728
- Fix flaky global color inheritance test. by @obi1kenobi in #1730
- Narrower use of PATs when updating Rust versions. by @obi1kenobi in #1731
- Bump zizmorcore/zizmor-action from 0.6.2 to 0.6.3 by @dependabot[bot] in #1727
- Simplify version tagging to remove unnecessary repo secret. by @obi1kenobi in #1732
- Pin upstream repos for tests to specific commit hashes. by @obi1kenobi in #1733
- Weekly
cargo updateof dependencies by @obi1kenobi in #1734 - Allow my account to make changes to
.github/and protected info. by @obi1kenobi in #1735 - Weekly
cargo updateof dependencies by @obi1kenobi in #1740 - Bump zizmorcore/zizmor-action from 0.6.3 to 0.6.4 by @dependabot[bot] in #1738
- Bump actions-rust-lang/setup-rust-toolchain from 1.17.0 to 2.0.0 by @dependabot[bot] in #1739
- Add 6 new lints to flag variadic fn breaking changes. by @obi1kenobi in #1741
- Eliminate false-positives in variadic lints and doc(hidden) lint. by @obi1kenobi in #1742
- Weekly
cargo updateof dependencies by @obi1kenobi in #1743 - Add next Rust minor to test matrix by @obi1kenobi in #1745
- Weekly
cargo updateof dependencies by @obi1kenobi in #1747 - Resolve symlinks as normal files by @heaths in #1719
- Resolve directory symlinks before parent path components. by @obi1kenobi in #1749
- Release v0.51.0. by @obi1kenobi in #1748
New Contributors
Full Changelog: v0.50.0...v0.51.0
v0.50.0
In this release
- Support for rustdoc JSON v61 for the latest nightly Rust
- One new lint:
auto_trait_impl_added - Bugfix in
constructible_struct_adds_fieldto properly account for existingpubbut#[doc(hidden)]fields. - Support for parsing rustdocflags from
.cargo/config.tomland some minor bugfixes- Thanks to @taiki-e for accepting our upstream patches and promptly releasing them in
cargo-config2so we can use them!
- Thanks to @taiki-e for accepting our upstream patches and promptly releasing them in

✨ This adorable animation was made by @dekirisu ✨
This release requires Rust 1.93+ both to install (MSRV) and at runtime.
All merged PRs
- Fix publishing workflow not being triggered because of optional job. by @obi1kenobi in #1679
- Make Rust 1.93 the MSRV and remove old fixtures. by @obi1kenobi in #1680
- Update to
trustfall_rustdocv0.40.0, dropping rustdoc JSON v56. by @obi1kenobi in #1682 - Weekly
cargo updateof dependencies by @obi1kenobi in #1684 - Fix lints about constructible structs to account for non-pub-API fields. by @obi1kenobi in #1685
- Weekly
cargo updateof dependencies by @obi1kenobi in #1686 - Add minor lint: auto trait impl added to pub type by @ivelieu in #1683
- Upgrade
trustfall_rustdocto v0.41.0 adding support for rustdoc v61. by @obi1kenobi in #1687 - Bump
cargo-config2to pick up rustdocflags parsing and bugfixes. by @obi1kenobi in #1688 - Bump mozilla-actions/sccache-action from 0.0.10 to 0.0.11 by @dependabot[bot] in #1689
- Weekly
cargo updateof dependencies by @obi1kenobi in #1690 - Release v0.50.0 supporting rustdoc v61 and parsing config rustdocflags. by @obi1kenobi in #1691
New Contributors
Full Changelog: v0.49.0...v0.50.0
v0.49.0
In this release
- Unstable
--stability-awaremode for detecting breakage in the Rust standard library. - False-positive fix: correctly propagate
#[doc(hidden)]through glob re-exports when determining public API. - Bugfix: honor
--packagetogether with--workspace, including explicitly selectedpublish = falsepackages. - The
cargo-semver-checksbinary can now be invoked directly, including by full path, as well as viacargo semver-checks. - Exit codes now distinguish deny-level SemVer violations (
100) from errors that prevented the check from completing (101). - Git repositories using SHA-256 object hashes are now supported.

✨ This adorable animation was made by @dekirisu ✨
This release requires Rust 1.92+ both to install (MSRV) and at runtime.
All merged PRs
- Weekly
cargo updateof dependencies by @obi1kenobi in #1649 - Update gix from 0.78 to 0.84, and enable SHA256 support by @musicinmybrain in #1650
- Weekly
cargo updateof dependencies by @obi1kenobi in #1651 - Bump actions/checkout from 6 to 7 by @dependabot[bot] in #1653
- Weekly
cargo updateof dependencies by @obi1kenobi in #1654 - Weekly
cargo updateof dependencies by @obi1kenobi in #1657 - Upgrade
trustfall_rustdocto support rustdoc JSON v60. by @obi1kenobi in #1661 - Add test cases for
#[doc(hidden)]in glob re-exports. by @obi1kenobi in #1662 - Bump actions/cache from 5 to 6 by @dependabot[bot] in #1655
- Upgrade dev dependency major versions by @obi1kenobi in #1663
- Upgrade major dependencies without code changes by @obi1kenobi in #1664
- Upgrade cargo_toml to 1.0 by @obi1kenobi in #1666
- Upgrade rand and sha2 by @obi1kenobi in #1665
- Weekly
cargo updateof dependencies by @obi1kenobi in #1667 - Apply cargo clippy --fix by @obi1kenobi in #1671
- Add explicit regression test for
-Dwarnings. by @obi1kenobi in #1670 - Add next Rust minor to test matrix by @obi1kenobi in #1669
- Add
--stability-awareunstable CLI option for Rust stdlib use. by @obi1kenobi in #1673 - Differentiate "deny-level lints" from tool errors using exit codes. by @obi1kenobi in #1674
- fix(cli): honor --package with --workspace by @ychampion in #1668
- Weekly
cargo updateof dependencies by @obi1kenobi in #1675 - Allow invocation from full binary name instead of cargo subcommand by @alerque in #1652
- Weekly
cargo updateof dependencies by @obi1kenobi in #1677 - Release v0.49.0. by @obi1kenobi in #1678
New Contributors
- @musicinmybrain made their first contribution in #1650
- @ychampion made their first contribution in #1668
- @alerque made their first contribution in #1652
Full Changelog: v0.48.0...v0.49.0
v0.48.0
In this release
- One new lint:
union_field_marked_deprecated - False positive fix: do not report supertrait changes if switching between
whereandtrait Name: Supersyntaxes - Bugfix: avoid erroneous cache hits when changing cfg or target triple flags

✨ This adorable animation was made by @dekirisu ✨
This release requires Rust 1.91+ both to install (MSRV) and at runtime.
All merged PRs
- Weekly
cargo updateof dependencies by @obi1kenobi in #1599 - Weekly
cargo updateof dependencies by @obi1kenobi in #1601 - Weekly
cargo updateof dependencies by @obi1kenobi in #1604 - Make
cargo semver-checks --helpoutput colorful by @BD103 in #1603 - Add test corpus for partial_ord_enum_variants_reordered false positives by @MarcosAsh in #1597
- Fix trailing whitespace and add CI job to check it going forward. by @obi1kenobi in #1608
- Make -q command-line option show lint violations by @geeknoid in #1576
- Weekly
cargo updateof dependencies by @obi1kenobi in #1609 - Add minor lint: union_field_marked_deprecated by @Ashutosh0x in #1611
- Add
WitnessPurposefield to lint query witnesses. by @obi1kenobi in #1615 - Weekly
cargo updateof dependencies by @obi1kenobi in #1616 - Plumb consistency check witnesses through the CLI and API. by @obi1kenobi in #1619
- Weekly
cargo updateof dependencies by @obi1kenobi in #1620 - Add a witness runner based on cargo script with check-based validation. by @obi1kenobi in #1621
- Tweaks to the
AGENTS.mdfile. by @obi1kenobi in #1622 - Fix an accounting bug in witness outcome assessment code. by @obi1kenobi in #1623
- Add entry on witnesses to README. by @obi1kenobi in #1624
- Weekly
cargo updateof dependencies by @obi1kenobi in #1626 - Update CI jobs to account for
core2yank breaking our fixtures. by @obi1kenobi in #1629 - Add next Rust minor to test matrix by @obi1kenobi in #1627
- Ensure losing dyn-compatibility by adding assoc consts is tested. by @obi1kenobi in #1630
- Weekly
cargo updateof dependencies by @obi1kenobi in #1631 - Weekly
cargo updateof dependencies by @obi1kenobi in #1634 - Run
cargo clippy --fix && cargo fmtwhen upgrading Rust versions. by @obi1kenobi in #1635 - Weekly
cargo updateof dependencies by @obi1kenobi in #1636 - Bump mozilla-actions/sccache-action from 0.0.9 to 0.0.10 by @dependabot[bot] in #1633
- Weekly
cargo updateof dependencies by @obi1kenobi in #1637 - Weekly
cargo updateof dependencies by @obi1kenobi in #1638 - Weekly
cargo updateof dependencies by @obi1kenobi in #1641 - Include cfg and toolchain in build fingerprint, to avoid collisions. by @obi1kenobi in #1642
- Switching between supertrait syntaxes mustn't cause false-positives. by @obi1kenobi in #1644
- Use atomic writes to ensure we don't get partial write results. by @obi1kenobi in #1645
- Remove the unused toggle for disabling
--no-depsrustdoc mode. by @obi1kenobi in #1643 - Add next Rust minor to test matrix by @obi1kenobi in #1646
- Weekly
cargo updateof dependencies by @obi1kenobi in #1647 - Release v0.48. by @obi1kenobi in #1648
New Contributors
- @BD103 made their first contribution in #1603
- @geeknoid made their first contribution in #1576
- @Ashutosh0x made their first contribution in #1611
Full Changelog: v0.47.0...v0.48.0
v0.47.0
In this release
- 7 new lints
- Spotlight: Google Summer of Code
This release also includes a workaround for a Rust 1.94 rustdoc bug that caused cargo-semver-checks to crash in certain projects. We contributed the fix to rustdoc and are including a workaround here so our users can continue using cargo-semver-checks with Rust 1.94.

✨ This adorable animation was made by @dekirisu ✨
This release requires Rust 1.91+ both to install (MSRV) and at runtime.
Spotlight: Participating in Google Summer of Code
cargo-semver-checks is once again participating in Google Summer of Code, as part of the Rust project!
This is the third year in a row that students from all over the world are eligible to submit proposals for multi-month projects aimed at improving Rust and its tooling such as cargo-semver-checks. An initial list of suggested proposal topics is available here, and student are of course welcome to bring their own ideas as well.
The application period runs from March 16-31, 2026. Good luck to all applicants — we're excited to see you and we can't wait to see what you build!
New lints
7 opt-in lints for additive-only changes were added in this release:
inherent_method_addedinherent_method_no_longer_unsafeinherent_method_now_constrepr_c_addedrepr_transparent_addedstruct_no_longer_has_non_pub_fieldsstruct_no_longer_non_exhaustive
All merged PRs
- Drop support for Rust 1.90. MSRV is now 1.91. by @obi1kenobi in #1559
- Upgrade gix and tame-index; drop support for git indexes. by @obi1kenobi in #1560
- specify cargo-binstall metadata for faster download by @marcoieni in #1561
- Weekly
cargo updateof dependencies by @obi1kenobi in #1564 - Add minor lint for removing #[non_exhaustive] from public struct by @connor15mcc in #1550
- Weekly
cargo updateof dependencies by @obi1kenobi in #1567 - Weekly
cargo updateof dependencies by @obi1kenobi in #1569 - Add minor lint for losing all non-
pubfields by @connor15mcc in #1562 - fix: clarify method_parameter_count_changed error template by @Ansh-699 in #1570
- feat: add minor lint
inherent_method_addedby @Ansh-699 in #1571 - Check lint reference links for validity. Fix broken links. by @obi1kenobi in #1572
- ignore architecture-specific lint tests on unsupported architectures by @chrjabs in #1568
- Handle the tuple form of lint registrations in
make_new_lint.sh. by @obi1kenobi in #1573 - Ensure lints in
add_lints!()are properly sorted. by @obi1kenobi in #1574 - Weekly
cargo updateof dependencies by @obi1kenobi in #1575 - tests: force ASCII cargo diagnostics in snapshot tests (CARGO_TERM_UNICODE=false) by @obi1kenobi in #1578
- Weekly
cargo updateof dependencies by @obi1kenobi in #1580 - Add next Rust minor to test matrix by @obi1kenobi in #1588
- Bump actions/upload-artifact from 6 to 7 by @dependabot[bot] in #1585
- Bump actions/download-artifact from 7 to 8 by @dependabot[bot] in #1584
- Weekly
cargo updateof dependencies by @obi1kenobi in #1587 - Add minor lint: inherent_method_no_longer_unsafe by @MarcosAsh in #1579
- Add minor lint: repr(transparent) added on public API type by @h-wal in #1582
- Update reference link which seems to have moved recently. by @obi1kenobi in #1594
- Add minor lint: repr(C) added on public API type by @h-wal in #1581
- Add minor lint: inherent_method_now_const by @h-wal in #1589
- Release v0.47.0. by @obi1kenobi in #1596
New Contributors
- @Ansh-699 made their first contribution in #1570
- @chrjabs made their first contribution in #1568
- @MarcosAsh made their first contribution in #1579
- @h-wal made their first contribution in #1582
Full Changelog: v0.46.0...v0.47.0
v0.46.0
In this release
- 45 new lints — our biggest release ever!
- Spotlight: Exponential growth continued — 2025 Year in Review

✨ This adorable animation was made by @dekirisu ✨
This release requires Rust 1.90+ both to install (MSRV) and at runtime. Future releases will require Rust 1.91+.
This is the last release to support git-based package indexes. Future releases will require the use of a sparse index for linting against package versions published to a registry.
Spotlight: Exponential growth continued — 2025 Year in Review
Please check out our year in review post for a look at what we accomplished in 2025, and what lies ahead.
One of the highlights: in 2025 we more than doubled the number of lints, from 120 on January 1 to 242 lints on December 31!

New lints
This release ships with 245 lints in total. We added 35 new SemVer-major deny-by-default lints, 2 major warn-by-default lints, and 8 new allow-by-default lints for additive-only changes.
SemVer-major, deny-by-default
New trait impls
copy_impl_added
Type kind changes (enum became struct etc.)
enum_changed_kindtrait_changed_kindunion_changed_kindunion_changed_to_incompatible_structunion_with_multiple_pub_fields_changed_to_struct
Cargo feature graph removal
feature_no_longer_enables_feature
Exported functions (FFI) signature/ABI/target features
exported_function_abi_no_longer_unwindexported_function_abi_now_unwindexported_function_parameter_count_changedexported_function_return_value_addedexported_function_now_returns_unitexported_function_target_feature_addedexported_function_requires_more_target_features
Method ABI/unwind/symbol changes (inherent + trait)
inherent_method_changed_abiinherent_method_no_longer_unwindinherent_method_now_unwindtrait_method_changed_abitrait_method_no_longer_unwindtrait_method_now_unwindmethod_export_name_changed
Inherent method receiver changes
method_no_longer_has_receivermethod_receiver_mut_ref_became_ownedmethod_receiver_ref_became_mutmethod_receiver_ref_became_ownedmethod_receiver_type_changed
Trait method receiver changes
trait_method_no_longer_has_receivertrait_method_receiver_addedtrait_method_receiver_mut_ref_became_ownedtrait_method_receiver_mut_ref_became_reftrait_method_receiver_owned_became_mut_reftrait_method_receiver_owned_became_reftrait_method_receiver_ref_became_muttrait_method_receiver_ref_became_ownedtrait_method_receiver_type_changed
SemVer-major, warn-by-default
Sealed trait method receiver changes
pub_api_sealed_trait_method_receiver_addedpub_api_sealed_trait_method_receiver_mut_ref_became_ref
Allow-by-default lints for additive-only changes
Public struct additions / exhaustiveness
exhaustive_struct_addedexhaustive_struct_with_private_fields_addedexhaustive_struct_with_doc_hidden_fields_addednon_exhaustive_struct_added
Cargo feature graph expansion
feature_newly_enables_feature
Associated items added on inherent impls
inherent_associated_pub_const_added
#[must_use] removals
inherent_method_must_use_removedtrait_must_use_removed
All merged PRs
- Keep the GitHub credentials configuration, just override token. by @obi1kenobi in #1487
- Drop support for Rust 1.89. New MSRV is 1.90. by @obi1kenobi in #1489
- Weekly
cargo updateof dependencies by @obi1kenobi in #1490 - new lint:
method_receiver_ref_became_ownedby @lovelindhoni in #1263 - Add
method_receiver_ref_became_mutlint. by @obi1kenobi in #1492 - Add
method_receiver_mut_ref_became_ownedlint. by @obi1kenobi in #1493 - Add
method_receiver_type_changedlint. by @obi1kenobi in #1494 - Add
method_no_longer_has_receiverlint; bugfix in param count lint. by @obi1kenobi in #1496 - Replace deprecated cargo_bin usage in tests by @obi1kenobi in #1495
- Checkout with token to make tags and releases. by @obi1kenobi in #1488
- Fix false-positive in
trait_method_parameter_count_changedlint. by @obi1kenobi in #1498 - Add lints for breaking changes to general-case trait method receivers. by @obi1kenobi in #1499
- Add
trait_method_no_longer_has_receiverlint. by @obi1kenobi in #1500 - Add remaining trait receiver lints. by @obi1kenobi in #1501
- Remove expression from
instaoutput in tests. by @CLIDragon in #1497 - Match up receivers in param-count-changed lints to avoid false-positives by @obi1kenobi in #1502
- Weekly
cargo updateof dependencies by @obi1kenobi in #1503 - Add lints for adding receivers to trait methods. by @obi1kenobi in #1504
- Clean up ABI-related lints to make them use latest schema abilities. by @obi1kenobi in #1505
- Add
method_export_name_changedlint. by @obi1kenobi in #1506 - Add new lints for ABI-exported functions. by @obi1kenobi in #1507
- Add ABI change lints for inherent methods and trait methods. by @obi1kenobi in #1508
- Weekly
cargo updateof dependencies by @obi1kenobi in #1510 - Bump actions/checkout from 5 to 6 by @dependabot[bot] in #1511
- Add support for rustdoc v57 via trustfall_rustdoc v0.37.0. by @obi1kenobi in #1512
- Update to ron v0.12.0. by @obi1kenobi in #1513
- Add lint trait_must_use_removed by @Nalin-khanna in #1515
- Inherent method must_use removed by @Nalin-khanna in #1516
- Add next Rust minor to test matrix by @obi1kenobi in #1518
- Bump actions/cache from 4 to 5 by @dependabot[bot] in #1521
- Bump actions/download-artifact from 6 to 7 by @dependabot[bot] in #1520
- Bump actions/upload-artifact from 5 to 6 by @dependabot[bot] in #1519
- Weekly
cargo updateof dependencies by @obi1kenobi in #1514 - Weekly
cargo updateof dependencies by @obi1kenobi in #1522 - Upgrade
gixandtame-indexto new majors. by @obi1kenobi in #1525 - Weekly
cargo updateof dependencies by @obi1kenobi in #1524 - Add
exported_function_return_value_addedlint. by @obi1kenobi in #1527 - Explain that negative tests w/ identical code are pointless. by @obi1kenobi in #1528
- Weekly
cargo updateof dependencies by @obi1kenobi in #1529 - Separate out "enum became struct/union/trait" from "enum missing" lint. by @obi1kenobi in #1530
- Add
trait_changed_kindlint separate fromtrait_missing. by @obi1kenobi in #1531 - Add new lints for unions changing to other kinds of types. by @obi1kenobi in #1533
- Revert trait_missing trait public_api suppression gate by @obi1kenobi in #1532
- Improve
src/lints/AGENTS.mdbased on latest lint-writing experience. by @obi1kenobi in #1534 - Add
copy_impl_addedlint. by @obi1kenobi in #1536 - Implement
feature_no_longer_implies_featurelint. by @obi1kenobi in #1535 - Implement
feature_newly_implies_featurelint. by @obi1kenobi in #1537 - Exhaustiv...
v0.45.0
In this release
- Respect
.cargo/config.tomlbuild configuration,RUSTFLAGS, andRUSTDOCFLAGS - Spotlight: Ghosts in the Compilation

✨ This adorable animation was made by @dekirisu ✨
This release requires Rust 1.89+ both to install (MSRV) and at runtime. Future releases will require Rust 1.90+.
Spotlight: Ghosts in the Compilation
Celebrating Halloween, Ghosts in the Compilation is the debugging story of how the functionality for respecting .cargo/config.toml configuration came to be.
We found a crate where:
cargo-semver-checkssaid the code didn't compile.cargo checksaid it was fine.
As a result, we learned a fair bit about the edge cases of cargo, rustc, rustdoc, and compilation flags. Check it out here!
All merged PRs
- Releases now use Trusted Publishing, not a crates.io token. by @obi1kenobi in #1445
- Separate the tag and release-creation job from the publish job. by @obi1kenobi in #1446
- Remove unused atty dependency by @tottoto in #1448
- Update clap deprecated api by @tottoto in #1449
- Drop support for Rust 1.88. by @obi1kenobi in #1447
- docs: document test crate authoring practices by @obi1kenobi in #1450
- Add
AGENTS.mdforsrc/lintsdirectory. by @obi1kenobi in #1451 - Add tests for test crate manifest consistency by @obi1kenobi in #1452
- Add unit test validating lint file metadata by @obi1kenobi in #1453
- Weekly
cargo updateof dependencies by @obi1kenobi in #1454 - Add top-level AGENTS.md file. by @obi1kenobi in #1455
- Add CI check for Cargo.lock files in test crates by @obi1kenobi in #1457
- Trim unchanged code from test crate pairs by @obi1kenobi in #1458
- Add workflow to auto-apply lint fixes by @obi1kenobi in #1459
- Add test to verify lint file naming consistency by @obi1kenobi in #1456
- Fix crash when passing
--manifest-path Cargo.tomlin cwd. by @obi1kenobi in #1462 - Weekly
cargo updateof dependencies by @obi1kenobi in #1465 - Weekly
cargo updateof dependencies by @obi1kenobi in #1468 - Ignore stale directories in manifest consistency check test. by @obi1kenobi in #1469
- Leniently accept
--baseline-rootas a manifest path. by @obi1kenobi in #1464 - Load rustflags/rustdocflags from cargo config, then augment them. by @obi1kenobi in #1471
- chore: updating snapshots for branch codex/remove-identical-code-in-test-crates by @obi1kenobi in #1460
- Weekly
cargo updateof dependencies by @obi1kenobi in #1474 - Weekly
cargo updateof dependencies by @obi1kenobi in #1479 - Add
--buildcargo flag to build failure repro message. by @obi1kenobi in #1480 - Bump actions/download-artifact from 5 to 6 by @dependabot[bot] in #1477
- Bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in #1476
- Fix broken rustdoc link. by @obi1kenobi in #1483
- Streamlined error message wording. by @obi1kenobi in #1482
- Add next Rust minor to test matrix by @obi1kenobi in #1481
- Update
tame-indexandgixdependencies together. by @obi1kenobi in #1484 - Bump cargo_metadata version and chained dependencies. by @obi1kenobi in #1485
- Release v0.45. by @obi1kenobi in #1486
New Contributors
Full Changelog: v0.44.0...v0.45.0
v0.44.0
In this release
- 22 new lints, for a total of 200 🎉
- Spotlight: The Road to 200 lints

✨ This adorable animation was made by @dekirisu ✨
This release requires Rust 1.88+ both to install (MSRV) and at runtime. Future releases will require Rust 1.89+.
Spotlight: The Moore's Law of Lints
We have a kind of "Moore's Law" for lints: every year we run twice as many lints in the same total time.
- 30 lints at the end of 2022
- 57 lints at the end of 2023
- 120 lints at the end of 2024
- We'd need 240 lints at the end of 2025 to keep up the pace; with ~3.3 months to go, we're at 200 lints.
- Meanwhile, as of the optimizations shipped 2.5 years ago, running lints on crates.io's largest library required only 8s or less.
This is rare and remarkable, and requires overcoming many complex socio-technical challenges! Here are a few examples from conference talks related to cargo-semver-checks:
- Advanced testing techniques that allow us to ship quickly — EuroRust 2024
- Designing powerful optimization APIs so our linting time doesn't explode — P99 CONF 2023
- Forging closer integrations with the rest of the Rust project, so we can solve problems together — RustWeek 2025
- "SemVer linting is an undecidable problem" and yet we've found ways to solve it anyway — Rust Forge 2025
We're also fortunate to have two extraordinary students working on cargo-semver-checks this year as part of Google Summer of Code! Their work is key to continuing this positive exponential trend, and we look forward to showcasing their impact more closely later this year.
New lints
The 22 new lints are grouped in several categories.
API or ABI breakage
function_const_generic_reorderedfunction_generic_type_reorderedfunction_now_returns_unitinherent_method_const_generic_reorderedinherent_method_generic_type_reorderedinherent_method_now_returns_unitrepr_align_addedrepr_align_changedrepr_align_removedrepr_packed_changedtrait_const_generic_reorderedtrait_generic_type_reorderedtrait_method_const_generic_reorderedtrait_method_generic_type_reorderedtrait_method_now_returns_unittrait_method_return_value_addedtype_const_generic_reorderedtype_generic_type_reordered
Compatibility risks, such as changes that may require a SemVer major bump to revert, or may otherwise represent unintended API changes without being SemVer-major themselves:
pub_api_sealed_trait_method_return_value_added
Additive-only API changes (opt-in only; more work required):
function_must_use_removedstruct_must_use_removedunion_must_use_removed
All merged PRs
- Minimum supported Rust version is now 1.88. by @obi1kenobi in #1387
- Weekly
cargo updateof dependencies by @obi1kenobi in #1388 - Bump actions/checkout from 4 to 5 by @dependabot[bot] in #1389
- Weekly
cargo updateof dependencies by @obi1kenobi in #1391 - Add
struct_must_use_removedby @nk9 in #1392 - Weekly
cargo updateof dependencies by @obi1kenobi in #1395 - Weekly
cargo updateof dependencies by @obi1kenobi in #1398 - Add info about build prerequisites to the CONTRIBUTING doc. by @nk9 in #1402
- Add
function_must_use_removedby @nk9 in #1400 - Add
union_must_use_removedby @nk9 in #1399 - Sort the list of lints. by @obi1kenobi in #1403
- Replace tuple with a LintResult struct by @kornelski in #1396
- Bump trustfall_rustdoc to v0.33.0 by @obi1kenobi in #1405
- Ensure rustdoc generation script doesn't overflow shell arg buffer. by @obi1kenobi in #1406
- Add
function_const_generic_reorderedandfunction_generic_type_reorderedlints. by @obi1kenobi in #1407 - lint: detect trait method generic reordering by @obi1kenobi in #1409
- lint: detect generic reorder in inherent methods by @obi1kenobi in #1408
- Add lints for generic reorder on impl owners by @obi1kenobi in #1410
- Add lints for trait generic const/type reordering by @obi1kenobi in #1411
- run_check_release tweaks by @kornelski in #1412
- Add repr_packed_changed lint by @obi1kenobi in #1415
- Add repr_align_changed lint by @obi1kenobi in #1418
- Better diagnostic in
repr_packed_changedlint. by @obi1kenobi in #1420 - Add repr align added and removed lints by @obi1kenobi in #1419
- Don't create a vec for skipped queries by @kornelski in #1413
- Separate report printing from generation by @kornelski in #1422
- Weekly
cargo updateof dependencies by @obi1kenobi in #1425 - Enable the rustdoc JSON v56 support feature. by @obi1kenobi in #1426
- [Witness Generation] Add empty witness crate generation by @GlitchlessCode in #1414
- Weekly
cargo updateof dependencies by @obi1kenobi in #1427 - Update
trustfall_rustdocandcargo_metadataversions. by @obi1kenobi in #1428 - Bump
ron,clap-cargo,gix, andtame-indexmajor versions. by @obi1kenobi in #1429 - Add .gitignore in the
test_cratesdirectory to ignore lockfiles. by @obi1kenobi in #1431 - Add lint for functions now returning unit by @obi1kenobi in #1432
- Use edition 2024 for the template crate. by @obi1kenobi in #1434
- feat: check inherent method returning unit by @obi1kenobi in #1433
- Add
TODOnotes to function about returning unit. by @obi1kenobi in #1435 - Add lint for trait methods that start returning unit by @obi1kenobi in #1436
- Weekly
cargo updateof dependencies by @obi1kenobi in #1437 - Add next Rust minor to test matrix by @obi1kenobi in #1438
- Add lint for trait method return value added by @obi1kenobi in #1439
- Handle async methods in sealed trait return value lint by @obi1kenobi in #1440
- Enable Trusted Publishing for release workflow by @obi1kenobi in #1442
- Weekly
cargo updateof dependencies by @obi1kenobi in #1441 - Allow write permission for ID token for trusted publishing. by @obi1kenobi in #1444
New Contributors
Full Changelog: v0.43.0...v0.44.0
v0.43.0
In this release
- Spotlight: I'm giving a talk at Rust Forge!
- Performance improvements
- 1 new lint, for a total of 178
This release requires Rust 1.87+ both to install (MSRV) and at runtime. Future releases will require Rust 1.88+.
Spotlight: I'm giving a talk at Rust Forge!
Rust Forge is a creative new conference organized by Rust in Action author Tim McNamara. It's scheduled for 27-30 August 2025 in Wellington, New Zealand.
My talk is titled "The Past, Present, and Future of SemVer in Rust" and I'm extremely excited about it! Here's a short description:
At least 1-2 times per week, accidental breaking changes sneak into the new release of some popular Rust package, despite the maintainers' best efforts. Why is this still a problem 10 years after Rust 1.0? What will it take to finally stop such breakage, so we can have fearless
cargo update?
It's not too late to grab a ticket! I hope to see you there!
Performance improvements
Supporting an exponentially-growing number of lints requires periodic maintenance in the form of mandatory performance engineering, Without it, things would quickly get out of hand, and large crates and large workspaces would be affected first. To prevent that, this release cycle focused on both internal and external improvements.
Externally-visible improvements include lint execution time improvements, courtesy of a new query profiling tool prototype developed by @CLIDragon. This allowed us to add targeted new indexes that speed up the execution of some lints by as much as 10x! After these optimizations, running the full suite of lints on Rust's largest crates needs only ~2s, down from around ~8s previously.
Internal improvements include a variety of optimizations aimed at reducing the time taken by our CI suite, from an original of ~7min for cargo test down to around ~1min.
If you're wondering why cargo test used to take 7min in the first place: our test suite runs ~250000 lint queries to ensure correctness and keep false-positives out! Even extremely cheap operations done 250k times add up very quickly! After the optimizations, we still run those 250k queries — we didn't sacrifice correctness at all, but merely cut out avoidable overhead.
New lints
We added only one new lint in this release, tracking an additive-only API change: enum_must_use_removed. This lint group remains opt-in-only.
All merged PRs
- Drop support for Rust prior to 1.87. by @obi1kenobi in #1359
- Use edition 2024 now that we aren't MSRV-bound. by @obi1kenobi in #1360
- Weekly
cargo updateof dependencies by @obi1kenobi in #1361 - Refactor rustdoc generation, replacing dynamic dispatch system by @GlitchlessCode in #1354
- Weekly
cargo updateof dependencies by @obi1kenobi in #1363 - Bump trustfall_rustdoc to v0.29 to use cached schemas. by @obi1kenobi in #1365
- Weekly
cargo updateof dependencies by @obi1kenobi in #1367 - Weekly
cargo updateof dependencies by @obi1kenobi in #1370 - Add
enum_must_use_removedlint. by @shreyans413 in #1368 - Support rustdoc v54 and use latest
cargo_metadata. by @obi1kenobi in #1372 - Parse each query three times per query-lint pair (instead of six times) by @CLIDragon in #1371
- Weekly
cargo updateof dependencies by @obi1kenobi in #1374 - Use
run_query_with_indexed_queryby @CLIDragon in #1373 - Bump major versions of
cargo_toml, toml, tame_index, clap-cargo. by @obi1kenobi in #1375 - Weekly
cargo updateof dependencies by @obi1kenobi in #1378 - Weekly
cargo updateof dependencies by @obi1kenobi in #1380 - Support rustdoc v55 which is currently in beta and nightly. by @obi1kenobi in #1383
- Bump actions/download-artifact from 4 to 5 by @dependabot[bot] in #1382
- Add next Rust minor to test matrix by @obi1kenobi in #1381
- Don't upload prebuilt rustdocs for Rust <1.87 by @obi1kenobi in #1384
- Weekly
cargo updateof dependencies by @obi1kenobi in #1385 - Release v0.43 with performance optimizations for large crates. by @obi1kenobi in #1386
New Contributors
- @CLIDragon made their first contribution in #1371
Full Changelog: v0.42.0...v0.43.0
v0.42.0
In this release
- 13 new lints, for a total of 177
- Spotlight:
#[target_feature]lints - Bugfix: false-positive sealed trait lints
This release requires Rust 1.85+ both to install (MSRV) and at runtime. Future releases will require Rust 1.87+.
Spotlight: #[target_feature] lints
Check out this in-depth look at the SemVer and soundness surprises behind this attribute:
Unsoundness and accidental features in the #[target_feature] attribute
New lints
We added new 13 lints across several categories, including 12 lints around #[target_feature] and one lint about an additive-only change. Some of the new lints are error-by-default, while others are warnings meant to flag changes deserving closer review, or even opt-in only and disabled by default while we do more work to improve their user experience.
API breakage:
safe_function_requires_more_target_featuressafe_function_target_feature_addedsafe_inherent_method_requires_more_target_featuressafe_inherent_method_target_feature_addedtrait_method_target_feature_removedunsafe_function_requires_more_target_featuresunsafe_function_target_feature_addedunsafe_inherent_method_requires_more_target_featuresunsafe_inherent_method_target_feature_addedunsafe_trait_method_requires_more_target_featuresunsafe_trait_method_target_feature_addedpub_api_sealed_trait_method_target_feature_removed(warn-by-default)
Additive-only API changes (opt-in only; more work required):
exhaustive_enum_added
All merged PRs
- Update FAQ section on MSRV policy. by @obi1kenobi in #1258
- Weekly
cargo updateof dependencies by @obi1kenobi in #1259 - feat: check for minimum possible semver bump by @Frank-III in #1237
- Weekly
cargo updateof dependencies by @obi1kenobi in #1261 - Drop support for Rust 1.84. New MSRV is 1.85. by @obi1kenobi in #1257
- Weekly
cargo updateof dependencies by @obi1kenobi in #1264 - Add next Rust minor to test matrix by @obi1kenobi in #1266
- Weekly
cargo updateof dependencies by @obi1kenobi in #1270 - Weekly
cargo updateof dependencies by @obi1kenobi in #1273 - Weekly
cargo updateof dependencies by @obi1kenobi in #1277 - Fix error message when registry version is not found. by @obi1kenobi in #1280
- [Witness Generation] Add unstable witness program flag by @GlitchlessCode in #1276
- Add support for rustdoc JSON format v46. by @obi1kenobi in #1282
- Weekly
cargo updateof dependencies by @obi1kenobi in #1284 - Upgrade tame-index and gix by @kornelski in #1287
- Don't change current_dir when running cargo by @kornelski in #1290
- Collect crates before running reports by @kornelski in #1289
- Weekly
cargo updateof dependencies by @obi1kenobi in #1294 - Update to
trustfall_rustdocversion w/#[target_feature]data. by @obi1kenobi in #1295 - Enable environment variable overrides for git repo discovery by @PigeonF in #1269
- Touch up the README. by @obi1kenobi in #1296
- Fix doc comment formatting by @obi1kenobi in #1298
- Fix color choice for stderr by @obi1kenobi in #1299
- Fix typo in CONTRIBUTING by @obi1kenobi in #1300
- Add
exhaustive_enum_addedlint. by @shreyans413 in #1189 - Add conflict checks for current_rustdoc by @obi1kenobi in #1301
- Add
unsafe_function_target_feature_addedlint by @obi1kenobi in #1302 - Add scripts and CI job for prebuilt test rustdocs by @obi1kenobi in #1305
- Add
unsafe_trait_method_target_feature_addedlint by @obi1kenobi in #1304 - Update CI matrix updater by @obi1kenobi in #1308
- Fix artifact retrieval by @obi1kenobi in #1310
- Add workflow to automate snapshot updates by @obi1kenobi in #1309
- Add lint for inherent methods gaining target features by @obi1kenobi in #1311
- Fix the
download_prebuilt_test_rustdocs.shscript download logic. by @obi1kenobi in #1312 - Remove stray
set -xin the downloader script. by @obi1kenobi in #1313 - Weekly
cargo updateof dependencies by @obi1kenobi in #1314 - Add
function_requires_more_target_featureslint by @obi1kenobi in #1316 - Add
trait_method_requires_more_target_featureslint by @obi1kenobi in #1315 - Fix Handlebars repeat helper context cleanup by @obi1kenobi in #1317
- Fix typo in test rustdocs downloader. by @obi1kenobi in #1318
- Fix cache settings None case by @obi1kenobi in #1319
- Save downloaded rustdoc JSONs artifact to disk. by @obi1kenobi in #1320
- Use artifacts for CI binaries by @obi1kenobi in #1321
- Rename lint and test crate with unsafe prefix by @obi1kenobi in #1323
- Rename trait_method_requires_more_target_features lint by @obi1kenobi in #1325
- Rename function target feature lint to unsafe variant by @obi1kenobi in #1324
- Add lint rename helper by @obi1kenobi in #1326
- Fixes for
unsafe_function_requires_more_target_featuresby @obi1kenobi in #1328 - Fix edge cases in
unsafe_inherent_method_requires_more_target_featuresby @obi1kenobi in #1327 - Fixes for "unsafe became safe" for remaining feature-related lints. by @obi1kenobi in #1329
- Add
safe_function_target_feature_addedlint by @obi1kenobi in #1303 - Add
safe_inherent_method_target_feature_addedlint by @obi1kenobi in #1306 - Add
unsafe_inherent_method_target_feature_addedlint by @obi1kenobi in #1307 - [Witness Generation] Add
InheritedValueinheritance by @GlitchlessCode in #1330 - Update
trustfall_rustdocto support rustdoc v48 and drop v46. by @obi1kenobi in #1331 - Add safe_inherent_method_requires_more_target_features lint by @obi1kenobi in #1333
- Add safe_function_requires_more_target_features lint by @obi1kenobi in #1332
- Reset mtimes and output user-facing messages in rustdoc downloader. by @obi1kenobi in #1335
- Parallelize rustdoc regeneration script by @obi1kenobi in #1322
- Add user-agent string to
curlofcrates.ioAPI. by @obi1kenobi in #1336 - Add trait_method_target_feature_removed lint by @obi1kenobi in #1337
- Parallelize metadata generation by @obi1kenobi in #1338
- Add
pub_api_sealed_trait_method_target_feature_removedlint. by @obi1kenobi in #1339 - Weekly
cargo updateof dependencies by @obi1kenobi in #1340 - Use
trustfall_rustdoc v0.27supporting the latest beta's rustdoc. by @obi1kenobi in #1343 - Fix lint to latest stable Rust's standard. by @obi1kenobi in #1347
- Fix mor...