@bd103@hachyderm.io cover

Hi! I'm a hobby developer who works on the Bevy game engine, written in Rust. I'm currently building the Bevy Linter and CLI. Feel free to reach out! (he / him)

This profile is from a federated server and may be incomplete. View on remote instance

@bd103@hachyderm.io avatar bd103 , to random

Hi friends! Quick update: v0.5.0 of the linter is out now, coming with support for Bevy 0.17. Check it out!

https://github.com/TheBevyFlock/bevy_cli/releases/tag/lint-v0.5.0

@bd103@hachyderm.io avatar bd103 , to random

Hashing is pretty useful! Here's a short cheat-sheet I made on how to do it in Rust: https://bd103.github.io/blog/2025-11-10-rust-hashing-cheat-sheet/

@blyxyas@tech.lgbt avatar blyxyas , to random

Currently working on a fairly awaited feature, running Clippy as an add-on with cargo build and cargo test!

This change will heavily impact how your Clippy workflow works, specially on CI. You'll no longer have to separate your linting from your testing, saving invaluable CI time!

(A more detailed blog post on the Rust [Inside?] blog will probably come soon after the feature is merged)

ALT
bd103 ,
@bd103@hachyderm.io avatar

@blyxyas That's awesome! Are you doing something like RUSTC_WORKSPACE_WRAPPER=clippy-driver cargo build, or are you doing something else? How are you letting users select whether they want to check, build, or test?

bd103 ,
@bd103@hachyderm.io avatar

@blyxyas Really cool! I might borrow that and add it to the Bevy linter if it proves useful :)

@bd103@hachyderm.io avatar bd103 , (edited ) to random

Hello everyone! I'm thrilled to announce the second release of the alpha Bevy CLI, a command-line tool hacked on by the Bevy CLI working group that streamlines work on projects using the Bevy game engine (https://bevy.org). This release includes key improvements such as:

  • Automatically configuring the correct getrandom backend when building a project for the web
  • Easily listing and installing specific versions of the Bevy Linter
  • Unstable support for enabling web multi-threading, useful when depending on crates like bevy_seedling
  • Faster compile times and improved template support by relying on cargo-generate in its executable form, rather than bundling it as a library
  • Many bug fixes, small quality-of-life changes, and documentation improvements

Check out the official release at https://github.com/TheBevyFlock/bevy_cli/releases/tag/cli-v0.1.0-alpha.2, and view the live documentation at https://thebevyflock.github.io/bevy_cli/.

This release is from 5 months of work, so please reach out if you get stuck or hit any issues. Have a good one!

@bd103@hachyderm.io avatar bd103 , to random

I wrote up a little blog post about my past year working on the linter! You should check it out!

https://bd103.github.io/blog/2025-09-09-bevys-5th-birthday

@bd103@hachyderm.io avatar bd103 , to random

I'm thrilled to announce the fourth release of the Bevy Linter! This release includes support for automatically applying suggestions with the --fix flag, restriction lints to enforce either Update or FixedUpdate for specific modules, improved Github Action ergonomics and performance, and more!

If you want to learn more about the linter, check out the docs at https://thebevyflock.github.io/bevy_cli/linter/index.html. If you're interested to see what changed in v0.4.0, also check out the changelog at https://thebevyflock.github.io/bevy_cli/linter/changelog.html and the migration guide at https://thebevyflock.github.io/bevy_cli/linter/migration.html.

Many thanks to everyone in the bevy_cli working group for helping this release! If you run into trouble using the linter, please drop by the working group's channel on Bevy's Discord or open an issue at https://github.com/TheBevyFlock/bevy_cli/issues :)

bd103 OP ,
@bd103@hachyderm.io avatar

@tauon Awesome, let me know what you think! Feedback and criticism is always appreciated :)

@erichdongubler@hachyderm.io avatar erichdongubler , to random

I am incredibly proud to announce that on Firefox has officially gotten onto the train for stable release in Firefox 141 on Windows! More details to come when it actually releases, but...I'm so stoked, I couldn't not post about it. 😀

More platforms to come soon, my team hopes.

Hopefully we'll see / @bevy 's WebGPU working in Firefox soon, eh?

bd103 ,
@bd103@hachyderm.io avatar

@erichdongubler Wow, that's actually fantastic! What issues have you run into while working on stabilization, and why just Windows? What things are blocking stabilization for Linux and Mac?

@rustaceans@mastodon.social avatar rustaceans , to random

If you know someone whose Rust-related content or work you admire, we’d love to hear about them and consider supporting their efforts.

Help us by sharing their information below.

https://github.com/Rust-Bytes/sponsorship_initiative

bd103 ,
@bd103@hachyderm.io avatar

@Rin3d @rustaceans I second this, Charlotte is great! :)

@bd103@hachyderm.io avatar bd103 , to random
bd103 OP ,
@bd103@hachyderm.io avatar

If you want to set this up yourself, I opened a PR with instructions on integrating bevy_lint with Rust Analyzer!

https://github.com/TheBevyFlock/bevy_cli/pull/503

@bd103@hachyderm.io avatar bd103 , to random

You know what? I think it's time for a status update! Things got really busy the past 2 months IRL, but I'm slowly kicking up to faster speeds.

First, I'm still actively working on the CLI and linter! My main focus has been upgrading the linter to the latest Rust compiler toolchain (https://github.com/TheBevyFlock/bevy_cli/pull/456) and making it easier to use the linter without Rustup (https://github.com/TheBevyFlock/bevy_cli/pull/478). I've also been planning on rewriting the CLI's configuration system to use the figment crate, doing some triage / release planning work, and actually sitting down and reviewing all the open pull requests.

Alongside that, I got nerd sniped writing a tool that can upgrade Rustdoc's unstable JSON output to newer format versions (https://github.com/BD103/migrate_rustdoc_json). I originally made it so I could run cargo-semver-checks on different versions of the clippy_utils crate to create small migration guides, but it turns out cargo-semver-checks doesn't work well as an automatic migration guide generator. (It can tell you how things break, but doesn't really tell you how to migrate. It's a shame, but I'm not using the crate for its intended purpose, so I can't complain too much.) Even if I may not end up using the tool, it was fun to learn about things like JSON paths, anstream / anstyle, and winnow in the process!

That's about all of the programming stuff I've been doing recently! You can check out my prioritization board over at https://github.com/users/BD103/projects/8 to see what's next in my plan.

In other news, I've also been playing a lot of Satisfactory and Deltarune, and have been listening to The Happy Fits and Laufey recently. Good games, good music, good vibes!

Well that's all for now! Until next time ✨

@bd103@hachyderm.io avatar bd103 , to random

Hi friends! The 6th Bevy Game Jam (https://itch.io/jam/bevy-jam-6) is starting in just a few days. If you're considering joining, check out the newly-published prototype Bevy CLI!

The CLI makes it easy to setup a new Bevy project, build it for both native and web platforms, and lint it for common mistakes. We've just released v0.1.0-alpha.1 (https://github.com/TheBevyFlock/bevy_cli/releases/tag/cli-v0.1.0-alpha.1), and would love to gather feedback from fellow game jammers!

bd103 OP ,
@bd103@hachyderm.io avatar

If you want to see the CLI in action, as check out the bevy_new_2d template! (https://github.com/TheBevyFlock/bevy_new_2d) The contributors over there have also been hard at work preparing the template for the jam :)

@bd103@hachyderm.io avatar bd103 , to random

Hello people, I'm pleased to announce the third release of the Bevy Linter! The new v0.3.0 update brings 2 new lints, Bevy 0.16 support, a Github Action for using the linter in CI, documentation improvements, and more!

If you run into any issues installing or using the latest version, please feel free to open an issue in our issue tracker (https://github.com/TheBevyFlock/bevy_cli/issues) or reply to this post.

Until next time! :D

@bd103@hachyderm.io avatar bd103 , to random

Migration Writing Pass 1

The people have spoken! Based off of my writing pass in https://github.com/bevyengine/bevy-website/pull/2053, here's some of most interesting or useful breaking changes in Bevy 0.16.

1/7

bd103 OP ,
@bd103@hachyderm.io avatar

First, bevy::a11y::Focus has been replaced with the new bevy::input_focus::InputFocus type! Bevy 0.16 has a whole new system for input focus, which is how applications figure out which UI on your screen you are trying to interact with. For an example in your browser, press the "Tab" key to cycle through interactable items on your screen. The buttons or text boxes that get "highlighted" have the input focus, in this case!

(Also, note that there's currently a typo in that migration guide. I already opened a PR to fix it, though!)

https://bevyengine.org/learn/migration-guides/0-15-to-0-16/#replace-bevy-a11y-focus-with-bevy-input-focus-focus

2/7

bd103 OP ,
@bd103@hachyderm.io avatar

Second, the EaseFunction::Exponential* functions in Bevy 0.15 have slight discontinuities, causing a "jumping" behavior at the beginning and end in some cases. While that jump is slight (0.001), it can still be noticeable in slow, highly scaled animations!

Bevy 0.16 fixes this, however, making the exponential easing functions fully continuous. You can see the difference in the attached graph, where the 0.15 function (orange) jumps while the 0.16 function (purple) is smooth.

Although this is not a breaking change in most cases, as the easing functions are mainly used in animations, if your application depends on them for determinism it might be noticeable!

https://bevyengine.org/learn/migration-guides/0-15-to-0-16/#fix-easefunction-exponential-to-be-continuous

3/7

ALT
  • Reply
  • Loading...
  • bd103 OP ,
    @bd103@hachyderm.io avatar

    Third, Handle::weak_from_u128() has been deprecated.

    For those uninitialized, a Bevy Handle is a reference to an asset (image, sound, shader, etc.). Handles are somewhat like Rust's Rc type, which has both a strong and weak variant. Strong handles can only be created when an asset is loaded, but also prevent the asset from being deallocated. Weak handles can be created anywhere in the process, however, but don't prevent the asset from being dropped.

    Weak handles are usually created from UUIDs. In Bevy 0.15 you used Handle::weak_from_u128() to do this, but this required converting the UUID into a u128, which was annoying and error-prone.

    In 0.16, the weak_handle! macro was created to address these concerns. Instead of directly passing it a u128, you pass it the UUID in string form. weak_handle! handles both parsing and validating the UUID at compile-time, meaning you don't need to worry about invalid UUIDs. Neat!

    https://bevyengine.org/learn/migration-guides/0-15-to-0-16/#deprecate-handle-weak-from-u128

    4/7

    bd103 OP ,
    @bd103@hachyderm.io avatar

    Next up, there have been a few breaking changes to AudioSinkPlayback and PlaybackSettings in order to support a new feature: audio muting!

    That's right, it's now significantly easier to mute an audio source without pausing it or directly modifying its volume. This is great if you want to support user-controlled muting of audio for anything from background music to proximity chat.

    Internally, this works by managing both an original and derived volume. The original volume is what you configure with AudioSink::set_volume(), while the derived volume is computed using both the audio's mute state and its original volume. This derived volume is then what actually gets applied.

    The breaking changes for this feature are minimal, however. The largest one is that you now need a mutable reference to AudioSink in order to call set_volume().

    https://bevyengine.org/learn/migration-guides/0-15-to-0-16/#add-ability-to-mute-audio-sinks

    5/7

    bd103 OP ,
    @bd103@hachyderm.io avatar

    And finally, Bevy's Volume type now supports decibels as well as linear volume.

    The decibel is a unit of measurement common in audio used to scale its volume logarithmically. 0 decibels is equivalent to the original audio volume, while negative infinity decibels is completely silent. This can be compared with Bevy's original linear volume scaling, where 0 is silent and 1 is original volume.

    With these changes, Volume has been converted into an enum and Volume::ZERO has been renamed to Volume::SILENT for clarity purposes.

    https://en.wikipedia.org/wiki/Decibel

    https://bevyengine.org/learn/migration-guides/0-15-to-0-16/#support-decibels-in-volume

    6/7

    bd103 OP ,
    @bd103@hachyderm.io avatar

    Well that's all for today! So far I've gotten through the Accessibility, Animation, Assets, and Audio sections of the migration guide, although I still have quite some way to go.

    Let me know if you enjoyed this kind of post, since I'm likely to do many more migration guide highlights the future. For now, I'll see you all around! :)

    7/7

    bd103 OP ,
    @bd103@hachyderm.io avatar

    Well I wish I could give more highlights, but I've decided to stop my migration writing pass short for time and motivation reasons. I did manage to get through the first 61 guides, however! The other 80 will be left to other contributors (maybe even you!) to fix up :)

    If you do want to learn more about Bevy 0.16's breaking changes, definitely check out the migration guide yourself. The most impactful changes are even noted at the very top of the page!

    That's all for now!

    https://bevyengine.org/learn/migration-guides/0-15-to-0-16/

    @bd103@hachyderm.io avatar bd103 , to random

    Hello! It's Lint Laundry Day, meaning I'll be spending the entirety of today working on the Bevy Linter! I'll be adding updates here showing what goes on behind-the-scenes of a project, which you can find at https://github.com/TheBevyFlock/bevy_cli.

    ALT
    bd103 OP ,
    @bd103@hachyderm.io avatar

    To begin, I'm going to continue my work improving the linter's documentation. Right now the lint group definitions are separated from the lints, meaning they're harder to discover! Let's move them a little closer together, and add examples on how to use them as well! (https://github.com/TheBevyFlock/bevy_cli/issues/320)

    bd103 OP ,
    @bd103@hachyderm.io avatar

    Fantastic, I just finished reorganizing our lint groups and am quite pleased with the result in https://github.com/TheBevyFlock/bevy_cli/pull/328. As lint groups are the easiest way to enable the lints you may want, I'm trying to make them much more visible in the documentation.

    It's now much easier to discover the full list of lint groups by looking at the crate::lints page. Each lint is organized in a submodule based on its lint group, such as crate::lints::suspicious, which makes it easier to learn which lints are in what groups.

    Overall, it's a great improvement to our documentation (https://thebevyflock.github.io/bevy_cli/) and internal code structure!

    A screenshot of https://thebevyflock.github.io/bevy_cli/bevy_lint/lints/suspicious/index.html based on the changes from https://github.com/TheBevyFlock/bevy_cli/pull/328. The biggest change being highlighted here is that the lints are not all listed out in crate::lints, but instead split up into smaller groups (such as crate::lints::suspicious).

    ALT
  • Reply
  • Loading...
  • bd103 OP ,
    @bd103@hachyderm.io avatar

    Next up, we have https://github.com/TheBevyFlock/bevy_cli/pull/329 that adds a page on coding conventions for the contributor's guide.

    As I've worked more and more with rustc's API, I have found common tasks that all lints must do and certain APIs that should be avoided. This page documents these things and provides a standardized solution.

    The end-goal behind this page is to help keep the code consistent. Consistent code makes the user-experience smoother and makes it easier for developers to read the code!

    bd103 OP ,
    @bd103@hachyderm.io avatar

    Speaking of contributor's guide, you should consider checking it out! It's a great resource if you want to help out, or simply want to learn more about how rustc works.

    https://github.com/TheBevyFlock/bevy_cli/tree/main/bevy_lint/docs

    bd103 OP ,
    @bd103@hachyderm.io avatar

    After that, I left a review on https://github.com/TheBevyFlock/bevy_cli/pull/323. It's a PR by the lovely DaAlbrecht that updates the linter to support Bevy 0.16! Though Bevy 0.16 has not officially released yet, it's just around the corner. I'm planning on publishing a new version of the linter (v0.3.0-rc.1 or v0.3.0) when that happens so that developers can use it in Bevy Jam #6!

    Updating the linter to support a new version of Bevy isn't terribly challenging, but it has its moments! For example, in order to check if your code uses a specific type, we hard-code the absolute path to that type in one giant file (https://github.com/TheBevyFlock/bevy_cli/blob/c05ac1982278220a4fb5bf031546fc75e7916386/bevy_lint/src/paths.rs). If a type gets moved across versions, even if it was within a private module, we still have to update that file for it to work! This is part of the reason why the linter doesn't support multiple versions of Bevy yet.

    Either way, DaAlbrecht's work is excellent; I just have a few minor changes before it can be merged. :apusheencomputer:

    bd103 OP ,
    @bd103@hachyderm.io avatar

    One thing I did notice was that our CI was calling the install-linux-deps action twice! This action installs alsa and udev when called on a Linux runner, which are both dependencies need by Bevy to compile. There's no point installing them twice, though! I opened a small PR to fix this as well:

    https://github.com/TheBevyFlock/bevy_cli/pull/330

    bd103 OP ,
    @bd103@hachyderm.io avatar

    And that concludes Lint Laundry Day! I ended up getting nerd-sniped by an inconsistent API change to Bevy's Query::many() method, so I spent the past few hours working on https://github.com/bevyengine/bevy/pull/18615.

    Either way, that was a solid day of productive work. I hope you enjoyed the behind-the-scenes tour! :)

    @bd103@hachyderm.io avatar bd103 , to random

    Hi friends! I'm happy to announce the second release of the linter, bevy_lint v0.2.0! I and the other participants in the Bevy CLI working group have been hard at work building this release, and I'm really pleased with the result!

    If you want to learn more and try out the linter yourself, I wrote a fun little blog post on it: https://bd103.github.io/blog/2025-03-19-bevy-lint-v0.2.0

    (Just be warned, you may find yourself in need of sunglasses!)

    @alice_i_cecile@mastodon.gamedev.place avatar alice_i_cecile , to random

    Hi! Every Monday (more or less), I go through the backlog of PRs for @bevy , the engine for that I help maintain. Around these parts, anyone's review counts, and when there's two approvals, the maintainers will take a look and make a final call. There's 19 PRs in the backlog today: let's go over them and I'll explain what I'm thinking! https://github.com/bevyengine/bevy/pulls?q=is%3Aopen+is%3Apr+label%3AS-Ready-For-Final-Review

    bd103 ,
    @bd103@hachyderm.io avatar

    @alice_i_cecile Hah, we're working on it! v0.2.0 of the linter is set to release in the second half of February, and with it comes the features necessary to integrate it into Bevy's CI.

    Of particular note, this includes:

    • Lint configuration in Cargo.toml
    • Lint against multiple versions of bevy in your dependencies
    • A fresh contributor's guide
    • Bevy 0.15 support
    • A bunch of new lints

    It's going to be an exciting release, especially since several other contributors had a hand in putting this all together!

    @bd103@hachyderm.io avatar bd103 , to random

    Hiya everyone! I hope you all have been having a fantastic winter break. Today I have nothing planned, which means my day is going to be filled with work on the game engine!

    I have a full list of things to work on, so let's get started! I'll reply to this thread throughout the day with fun updates and insights. Here we go! :SpinningCube:

    1/n

    ALT
    bd103 OP ,
    @bd103@hachyderm.io avatar

    My focus this morning was Bevy's benchmarks. Benchmarks are how we track performance of the engine over time, and make sure things stay fast and zippy! I've been doing some work refreshing them, and part of that work today was opening https://github.com/bevyengine/bevy/pull/16980!

    This pull request migrates all of our imports of criterion::black_box() to core::hint::black_box(), which is faster because it uses compiler intrinsics.

    For further reading on how black_box() works: https://doc.rust-lang.org/nightly/std/hint/fn.black_box.html#how-to-use-this

    @alice_i_cecile@mastodon.gamedev.place avatar alice_i_cecile , (edited ) to random

    Hey! I'm swamped with moving and the release, so no today, sorry <3 That said, we spent a bunch of time today talking about the last cycle and have the start of a collective retrospective. I think you'll find it interesting! Chime in if you were a contributor to @bevy in the past few months :) Read it here: https://github.com/bevyengine/bevy/discussions/16431

    bd103 ,
    @bd103@hachyderm.io avatar

    @occuros Take a look at https://github.com/bevyengine/bevy/discussions/16431, where the 0.15 release process is being discussed! In summary, the current pain points are:

    • Writing release notes / migration guides all at once, at the end of a release cycle
    • Automatically testing rendering features to catch bugs and regressions
    • The retained rendering world PR, which had several troubles after merging

    There's some more good stuff on there, so I highly recommend taking a look yourself!

    @bd103@hachyderm.io avatar bd103 , to random

    It is with great pride that I announce the first release of bevy_lint, a custom linter for projects built with ! Use this to check for Bevy-specific footguns and optimizations, as well as enforce project-wide restrictions and standards. This is a project I spent the past 2 months building over in the ⁠bevy_cli working group with the intention of it eventually being upstreamed. While it's still currently unofficial, it's fleshed-out enough for early adopters to use in their own projects.

    @bd103@hachyderm.io avatar bd103 , to random

    The first lint is done and ready for review! Check it out at https://github.com/TheBevyFlock/bevy_cli/pull/84.

    Oh... I guess I never formally introduced this project. Whoops!

    Hi, I'm BD103, and I'm an active participant in the recently-formed bevy_cli working group. The CLI has a few goals, such as template generation and better WASM support, but the goal I'm most excited for, and have been spearheading, is the Bevy-specific linter!

    @bd103@hachyderm.io avatar bd103 , to random

    Hello to the 42 people that follow me! I published a blog post on my journey with for its 4th birthday! If you have the time, please read it at https://bd103.github.io/blog/2024-08-18-4-years-of-bevy.

    I've had so much fun over the last 10 months, and I'm so grateful to the Bevy community, so I wanted to share my thanks with everyone!

    Until next time,

    • BD103
    @bd103@hachyderm.io avatar bd103 , to random

    Now that 0.14 is out the door, I've been picking back up my Bevy-Bencher integration. While experimenting, I generated this interesting graph using Criterion that shows just how much faster World::spawn_batch() is for multiple entities at a time.

    ALT
    @bevy@mastodon.social avatar bevy , to random

    0.14 is out now!

    It features Virtual Geometry, Screen Space Reflections, Depth of Field, Motion Blur, Volumetric Lighting, Filmic Color Grading, Anisotropy, Auto Exposure, ECS Observers and Hooks, Animation Graph, Rounded UI Corners, Computed States, and more!

    https://bevyengine.org/news/bevy-0-14/

    bd103 ,
    @bd103@hachyderm.io avatar

    @bevy This is one of the first Bevy releases that I significantly contributed to. The community is wonderful, and I'm so proud of what we have accomplished! :D

    @bd103@hachyderm.io avatar bd103 , to random

    The ETA for 0.14 is roughly 24 hours! I'm 63% done with all of the migration guides, so it's time to sit down, play some music, and grind. I hope to finish by the end of those 24 hours, but we'll just have to see!

    Wish me luck :)

    bd103 OP ,
    @bd103@hachyderm.io avatar

    @alice_i_cecile Thank you, that really means a lot :D

    @bd103@hachyderm.io avatar bd103 , to random

    is back again! This time with two new features:

    • Commit hashes in report

    Data points on the graph now show the corresponding commit hash. Easily bisect where regressions were introduced!

    • File size tracking

    The CI now tracks the size of binaries in release mode. For instance, a simple app with DefaultPlugins takes 40MB, while MinimalPlugins only takes 2MB! This should hopefully catch more regressions, since file size receives less of a spotlight than performance.

    ALT
    @bd103@hachyderm.io avatar bd103 , to random

    In 0.14 some traits such as AssetReader have been converted to use the recently stabilized async fn as compared to returning a BoxedFuture. This change unfortunately makes these traits no longer object safe. To fix this, erased versions of the traits were created (such as ErasedAssetReader) that do support being used with dyn.

    I opened https://internals.rust-lang.org/t/add-diagnostic-not-object-safe/20973, which is a proposal to add #[diagnostic::not_object_safe] to point users towards the erased forms. Check it out!

    @bd103@hachyderm.io avatar bd103 , to random

    Today's project was continuous benchmarking for the game engine! I created https://github.com/BD103/bevy-bencher, which will run Bevy's benchmarks daily and upload the results to https://bencher.dev/perf/bevy.

    It does use Github's provided runners, so the benchmarks will be fairly noisy, but it is certainly better than nothing! This will hopefully help us catch performance regressions before they are sneak into a release. Nice!

    bd103 OP ,
    @bd103@hachyderm.io avatar

    Update on this: has an absurd amount of benchmarks, so much so that it was difficult to actually analyze the benchmarks. In response to this, I opened https://github.com/BD103/bevy-bencher/pull/1 that creates custom benchmarks to measure just the imports bits! It's sparse for now, but hopefully should improve analysis in the future. :)