Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Changelog

All notable user-facing changes to the Bevy Linter will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

All Changes: lint-v0.4.0...main

v0.4.0 - 2025-08-06

All Changes: lint-v0.3.0...lint-v0.4.0

Added

  • You can now run bevy_lint --fix to auto-fix lints (#505)
  • bevy_lint now has a custom --help screen to display options specific to the linter (#505)
  • Added lints update_schedule and fixed_update_schedule to restriction (#463)
    • These can help restrict modules to only use the Update or FixedUpdate schedules. Useful for separating game and rendering logic!
  • Added lint camera_modification_in_fixed_update to nursery (#417)
    • This catches cases where a camera is modified during FixedUpdate, which can cause laggy visuals.
  • The Bevy CLI (Alpha) can now automatically install the linter for you (#406)
  • It is now possible to use the linter without Rustup by specifying the BEVY_LINT_SYSROOT environmental variable (#478)
    • This should make it easier to use the linter with NixOS.
  • Added opt-in support for caching bevy_lint in Github Actions (#530)
  • Added docs on how to use bevy_lint with Rust-Analyzer (#503)
  • Added docs for troubleshooting issues with cranelift and sccache (#453, #522)

Changed

  • The lint insert_unit_bundle has been renamed to unit_in_bundle because it now supports many more cases, not just Commands::spawn() (#502)
  • Improved unconventional_naming's diagnostics when encountering a Plugin (#495)
  • The linter documentation has been moved to use mdbook instead of rustdoc (#420, #436)
    • You can find the new docs here.
    • The list of all lints is still generated using rustdoc, which you can find here.
  • Bumped nightly toolchain to nightly-2025-06-26 (#507)
    • This adds support for the latest Rust features, such as let-chains!
  • You can now copy-and-paste most commands in the docs, without having to lookup the compatibility table (#475)
  • You can now install specific commits of the linter with the Github Action (#501)
    • This will only work for commits newer than f38247d.

Fixed

  • The linter will no longer emit the Plugin / SystemSet span twice in unconventional_naming (#495)
  • Some lints now support auto-dereference receiver methods (#504)
    • For example, panicking_methods now catches Box<World>::resource() where before it would silently pass.

v0.3.0 - 2025-04-30

All Changes: lint-v0.2.0...lint-v0.3.0

Added

  • Lint iter_current_update_events to suspicious (#314)
  • Lint unconventional_naming to style (#345)
    • plugin_not_ending_in_plugin has been merged into this new lint.
  • A Github Action to automatically install the linter (#380)

Changed

  • The linter now supports Bevy 0.16, but no longer supports Bevy 0.15 (#323)
  • Bumped nightly toolchain to nightly-2025-04-03 (#373)
    • The linter now supports Rust 1.88.0.
  • Moved lints into submodules for their corresponding lint groups (#321)
    • This makes it easier to see what lint group a lint is under in the documentation. For example, in v0.2.0 if you wanted to view the insert_unit_bundle lint you would go to bevy_lint::lints::insert_unit_bundle, but in v0.3.0 you would go to bevy_lint::lints::suspicious::insert_unit_bundle. This signals that insert_unit_bundle is a suspicious lint.
  • Moved lint group docs from bevy_lint::groups to their associated bevy_lint::lints submodules (#328)
  • Code generated from external macros are no longer linted (#263)
    • External macros are macros that are defined in a separate crate from the one being linted. The output of these macros is skipped for all lints, as it was previously impossible to fix the warnings without an #[allow(...)] attribute.
  • missing_reflect now emits machine-applicable suggestions if all fields in a type implement PartialReflect (#389)

Removed

  • Lint plugin_not_ending_in_plugin (#345)
    • This lint has been merged into the new unconventional_naming lint.

Fixed

  • main_return_without_appexit no longer fires if the AppExit is used (#346)
    • The goal of the lint is to encourage the AppExit to be handled, although returning it from main() is just one solution. This fix prevents the lint from yelling at you if you choose to handle it a different way, or simply choose to discard it with let _ = app.run();.
  • Fixed the Rust version in the compatibility table for v0.2.0 (#363)

v0.2.0 - 2025-03-19

All Changes: lint-v0.1.0...lint-v0.2.0

Added

  • Lint borrowed_reborrowable to pedantic (#164)
  • Lint insert_unit_bundle to suspicious (#210)
  • Lint configuration in Cargo.toml (#251)
  • Support for bevy_lint --version (#257)
  • Support for qualified method syntax in several lints (#253)
  • Lint duplicate_bevy_dependencies (#280)

Changed

  • The linter now supports Bevy 0.15, but no longer supports Bevy 0.14 (#191)
    • Eventually the linter will support multiple versions of Bevy at the same time. Please see #138 for more information.
  • Bumped nightly toolchain to nightly-2025-02-20 (#278)
  • Lowered zst_query lint from restriction to nursery (#261)
    • zst_query does not respect QueryData::Item, meaning it is broken for queries like Has<T> and AnyOf<T>. Please see #279 for more information.
  • Merged panicking_query_methods and panicking_world_methods into a single lint: panicking_methods (#271)

Fixed

  • rustc_driver.dll not found on Windows (#281)
    • bevy_lint should now work on Windows, as it was previously broken by this bug.

v0.1.0 - 2024-11-17

All Changes: lint-v0.1.0

Added

  • Lint main_return_without_appexit to pedantic (#84)
  • Lint insert_event_resource to suspicious (#86)
  • Lint groups correctness, suspicious, complexity, performance, style, pedantic, restriction, and nursery (#98)
  • Lints panicking_query_methods and panicking_world_methods to restriction (#95)
  • Lint plugin_not_ending_in_plugin to style (#111)
  • Lint missing_reflect to restriction (#139)
  • Lint zst_query to restriction (#168)