
Bevy 0.20 shipped October 8 with 227 contributors and 817 pull requests — the project’s biggest release by contributor count. The headline is Solari, Bevy’s real-time path tracer, which is now faster, more accurate, and finally works on macOS via Metal. Alongside it, Bevy officially retires its custom shader dialect and adopts WESL, a standardized WGSL extension. If you have custom shaders in any Bevy project, you have action items.
Solari: Path Tracing That Actually Runs on macOS
Solari has been Bevy’s most ambitious rendering feature and its most platform-restricted one. Until 0.20, real-time path tracing was effectively limited to NVIDIA hardware — Metal support was absent and the renderer required GPU features not universally available. That constraint is gone. Solari now targets macOS via Metal, opening path tracing to the large portion of indie developers working on Apple silicon.
The renderer itself was rewritten, not just ported. The new lighting algorithm unifies direct and indirect illumination into a single path with two dispatches and up to three bounces, simplifying the pipeline and improving denoising. DLSS-RR 4.5 integration improves temporal reconstruction quality significantly on NVIDIA hardware. Scene management code is retained between frames, cutting CPU overhead in scenes with static geometry. Adjustable parameters include world cache size, per-pixel light sample count, temporal accumulation, and bounce count.
Path tracing at indie scale is still a luxury, not a requirement. But for developers building visually-driven games who previously had to either target Windows or fall back to rasterization, 0.20 removes a real blocker. The author’s deep dive on Solari covers the renderer architecture before you enable it in production.
WESL: The Shader Change That Outlasts the Renderer
Bevy’s custom shader preprocessing layer, built on the naga_oil library, is gone. Bevy 0.20 adopts WESL — a community-standardized extension of WGSL that brings modules, imports, and conditional compilation without the bespoke syntax that made Bevy shaders non-portable.
The practical impact depends on what your shaders look like. If you write plain WGSL without preprocessor directives, nothing changes — .wgsl files pass through to wgpu unchanged. If you use #import, #ifdef, or Bevy’s old #{MATERIAL_BIND_GROUP} syntax, you need to migrate: rename files from .wgsl to .wesl and update the preprocessor syntax to WESL’s spec-compliant form.
The official migration guide covers every syntax change. The longer-term payoff is that WESL is not Bevy-specific — it is a specification maintained at wesl-lang.dev, which means shader libraries written in WESL can be shared across any WebGPU-based Rust engine. That portability is new, and it matters.
Scene Syntax and UI: What Changes Before You Upgrade
BSN, Bevy’s scene notation, went through a syntax cleanup in 0.20. Scene references now require explicit @ prefixes, the entity separator changed from commas to --, and several boilerplate wrappers were removed. The new syntax reads more cleanly; the migration is largely mechanical. A new ReadyEvent lets scenes fire callbacks when all entities are fully initialized — useful for any system that queries the scene post-spawn.
The UI layer gained practical additions: Feathers now ships a color input selector, scrollable list view, dropdown selection, and a lazy menu widget that spawns and despawns on open and close rather than toggling visibility. A pan-orbit camera — CAD-style navigation controls — ships for developers building editor tooling or scene inspection utilities.
Where Bevy Stands in 2026
Bevy has 44,000 GitHub stars and is used by roughly 60 percent of Rust game developers as their primary engine. Commercial titles have shipped — Tiny Glade is the most visible, with a growing catalog on Steam and itch.io.
The honest limitations are unchanged. No official visual editor. API surface breaks each minor version, and every upgrade requires reading the migration guide. 3D tooling lags behind 2D in maturity. These are knowable, documented costs — manageable for indie and jam-scale work, not acceptable for large productions expecting multi-year API stability.
What 0.20 demonstrates is that the rendering gap with established engines is closing faster than the version number suggests. Path tracing on macOS and a standardized shader language are not incremental improvements. The full 0.20 release notes detail every change; the migration guide is the first stop for any project on 0.19 or earlier.













