Bevy 0.20 game engine adds Solari on macOS, new BSN syntax and WESL shaders

The Bevy Contributors announced Bevy 0.20 on October 8, 2026. Bevy is a free, open source, data-driven game engine built in Rust. The release credits 227 contributors and 817 pull requests, and arrives a few months after 0.19. The headline items are Solari and DLSS, BSN syntax improvements, a Ready event, more UI widgets, WESL shaders, sprite materials with extended 2D materials, and a pan orbit camera.
Solari, Bevy's realtime pathtraced renderer, improved in most respects. Changes to the ReSTIR implementation make rendering mostly unbiased, so lighting is more accurate. Moving objects no longer have lagging shadows, and reflections shimmer much less in motion, especially on non-metallic materials. On performance, the authors say DLSS-RR has become very good, while ReSTIR costs a decent chunk of performance in many scenes without significantly improving image quality. So ReSTIR is now optional and off by default; anyone who used Solari in 0.19 should check whether losing it affects their scene and, if so, re-enable SolariLighting::restir. With ReSTIR off, expect reduced shadow quality and missing shadows in motion in scenes with many lights; the team is exploring cheaper ways to improve light sampling. Solari's scene management code is now retained and more optimized, which the post says significantly reduces CPU costs. SolariLighting also gains new fields (world cache size, per-pixel light sample count, temporal accumulation and path tracing bounce count) for tuning performance or quality.
On compatibility, Solari now supports lighting from Atmosphere and EnvironmentMapLights on cameras, in addition to DirectionalLight and emissive meshes. The team hopes to add PointLight, SpotLight and RectLight in the near future. Solari now runs on macOS, but bevy_solari has no built-in denoiser there; MetalFX Ray Reconstruction might be a possible solution in the future, and contributions are welcome. The dlss_wgpu crate was updated for the latest DLSS, adding DLSS-RR 4.5, which significantly improves denoising quality in Solari. Anyone using DLSS in 0.19 must download and set up the newest DLSS SDK or hit compiler errors. For technical detail the post points to JMS55's blog.
BSN, Bevy's new scene system, got syntax changes aimed at ergonomics and clarity; the post says the syntax should largely be nailed down after this. All scene references in bsn! now require @ prefixes (for example @scene_variable, @scene_function(), @SceneComponent, @{scene_expression}). That freed the team to drop the template_value wrappers around component values, so component_variable and component_function() can be written directly, and chained builder-style calls such as Transform::from_xyz(...).looking_at(...) and node.clone() also work without the wrapper. Enums no longer need VariantDefaults or FromTemplate if they implement Default and Clone. The trade-off is that enum variants in bsn! must now have every field specified, so Foo::A { x: 1 } becomes Foo::A { x: 1, y: 0 }. The authors argue this improves compatibility with arbitrary Rust enums.
Entity lists change too. BSN used to separate entities with commas and optional parentheses, which produced syntax noise and over-indentation, and many developers dropped the parentheses, making entities hard to tell apart. BSN now separates entities in a list with --, and both () and , are deprecated in this context. Using [] and () for bsn_list! and bsn! is now discouraged because it can lead to poor rustfmt autoformatting; bsn_list! {} is the only form rustfmt will not touch. The team plans to build a BSN auto-formatter.
The new Ready event fills a gap left when BSN landed in the last release: a way to run logic once a scene is fully spawned, with dependencies loaded, the full hierarchy present and initial components inserted. The existing Add event runs top down, so children are not yet available. Ready is its bottom-up counterpart, triggered for each entity in a spawned scene after the full spawn logic, descendants included, has run. The post says it is also needed to layer Bevy logic on other scene representations such as glTF.
Bevy Feathers, the opinionated editor-centric UI toolkit, gains Color Input (a compact selector that opens a color picker popup with a wheel, RGB and HSL selectors and a recently used grid), a scrollable and selectable List View, Dropdown Selection, and Lazy Menu, which spawns its popup on open and despawns it on close instead of hiding it. The Number Input widget now supports scrubbing and dragging, with configurable hard and soft limits, floating point precision and step sizes. bevy_ui_widgets also gets headless tab widgets, a TabList and Tab headers with externally managed selection through SelectedTab, keyboard shortcuts, and integration with focus, interaction and accessibility systems.
Bevy has also officially adopted WESL, described as a standardized extension of WGSL and an improvement over Bevy's old custom WGSL dialect; the team is working with the WESL team on the future of shader development in Bevy. The post says Bevy's shaders are now written in WESL. The release also lets users create custom shader materials for Sprites and extend 2D mesh materials as in 3D, and adds a pan orbit camera for CAD-like scene navigation.
Key facts
- Bevy 0.20, posted October 8, 2026, credits 227 contributors and 817 pull requests and arrives a few months after 0.19.
- Solari, the realtime pathtraced renderer, now runs on macOS via Metal, but bevy_solari has no built-in denoiser there; ReSTIR is now optional and off by default, and DLSS-RR 4.5 is supported through the updated dlss_wgpu crate.
- BSN scene syntax changes: @ prefixes on all scene references, no more template_value wrappers, enums that just work with Default and Clone, and -- as the entity separator in lists (() and, deprecated).
- A new Ready event fires for each entity in a spawned scene once its descendants are spawned, and Feathers adds Color Input, List View, Dropdown Selection and Lazy Menu widgets plus headless tabs.
- Bevy has officially adopted the WESL shader language, and the release adds custom Sprite materials, extended 2D mesh materials and a pan orbit camera.
Why it matters
Bevy is a free, open source Rust game engine, and this release moves several large pieces forward at once. Solari, its realtime pathtracer, gets better image quality, lower CPU cost and a first macOS path via Metal. BSN, the scene system that landed in 0.19, gets a syntax overhaul that the authors say should largely settle it. WESL adoption replaces the engine's old custom WGSL dialect, and the team says it is working with the WESL team on where shader development goes next.
Who it affects
Existing Bevy users must migrate: anyone writing bsn! scenes has to add @ prefixes and specify every field of enum variants, and () and , as entity separators in lists are deprecated in favour of --. Anyone who used Solari in 0.19 should check whether turning ReSTIR off by default changes their scene. Anyone using DLSS in 0.19 needs the newest DLSS SDK. Mac developers can now run Solari, without a built-in denoiser. Editor and tool builders get the new Feathers widgets and headless tabs.
How to use it
Bevy is free and open source, with the source on GitHub, a Quick Start Guide for newcomers and a 0.19 to 0.20 Migration Guide for existing apps and plugins. To keep 0.19-era Solari lighting, re-enable SolariLighting::restir. The new SolariLighting fields (world cache size, per-pixel light sample count, temporal accumulation, path tracing bounce count) can be tuned per scene and hardware. For BSN, the post recommends bsn_list! {} over [] and () to avoid rustfmt mangling the code. The headless_tabs example shows controlled and self-updating tab lists.
How solid is it
This is the official release post, bylined to the Bevy Contributors, so the feature list and migration notes come straight from the project. It gives no benchmark numbers for Solari performance or CPU cost reductions, only the statement of 'significantly reduced CPU costs'. The visible text is truncated partway through the WESL Shaders section, so details of WESL, sprite materials, the pan orbit camera and anything after are not covered here.
Risks and caveats
With ReSTIR off, the post warns of reduced shadow quality and missing shadows in motion in scenes with many lights. Solari on macOS has no built-in denoiser, and MetalFX Ray Reconstruction is only a possible future solution. Support for PointLight, SpotLight and RectLight is hoped for in the near future, not promised, and no timescale is given for the planned BSN auto-formatter. The BSN syntax 'should largely' be settled, which is not a guarantee, and the changes are breaking for existing scenes.
“Bevy is a refreshingly simple data-driven game engine built in Rust.”
— Bevy Contributors, Bevy 0.20 release post