Bevy 0.20 Adopts WESL Shaders, Adds Mesh Shaders and Brings Its Solari Path Tracer to macOS Without a Denoiser
The Rust game engine's 0.20 release replaces its custom WGSL dialect with WESL, adds mesh shaders (not on web), and turns ReSTIR off by default in Solari, per the project's release notes.
Overview
The Bevy project released Bevy 0.20, its open-source game engine written in Rust, on October 8, 2026. The GitHub release page lists tag v0.20.0, published at 21:41 on October 8, and its body links only to a diff against v0.19.1. The feature descriptions below come from the project’s own release announcement, whose source text is published in the bevy-website repository. Every capability and performance figure here is the Bevy project’s own claim, and this article did not independently benchmark or test the release.
According to the announcement, the release has contributions from 227 contributors and 817 pull requests, and the project describes Bevy as “a refreshingly simple data-driven game engine built in Rust” (Bevy release notes).
What Changed
Shaders move to WESL
The largest migration item for graphics code is the shader language. The Bevy release notes state: “Bevy’s shaders are now written in WESL and the old “Custom Bevy Extended WGSL” language support has been removed.” The notes describe WESL as “a language standard that extends WGSL to add important usability features like modules, imports, conditional compilation, and more.” Custom shaders written in the old dialect “need to be translated to WESL and renamed from .wgsl to .wesl,” while “Plain WGSL files with no preprocessor directives will keep working” (Bevy release notes).
The project gives its reasoning as a belief “it is better for the wider shader ecosystem (and for us) to adopt a common standard where we can pool resources on language improvements, module ecosystems, and IDE tooling” (Bevy release notes).
Mesh shaders
The release notes say mesh shaders “are now integrated with Bevy’s pipeline cache and are available for advanced users to take advantage of,” and list meshlets generated with tools such as meshoptimizer and procedural grass with dynamic level-of-detail as uses. The notes also state: “Mesh shaders are not supported on web platforms” (Bevy release notes).
Solari reaches macOS, with ReSTIR off by default
Solari is described in the notes as “Bevy’s realtime pathtraced renderer.” In 0.20 it “now also runs on macOS,” but the notes caution that “there is currently no built-in denoiser included in bevy_solari for macOS,” and name MetalFX Ray Reconstruction as “a possible solution in the future.” The project also reports support for lighting from Atmosphere and EnvironmentMapLight on cameras, and says its dlss_wgpu crate was updated to support DLSS-RR 4.5 (Bevy release notes).
One default changes behavior. The project says it decided to make ReSTIR optional and turn it “off by default,” because for many scenes it “costs a decent chunk of performance, and does not significantly improve image quality.” Developers upgrading from 0.19 are told to check whether losing ReSTIR affects their scene and, if so, re-enable SolariLighting::restir. With it off, the notes say to “expect reduced shadow quality and missing shadows in motion in scenes with many lights” (Bevy release notes).
Scene syntax, UI and ECS
- BSN syntax. The notes say the project made syntax changes to BSN, its scene system, “in the interest of improving its ergonomics and clarity.” One breaking change: “All scene references now require
@prefixes” (Bevy release notes). - UI units. Bevy UI now supports
emandremsizing, and “The default font-size is nowrem(1)rather thanpx(20).” The notes call this “a no-op if you’re not changingRemSize” (Bevy release notes). - Panics. Panics in systems, commands and observers “now get turned into errors and passed to the fallback error handler. By default this re-panics” (Bevy release notes).
- Bulk despawning. A new
despawn_allcommand is reported at 1.53x for 100,000 entities (3.17 ms versus 2.07 ms), measured as the median of five runs on an AMD Ryzen 9 9950X3D (Bevy release notes). - Change ticks. An opt-in
#[component(summary_tick)]attribute stores a column change tick; the project says it saw “a 132x speedup in our GPU mesh extraction code,” at the cost of making mutations “more expensive” (Bevy release notes). - Texture compression. The
CompressedImageSaverasset processor gains a backend based on thecttlibrary that compresses into BCn formats for desktop GPUs or ASTC formats for mobile GPUs, with automatic mipmap generation. The previous Basis Universal behavior moves to acompressed_image_saver_universalfeature, which the notes call the best choice for cross-platform distribution, including WebGPU (Bevy release notes).
What We Don’t Know
- The GitHub release body does not itself list features, so the feature set rests on the project’s announcement alone.
- The performance figures (1.53x, 132x) are the project’s own measurements on its own hardware and workloads; no independent benchmarks were reviewed.
- The announcement does not say how many existing projects or plugins are affected by the WESL migration or the
@scene-reference change. - The notes say Solari support for
PointLight,SpotLightandRectLightis hoped for “in the near future” and give no date.