Bevy Engine Changes — June 2026

Monthly tracking page for Bevy engine main-branch changes. Sister page to bevy-migration-2026-06.

2026-06-02 engine changes worth tracking

Scenes — ScenePatchInstance queue bug fix

  • #24474 MERGED (cart, Jun 2, 0.19, A-Scenes, C-Bug). Fixes #24320 — queued scenes incorrectly used ScenePatchInstance instead of QueuedScenes directly, causing scene spawning failures.^[https://github.com/bevyengine/bevy/pull/24474]
  • Solution: Use QueuedScenes resource directly instead of ScenePatchInstance for queued scene handling. Reviewed by laundmo.

Rendering — Double-sided normals for negative scale meshes

  • #24395 MERGED (issam3105, Jun 2, merged by mockersf, A-Rendering, C-Bug, D-Shaders). Fixes incorrect PBR lighting for double-sided meshes with negative-scale transforms.^[https://github.com/bevyengine/bevy/pull/24395]
  • Root cause: #8859 fixed culling for single-sided glTF materials by detecting inverted scale in the loader, but double-sided materials still had reversed front_facing from negative-scale winding because culling was disabled.
  • Solution: Added winding-corrected front-facing helper in the PBR shader path.
  • Testing: Khronos NegativeScaleTest validates fix; NormalTangentMirrorTest and NormalTangentTest verify non-regression.

ECS — Pass panics to fallback error handler

  • #24240 MERGED (SpecificProtagonist, Jun 2, merged by alice-i-cecile). Significant change: 457 additions / 103 deletions, 26 commits.^[https://github.com/bevyengine/bevy/pull/24240]
  • Objective: Panics (from engine or user code) no longer crash the entire app. Instead, they are handed to FallbackErrorHandler, making error handling user-configurable.
  • Philosophy: Inspired by Godot’s “games should not crash” policy. Unity and Unreal similarly catch exceptions from user code and continue.
  • Not enabled by default — user must opt in. Does NOT work on no_std.
  • Fixes: #19109, #7434.
  • Future work: Use per-system error handlers (e.g. queue_handled) instead of fallback; recover remaining commands in buffer after panic.

CI/Dependencies

0.19 milestone status

  • 494/500 (98.8%), 6 open. Up from 492/499 (98%, 7 open) on Jun 1.
  • ScenePatchInstance fix (#24474) is the only 0.19-tagged PR from this batch.
  • rc.2 (May 22) still latest pre-release. With only 6 open items, 0.19 final is imminent.

2026-06-03 engine changes worth tracking

Rendering — Vertex buffer compression (MAJOR)

  • #21926 MERGED (beicause, Jun 3, merged by alice-i-cecile, A-Rendering). Resolves #21902. 2251 additions / 433 deletions, 73 commits, 52 files changed. 7 months in review (opened Nov 2025).^[https://github.com/bevyengine/bevy/pull/21926]
  • Objective: Reduce GPU vertex buffer size transparently.
  • Solution: attribute_compression field on Mesh, mesh_attribute_compression on GltfLoaderSettings. CPU-side mesh still uses Float32; data is automatically compressed at GPU upload time.
  • Compression formats: Normal/tangent → octahedral encoded Unorm16x2. UV0/UV1/joint weight/color → Unorm16 or Float16. Unorm8x4 for vertex color when HDR not needed.
  • API: Mesh::compressed_mesh() pre-builds compressed mesh. GltfLoader can opt-in to compression. Also adds u16 index conversion.
  • Testing: many_cubes, many_foxes, many_morph_targets with --vertex-compression for 3D; bevymark with sprite_mesh for 2D.

Rendering — Meshlet material pipeline optimization

  • #23794 MERGED (CrazyRoka, Jun 3, merged by alice-i-cecile, A-Rendering, +155/-149).^[https://github.com/bevyengine/bevy/pull/23794]
  • Root cause: prepare_material_meshlet_meshes_main_opaque_pass and prepass performed expensive pipeline computations for every meshlet instance before checking if the resulting pipeline_id was already cached.
  • Fix: Check cache first. Heavy computation only runs on cache miss.
  • Impact: CPU usage drops from 52% → 6.7% in many_meshlet_materials stress test with --unique-materials.

Rendering — glTF clearcoat texture propagation

  • #24514 MERGED (issam3105, Jun 3, merged by cart, 0.19 milestone, A-Rendering, D-Straightforward, +4/-0).^[https://github.com/bevyengine/bevy/pull/24514]
  • Bug: glTF ClearCoat materials where texture was ignored when converting to StandardMaterial. “Partial coating” column rendered as fully coated.
  • Fix: Propagate glTF clearcoat texture to StandardMaterial.
  • Tested: Khronos ClearCoatTest.

Rendering — Transmission roughness IOR scaling

  • #24453 MERGED (A-Rendering). Corrects PBR transmission roughness scaling by Index of Refraction.

Rendering — TemporaryRenderEntity generalized

  • #24419 MERGED (A-Rendering). Generalises TemporaryRenderEntity over AppLabel for more flexible render pipeline infrastructure.

Rendering — SMAA LUT placeholder fix

  • #24398 MERGED (A-Rendering). Fixes placeholder SMAA lookup tables.

Rendering — Saturation color space preservation

  • #24413 MERGED (A-Rendering). Preserves color space on Saturation changes (consistency with Hue and Luminance traits).

ECS — DetectChanges this_run and last_run

  • #24496 MERGED (akriegman, Jun 2, merged by alice-i-cecile, A-ECS, D-Trivial, +26/-0).^[https://github.com/bevyengine/bevy/pull/24496]
  • New API: this_run() and last_run() methods on DetectChanges trait.
  • Use case: Precise per-system change detection. Example: fn is_awake<T>(thing: Ref<T>) -> bool { thing.is_changed() || thing.last_changed() == thing.last_run() }.
  • Note: If Bevy switches to u64 ticks in the future, this_run() may become unnecessary.

ECS — resource_exists_and system condition

  • #23260 MERGED (Satellile, Jun 2, merged by alice-i-cecile, A-ECS, C-Feature, D-Straightforward, +54/-0).^[https://github.com/bevyengine/bevy/pull/23260]
  • New API: resource_exists_and — a system condition closure that checks resource existence with a predicate.

ECS — DeferredWorld::trigger caller tracking

  • #24485 MERGED (SpecificProtagonist, A-ECS, D-Trivial). Tracks caller information for DeferredWorld::trigger.

ECS — CommandQueue warning-on-drop silencing

  • #24347 MERGED (A-ECS). Silences false-positive warning when CommandQueue drops with un-applied delayed commands.

App — define_label! interner_name removal (BREAKING)

  • #24445 MERGED (kpreid, Jun 3, merged by alice-i-cecile, A-App, D-Macros, +34/-20). Breaking change.^[https://github.com/bevyengine/bevy/pull/24445]
  • Change: interner_name argument removed from define_label!() macro. Static interner moved inside intern() method.
  • Companion: #24444 adds documentation for define_label!.
  • Also adds: Trailing comma support.

Windowing — Wayland fullscreen fallback

  • #22792 MERGED (francisdb, Jun 2, merged by alice-i-cecile, A-Windowing, C-Bug, O-Linux, +48/-32, X-Contentious).^[https://github.com/bevyengine/bevy/pull/22792]
  • Bug: Exclusive fullscreen apps would not start on Wayland because no monitor was available (Fixes #18556).
  • Fix: Log warning and fall back to borderless fullscreen.

Gameplay — TilemapChunkTileData Y-down helper

  • #24391 MERGED (A-Gameplay). Helper function to create TilemapChunkTileData from Y-down tile data.

Code quality

  • #24475 — Fix all clippy lints.
  • #24484 — Clippy: Allow bevy_ptr::deconstruct_moving_ptr to use core::mem::forget.
  • #24206 — Box large variants in some Errors to reduce size and avoid clippy::result_large_err.
  • #24171 — Reduce size of Typed::type_info().
  • #24441 — Add missing #[derive(Reflect)] to UI crates.

Bug fixes

  • #24454 — Fix rgb_to_hsv returning a negative hue.
  • #24457 — Account for MouseScrollUnit in projection_zoom example.

Docs

  • #24446 — Fix documentation typos.
  • #24444 — Document define_label! sufficiently that it can be used.

0.19 milestone status

  • 496/506 (98.0%), 10 open. Scope grew from 503 to 506 (3 new items Jun 4).
  • New 0.19 items: bevy_dev_tools RC missing (#24525), bsn inline macros (#24524), 0.19 Release Notes: Next Generation Scenes (#24523).
  • rc.2 (May 22) still latest pre-release. Milestone scope continues growing; all open items are docs/bugfixes.

2026-06-04 engine changes

Rendering — Shader import regression fix (from vertex buffer compression)

  • #24520 MERGED (beicause, Jun 4, merged by alice-i-cecile, A-Rendering, C-Bug, P-Regression, D-Straightforward, +20/-2). Fixes regression from #21926 (vertex buffer compression merged Jun 3).^[https://github.com/bevyengine/bevy/pull/24520]
  • Bug: Vertex buffer compression (#21926) broke shader imports in deferred rendering, Solari pathtracer, and meshlet pipelines.
  • Fix: Corrects shader util octahedral import paths.
  • Testing: Tested deferred_rendering, atmosphere, and meshlet examples.
  • Severity: P-Regression — functionality that worked before vertex buffer compression no longer worked. Quick fix merged within hours.

New 0.19 milestone items

2026-06-05 engine changes

Scenes — BSN inline macros in field value position

  • #24524 MERGED (cart, Jun 4/5, merged by merge-queue, A-Scenes, C-Usability, D-Straightforward, 0.19 milestone). Support inline macros in bsn! field-value position.^[https://github.com/bevyengine/bevy/pull/24524]
  • Before: Macros in field-value position required extra {} wrapping: bsn! { Foo { value: {vec![ 100, 200 ]} } }
  • After: Macros can be used directly: bsn! { Foo { value: vec![ 100, 200 ] } }
  • Impact: QoL improvement for BSN users. Reviewed by alice-i-cecile and viridia. X-Uncontroversial.

Text/UI — Font asset resolution and change detection (SIGNIFICANT)

  • #24362 MERGED (ickshonpe, Jun 5, merged by alice-i-cecile, A-Text, A-UI, C-Bug, M-Deliberate-Rendering-Change, M-Migration-Guide, 0.19 milestone, +237/-104, 43 commits, 13 files).^[https://github.com/bevyengine/bevy/pull/24362]
  • Bug fixes: (1) Font source resolution fails when asset not yet loaded, no retry on next frame. (2) Removed font assets not unloaded from Parley font database. (3) Inconsistent font lookup results with Handles.
  • Solution: Dual font registration (asset-specific alias + family name), set_changed on TextFont for chain detection, font database rebuild on unload, generic family remapping.
  • Migration: Has M-Migration-Guide label. Migration guide added at _release-content/migration-guides/font_from_bytes.md.
  • Fixes: #24356.

Docs — custom_phase_item whitespace

  • #24529 MERGED (Aceeri, Jun 4, C-Docs, C-Examples). Minor whitespace fix in custom_phase_item docs.

New 0.19 milestone open items

  • #24530 OPEN (Elabajaba, Jun 5, A-Rendering, C-Docs, M-Migration-Guide). Rename PbrNeutral tonemapper to KhronosPbrNeutral and improve docs.^[https://github.com/bevyengine/bevy/pull/24530]
  • #24526 OPEN (cart, Jun 4, A-Scenes, C-Usability). bsn: support field name shorthand.

0.19 milestone status

  • ~498/509 (~97.8%), 8 open. Scope grew from 506 → ~509 (new items: #24530 PbrNeutral rename, #24526 BSN field shorthand, possibly others).
  • rc.2 (May 22) still latest pre-release. Milestone scope continues growing with docs/BSN/refactoring items.

2026-06-08 engine changes

App — HierarchyPropagatePlugin remove-insert fix

  • #24550 MERGED (ickshonpe, Jun 8, merged by alice-i-cecile, 0.19 milestone, A-App, C-Bug, D-Straightforward, +30/-1). Fixes #24549.^[https://github.com/bevyengine/bevy/pull/24550]
  • Bug: When a component with Propagate<C> was removed and reinserted in the same frame, HierarchyPropagatePlugin’s update_source would still remove the propagated value because it didn’t check whether the propagation component was still present.
  • Fix: Added With<Propagate<C>> query in update_source to skip removal when the component is still present after reinsert.
  • Testing: New test hierarchy_propagate_remove_and_reinsert_in_same_frame.

ECS — SystemHandle run support

  • #24527 MERGED (hxYuki, Jun 8, merged by alice-i-cecile, 0.19 milestone, A-ECS, C-Usability, D-Straightforward, +40/-5, 3 files changed).^[https://github.com/bevyengine/bevy/pull/24527]
  • Objective: SystemHandle was introduced in #24165 (Tracked one-shot systems) but lacked run_system support. This PR fills the gap.
  • Solution: Implements From<SystemHandle<I, O>> and From<&SystemHandle<I, O>> for SystemId<I, O> using SystemHandle::entity() and SystemId::from_entity(). Also makes Commands::run_system* and commands::command::run_system* accept impl Into<SystemId>.
  • Usage: world.run_system(handle) or world.run_system(&handle).

UI — Feathers scrollbar and list view

  • #24544 MERGED (viridia, 0.19 milestone, A-UI, C-Feature, D-Modest, M-Release-Note).^[https://github.com/bevyengine/bevy/pull/24544]
  • New Feathers UI widgets: scrollbar and list view components for the Bevy 0.19 Feathers widget library.
  • Tagged M-Release-Note — will be highlighted in the 0.19 release blog.
  • Closes the long-open milestone item #24092.

0.19 milestone status

  • ~514/520 (~98.8%), ~3 open. Down from 511/517 (6 open) on Jun 7. 3 milestone items merged today (#24550, #24527, #24544). Remaining items likely docs-only.
  • rc.2 (May 22) still latest pre-release. 0.19 final release is imminent — only docs items likely remain.

2026-06-06 engine changes

Rendering — PbrNeutral → KhronosPbrNeutral rename (BREAKING)

  • #24530 MERGED (Elabajaba, Jun 6, merged by cart, 0.19 milestone, A-Rendering, C-Docs, M-Migration-Guide, +17/-14, 7 files changed).^[https://github.com/bevyengine/bevy/pull/24530]
  • Objective: PbrNeutral was poorly named — implies it’s a good default neutral tonemapper, but it’s specifically the Khronos PBR Neutral tonemapper and not recommended for general use.
  • Change: PbrNeutralKhronosPbrNeutral across all modules. Docs improved to describe visual characteristics and recommend against using it as a default.
  • Labels: M-Migration-Guide — migration guide included.
  • Previously tracked as OPEN in the 06-05 section. Now merged.

Scenes — bsn! autocomplete fix (loose parsing)

  • #24519 MERGED (cart, Jun 6, merged by merge-queue, 0.19 milestone, A-Scenes, C-Bug, +132/-84, 3 files changed).^[https://github.com/bevyengine/bevy/pull/24519]
  • Root cause: #24174 (EntityTemplate in scene functions) broke bsn! autocomplete in function arguments by using strict Rust parsing (parse()), which fails on incomplete/invalid syntax during typing.
  • Solution: Implement loose scope-aware TokenStream splitting on top-level , separators (handles nested (), [], {}, <> correctly). Strict parsing only applied after arguments are separated.
  • Impact: Fixes IDE autocomplete for bsn! macro arguments. Also faster — avoids redundant strict parsing that the compiler will do anyway.

Text/UI — update_editable_text_layout scheduling fix

  • #24538 MERGED (ickshonpe, Jun 6, merged by cart, 0.19 milestone, D-Trivial, A-Rendering/A-Text/A-UI, 1 file changed).^[https://github.com/bevyengine/bevy/pull/24538]
  • Fixes: #24537 — update_editable_text_layout was not properly ordered before AssetEventSystems, causing potential text layout issues with asset loading timing.
  • Solution: Explicit scheduling constraint.

Docs — resources_as_components migration guide update

  • #24513 MERGED (kfc35, Jun 6, merged by merge-queue into release-0.19.0 branch, C-Docs, A-ECS, +7/-2, 1 file changed).^[https://github.com/bevyengine/bevy/pull/24513]
  • Content: Adds immutable resources workarounds to the resources_as_components migration guide. Preserves community-contributed workarounds from #24424 comments.
  • Note: Merged directly into the release branch, not main.

0.19 milestone status

  • ~502/507 (~98.8%), 5 open. Down from ~498/509 (~97.8%, 8 open) on Jun 5. 3 milestone items merged today.
  • Remaining 5 open items (all docs/BSN-polish):
  • #24526 — bsn: support field name shorthand (cart, A-Scenes, C-Usability)
  • #24523 — 0.19 Release Notes: Next Generation Scenes (cart, A-Scenes, C-Docs)
  • #24506 — Revise partial_bindless release note (alice-i-cecile, C-Docs)
  • #24464 — bsn: improve docs and add tests (A-Scenes, C-Code-Quality, C-Docs)
  • #24299 — move bsn!/bsn_list! macro docs to bevy_scene crate re-export location
  • rc.2 (May 22) still latest pre-release. No blocking bugs remain — 0.19 final release is imminent.

2026-06-07 engine changes

Scenes — SceneList for SmallVec

  • #24542 MERGED (Shatur, Jun 7, merged by alice-i-cecile, 0.19 milestone, A-Scenes, C-Usability, D-Straightforward, 1 commit).^[https://github.com/bevyengine/bevy/pull/24542]
  • Objective: Allow SmallVec to be used as a SceneList, enabling stack-allocated scene lists.
  • Impact: QoL — scenes with few elements can avoid heap allocation. Reviewed by amtep, mardzie.

Scenes — Scene for Option

  • #24536 MERGED (0.19 milestone, A-Scenes, C-Usability, D-Straightforward).^[https://github.com/bevyengine/bevy/pull/24536]
  • Objective: Implement Scene trait for Option<P> where P: Scene.
  • Impact: Optional scene values now work natively in BSN declarations without workarounds.

Scenes — 0.19 Release Notes: Next Generation Scenes

  • #24523 MERGED (cart, Jun 7, merged by alice-i-cecile into release-0.19.0 branch, A-Scenes, C-Docs, D-Modest, 5 commits).^[https://github.com/bevyengine/bevy/pull/24523]
  • Content: Official 0.19 release notes for BSN/Scene changes. Covers BSN syntax, SceneComponent, scene layering, scene assets and caching.
  • Significance: This is the release blog content for the “Next Generation Scenes” section — confirms BSN is a headline feature of 0.19.
  • Reviewed by: ChristopherBiscardi, alice-i-cecile.

UI — MenuButton tab navigation fix

  • #24539 MERGED (viridia, Jun 6, 0.19 milestone).^[https://github.com/bevyengine/bevy/pull/24539]
  • Bug: MenuButton was intercepting tab key events, preventing users from tabbing through other UI elements.
  • Impact: UI accessibility fix — tab navigation now works correctly when MenuButton is present.

Text — IME text input wrapping fix

  • #24421 MERGED (A-Text, C-Examples, D-Trivial).^[https://github.com/bevyengine/bevy/pull/24421]
  • Bug: Fixes #23932 — IME (Input Method Editor) text input wrapping behavior was incorrect.
  • Impact: Text rendering fix for CJK input methods. Example-level fix.

New 0.19 milestone open items

0.19 milestone status

  • 511/517 (98.8%), 6 open. Up from ~502/507 (5 open) on Jun 6. 9 items closed, but scope grew by 10 (new docs items added). 6 remaining open:
  • #24541 — BSN :@ docs update
  • #24526 — bsn: support field name shorthand
  • #24506 — Revise partial_bindless release note
  • #24464 — bsn: improve docs and add tests
  • #24299 — move bsn!/bsn_list! macro docs to re-export location
  • #24092 — Feathers scrollbar and list view
  • rc.2 (May 22) still latest pre-release. All 6 remaining items are docs/BSN-polish + Feathers UI. No blocking bugs. 0.19 final is imminent.

2026-06-09 engine changes

Scenes — BSN docs and tests overhaul (MAJOR DOCS)

  • #24464 MERGED (laundmo, Jun 8, merged into 0.19 milestone, A-Scenes, C-Docs, C-Code-Quality, +888/-640, 4 files changed).^[https://github.com/bevyengine/bevy/pull/24464]
  • Objective: Improve documentation of bevy_scene/BSN.
  • Changes: Removes confusing “Inheritance” concept in favour of caching terminology. Fixes syntax references after :@ BSN migration (#24367). Cleans up duplication between macro docs and module docs. Unifies syntax snippet into a single table. Various smaller fixes.
  • Closes: #24299 (move bsn!/bsn_list! macro docs to re-export location), #24540, #24541 (BSN :@ docs update).
  • Depends on: #24402 (bsn: fix accidental scene entity deduplication).
  • Rendered docs preview: https://share.yadamiel.com/docs/doc/bevy/scene/index.html

Docs — Partial_bindless release note rewrite

  • #24506 MERGED (alice-i-cecile, Jun 8, 0.19 milestone, C-Docs, +22/-17, 1 file changed).^[https://github.com/bevyengine/bevy/pull/24506]
  • Objective: Original release note tone drifted into marketing register with LLM-standard constructions (“it’s not X; it’s Y”, em-dash asides).
  • Solution: Tightened phrasing, cut connective material, added proper conclusion.

CI — typos bump

  • #24558 MERGED (dependabot, Jun 8, D-Trivial, C-Dependencies). Bump crate-ci/typos 1.46.2 → 1.47.0. No user-facing impact.

0.19 milestone status

  • 519/523 (99.2%), 4 open. Up from ~514/520 (~98.8%, ~6 open) on Jun 8. 5 items closed, 3 new items added to scope.
  • 4 remaining open items:
  • #24557 — SceneComponent not implicitly added when using .spawn() directly on the scene function (C-Bug, A-Scenes, S-Needs-Investigation)
  • #24555 — Add shorthands for setting the severity to ResultSeverityExt (A-ECS, C-Usability, S-Ready-For-Final-Review)
  • #24531 — Enum variant doesn’t impl Scene when passed into bsn (C-Bug, A-Scenes, S-Ready-For-Implementation)
  • #24526 — bsn: support field name shorthand (S-Blocked, C-Usability, A-Scenes)
  • rc.2 (May 22) still latest pre-release. 0.19 final release is imminent.

2026-06-10 engine changes

Rendering — Beer’s law volume attenuation (SIGNIFICANT)

  • #24516 MERGED (issam3105, Jun 9, A-Rendering, C-Bug, D-Straightforward, X-Uncontroversial).^[https://github.com/bevyengine/bevy/pull/24516]
  • Bug: Bevy was converting glTF KHR_materials_volume attenuationColor with pow(1.0 - color, E) to reuse fog math atmospheric_fog(), which under-attenuates transmitted light. Dark volume materials rendered too bright.
  • Solution: Apply Beer’s law transmittance directly from Khronos Sample Renderer: transmittance = attenuationColor ^ (transmissionDistance / attenuationDistance). Also fixes thicknessTexture loading (G channel stores thickness, not color — now loaded as linear data).
  • Testing: Khronos AttenuationTest and DragonAttenuation assets validated.

Rendering — Anisotropic IBL bend factor fix

Rendering — AmbientLightFlags refactor

  • #24509 MERGED (coreh, Jun 9, A-Rendering, C-Code-Quality, D-Modest).^[https://github.com/bevyengine/bevy/pull/24509]
  • Objective: Make ambient light consistent with other light sources; pave the way for monochromatic ambient lights.
  • Changes: Adds AmbientLightFlags bitflags struct. Renames ambient_light_affects_lightmapped_meshes to ambient_light_flags in GpuLights / WGSL Lights struct. Adds AMBIENT_LIGHT_FLAGS_AFFECTS_LIGHTMAPPED_MESHES_BIT WGSL constant.
  • Plugs into: #24428 (Minimum Viable Monochromatic Lights) as follow-up.

Rendering — Pipeline constants for materials (NEW FEATURE)

  • #24502 MERGED (Visse, Jun 9, A-Rendering, C-Usability, D-Straightforward, X-Uncontroversial).^[https://github.com/bevyengine/bevy/pull/24502]
  • Objective: Allow materials to use WGSL pipeline-overridable constants (override declarations).
  • Solution: Expose constants in RenderPipelineDescriptor & ComputePipelineDescriptor. Materials can now specify pipeline constants in their specialize function.
  • Breaking: Eq derive removed from ComputePipelineDescriptor, VertexState, FragmentState due to new f64 field.

Rendering — Layout/BindGroup heap allocation reduction

  • #24503 MERGED (beicause, Jun 9, A-Rendering, C-Performance, D-Straightforward, X-Uncontroversial).^[https://github.com/bevyengine/bevy/pull/24503]
  • Objective: Reduce heap allocations in LayoutCache::get and BindGroupLayoutCache::get.
  • Impact: Rendering performance micro-optimization.

Scenes — BSN optional scenes and scene lists expansion (0.19 MILESTONE)

  • #24565 MERGED (cart, Jun 9, 0.19 milestone, A-Scenes, C-Bug, C-Usability, D-Straightforward).^[https://github.com/bevyengine/bevy/pull/24565]
  • Objective: Enable Option-wrapped scenes and scene lists in BSN. #24536 got partway but didn’t support SceneList or Option<Box<dyn SceneList>> (e.g. for “scene props”).
  • Bug fix: #24536 introduced a bug — it didn’t register dependencies of the wrapped scene. Fixed here.
  • New capability: Option<Box<dyn SceneList>> now works natively in BSN props. Example: @FeathersButton { @caption: bsn! { Node } } where caption is Option<Box<dyn SceneList>>.

Scenes — Mip map generator material change detection fix (0.19 MILESTONE)

  • #24532 MERGED (DGriffin91, Jun 9, 0.19 milestone, A-Assets, A-Rendering, C-Examples, D-Trivial).^[https://github.com/bevyengine/bevy/pull/24532]
  • Bug: Large scene mip map generator was triggering material change detection incorrectly.

ECS — ResultSeverityExt shorthands (0.19 MILESTONE)

  • #24555 MERGED (cookie1170, Jun 9, 0.19 milestone, A-ECS, C-Usability, D-Straightforward).^[https://github.com/bevyengine/bevy/pull/24555]
  • Objective: Add convenience shorthands for setting severity levels on ResultSeverityExt.

ECS — OrderedRelationshipSourceCollection manual placement fix

Reflection — Register type data by path

Assets — VisitAssetDependencies generic impls

Assets — Handle tracking on soft removal fix

UI — Modal dialog box for Feathers

  • #24559 MERGED (viridia, Jun 9, A-UI, C-Feature).^[https://github.com/bevyengine/bevy/pull/24559]
  • Objective: Part of #19236. Modal dialog boxes for the Feathers UI framework.
  • Significance: Continues the Feathers UI widget expansion — modal dialogs are essential for confirmations, alerts, and editor-like UX.

Input — MouseScrollUnit conversion factor as Resource

  • #24512 MERGED (stevehello166, Jun 9, A-Input, C-Feature, D-Straightforward, X-Uncontroversial).^[https://github.com/bevyengine/bevy/pull/24512]
  • Objective: Replace hardcoded SCROLL_UNIT_CONVERSION_FACTOR with a configurable Resource.
  • Impact: Scroll sensitivity can now be customized at runtime.

Color — Okhsla and Okhsva color spaces

  • #24137 MERGED (beicause, Jun 9, A-Color, C-Feature, D-Modest).^[https://github.com/bevyengine/bevy/pull/24137]
  • Objective: Add Okhsla and Okhsva color representations to bevy_color.
  • Significance: Extends Bevy’s perceptually-uniform color space support (OkLab/OkLch family).

Rendering — Scene viewer mesh compression + motion blur (example update)

  • #24570 MERGED (greeble-dev, Jun 10, A-Rendering, C-Examples, C-Feature, D-Straightforward, X-Uncontroversial).^[https://github.com/bevyengine/bevy/pull/24570]
  • Objective: Add mesh compression and motion blur support to the scene viewer example.

glTF — KHR_materials_specular validation

Other merged

  • #24566 — Update proptest-derive 0.2 → 0.8 (kfc35, A-Rendering, C-Dependencies, C-Testing).
  • #24560 — Document gizmos axes colors (samoylovfp, A-Gizmos, C-Docs).
  • **#24547, 24545 — sort_unstable + dedup() combos (miguelraz, A-Math, C-Code-Quality, C-Performance).
  • #24546 — Remove unwrap from layout/mod.rs (Nuxssss, A-UI, C-Bug).
  • #24543 — Fill in doc strings for bevy_asset (amtep, A-Assets, C-Docs).
  • #24534 — Update accesskit_winit 0.32 → 0.33 (A-Accessibility, C-Dependencies).
  • #24186 — Update guillotiere 0.6.0 → 0.7.0 (A-Assets, C-Dependencies).

0.19 milestone status

  • 523/526 (99.4%), 3 open. Up from 519/523 (99.2%, 4 open) on Jun 9.
  • #24555 (ResultSeverityExt shorthands) and #24565 (BSN optional scenes) closed from open list.
  • New item: bsn: fix name docs (cart, PR open).
  • 3 remaining open items:
  • #24526 — bsn: support field name shorthand (S-Blocked)
  • bsn: fix name docs (PR open, cart)
  • Incorrect/Confusing Example in BSN lib docs for Entity Names (issue, Diddykonga)
  • All 3 are BSN documentation/polish. No blocking bugs. 0.19 final release is imminent.
  • rc.2 (May 22) still latest pre-release.

2026-06-11 engine changes

Scenes — BSN field name shorthand (0.19 MILESTONE, was S-Blocked)

  • #24526 MERGED (cart, Jun 10, 0.19 milestone, A-Scenes, C-Usability).^[https://github.com/bevyengine/bevy/pull/24526]
  • Objective: Support Rust’s “name shorthand syntax” in bsn! macro.
  • Before: Variables had to be explicitly named: bsn! { Foo { value: value } }
  • After: Shorthand works directly: bsn! { Foo { value } } where value is a local variable. Also for props: bsn! { @Foo { @value } }
  • Internal change: Generated variables now use __X formatting everywhere to avoid conflicts with user-defined variables.
  • Was S-Blocked in previous days. Now merged — unblocks the last major BSN ergonomic feature.

Scenes — BSN name docs fix (0.19 MILESTONE)

Docs — Release notes copyediting (0.19 MILESTONE)

  • #24577 MERGED (0.19 milestone, C-Docs, D-Trivial, S-Adopt-Me). Copyediting pass on 0.19 release notes.

Rendering — Bindless specular transmission material lookup fix

  • #24573 MERGED (issam3105, Jun 10, merged by alice-i-cecile, A-Rendering, C-Bug, D-Straightforward, D-Shaders).^[https://github.com/bevyengine/bevy/pull/24573]
  • Bug: Typo in bindless material lookup — specular_transmission was reading through wrong material index in the bindless path.
  • Fix: Read through the correct material_indices[slot].material index.
  • Context: Discovered while reading the transmission shader path for upcoming KHR_materials_dispersion work.

ECS — Fix non_snake_case on bundle derive

  • #22866 MERGED (SOF3, Jun 10, A-ECS, C-Usability, D-Straightforward, D-Macros).^[https://github.com/bevyengine/bevy/pull/22866]
  • Fixes #22865 — bundle derive macro generated code that triggered non_snake_case warnings for bundle fields. Adds #[allow(non_snake_case)] to the generated field variable.

ECS — Safety comments audit: unsafe blocks in bevy_ecs (SIGNIFICANT)

  • #24488 MERGED (SpecificProtagonist, Jun 10, merged by alice-i-cecile, A-ECS, C-Code-Quality, D-Unsafe, X-Uncontroversial, D-Modest). +539/-361, 15 files changed, 7 commits.^[https://github.com/bevyengine/bevy/pull/24488]
  • **Part of 11590 — the ongoing ECS unsafe code safety audit.
  • Objective: Remove most #[expect(unsafe_op_in_unsafe_fn)] blanket suppression attributes from bevy_ecs and replace with explicit unsafe { } blocks with documented safety comments.
  • Coverage: Processes core bevy_ecs modules across 15 files. Does NOT change runtime behavior — purely improves code auditability.
  • Not yet covered: bevy_ecs::storage, bevy_ecs::query, bevy_ecs::system::system_param still have #[expect] exceptions pending future PRs in the #11590 series.
  • Reviewed by: Trashtalk217 (suggested changes) and alice-i-cecile.

Reflection — type_info module reorganization

  • #24576 MERGED (A-Reflection, C-Code-Quality, D-Trivial). Internal module reorganization of bevy_reflect::type_info.

Other merged

  • #24583 — Justify inputs in multiple_text_inputs example (A-UI/A-Text, C-Examples, D-Trivial).
  • #24578 — Rename variable in custom_loop example (A-ECS, C-Examples, D-Trivial).

0.19 milestone status

  • 🔥 527/528 (99.8%), 1 open item. Down from 523/526 (99.4%, 3 open) on Jun 10.
  • Closed today: #24526 (BSN field name shorthand — was S-Blocked), #24575 (BSN name docs fix), #24577 (release notes copyediting).
  • 1 remaining open item:
  • #24582 — Allow directly writing enums as fields (C-Feature, S-Needs-Triage, newly filed)
  • rc.2 (May 22) still latest pre-release. With only 1 open item (a new feature request, not a blocking bug), 0.19 final release could ship at any moment.

2026-06-12 engine changes

Release — v0.19.0-rc.3

  • 🚨 v0.19.0-rc.3 RELEASED (mockersf, Jun 10, commit bacfcda). Third release candidate for 0.19. 29 community reactions.^[https://github.com/bevyengine/bevy/releases/tag/v0.19.0-rc.3]
  • Diff from rc.2: v0.19.0-rc.2…v0.19.0-rc.3
  • Includes all merges from Jun 8–10: BSN field name shorthand, BSN optional scenes expansion, Beer’s law attenuation, pipeline constants, AmbientLightFlags refactor, Feathers modal dialog, Okhsla/Okhsva, MouseScrollUnit Resource, and more.

ECS — Name heap allocation footgun fix (BREAKING)

  • #24544 MERGED (bytemuck, Jun 11, merged by alice-i-cecile, A-ECS, C-Usability, +11/-3).^[https://github.com/bevyengine/bevy/pull/24544]
  • Objective: Fix #24465 — Name::from<&str> always heap-allocates because &strString conversion is required. This was a performance footgun in hot paths like entity spawning.
  • Solution: Change impl From<&str> for Name to impl From<&'static str> for Name. Static strings avoid the heap allocation entirely.
  • Breaking: Code that passes non-static &str (e.g. Name::from(my_string.as_str())) will no longer compile. Must use Name::new() or convert to String first.
  • Reviewed by: alice-i-cecile, with discussion about whether From<String> is sufficient or if From<Cow<'static, str>> should be added.

glTF — Specular extension parsing fix

  • #24580 MERGED (issam3105, Jun 11, merged by alice-i-cecile, A-glTF, C-Bug, D-Straightforward, +51/-48, 3 files).^[https://github.com/bevyengine/bevy/pull/24580]
  • Objective: Enable glTF validation for KHR_materials_specular (#24571). Previous parsing didn’t use the typed material.specular() API exposed by the gltf crate.
  • Solution: Read specular properties through the typed material.specular() API.
  • Testing: Khronos SpecularTest asset.

Assets — asset_changed import path made public

  • #24548 MERGED (YUHAO-corn, Jun 11, merged by alice-i-cecile, A-Assets, C-Usability, D-Straightforward, +1/-1).^[https://github.com/bevyengine/bevy/pull/24548]
  • Objective: Fix #24501 — the asset_changed module was private, forcing users to import through bevy_asset::private.
  • Solution: Make the existing asset_changed module public. Internal AssetChanges resource remains crate-private.

UI/Text — multiline_text_input example justify menu

  • #24584 MERGED (ickshonpe, Jun 11, merged by alice-i-cecile, A-Text, A-UI, C-Examples, +135/-2, 1 file).^[https://github.com/bevyengine/bevy/pull/24584]
  • Objective: Add popup menu for changing text justification in the multiline_text_input example.
  • Impact: Example-only — no engine API changes.

⚠️ NEW: Resources-as-components regression (3 issues)

  • #24591 OPEN (alice-i-cecile, Jun 12, A-ECS, C-Bug, D-Modest, X-Contentious, S-Ready-For-Implementation, 0.19 milestone).^[https://github.com/bevyengine/bevy/issues/24591]
  • Issue: Inserting a resource as a component should not make it available as a resource. Current behavior conflates the two roles.
  • #24592 OPEN (alice-i-cecile, Jun 12, A-ECS, C-Bug, D-Modest, X-Contentious, S-Ready-For-Implementation, 0.19 milestone).^[https://github.com/bevyengine/bevy/issues/24592]
  • Issue: Types can no longer be effectively used as both resources and components. The new resource-as-component feature (#24164) breaks the dual-use pattern.
  • #24594 OPEN (alice-i-cecile, Jun 12, A-ECS, C-Bug, D-Modest, P-Regression, S-Needs-Review, 0.19 milestone).^[https://github.com/bevyengine/bevy/pull/24594]
  • PR: Proposed fix — move IsResource off the required components path. Makes resources usable as components by treating IsResource differently from regular required components.
  • Significance: This is tagged P-Regression — a feature that worked before (using types as both resources and components) no longer works correctly. Could be a release blocker for 0.19 final.

0.19 milestone status

  • 527/531 (99.2%), 4 open. Scope grew from 528 → 531 (3 new items). Open count jumped from 1 → 4.
  • 4 remaining open items:
  • #24594 — Make resources usable as components (PR, P-Regression)
  • #24592 — Types can’t be both resources and components (Issue)
  • #24591 — Inserting resource as component shouldn’t make it a resource (Issue)
  • #24582 — Allow directly writing enums as fields (previously tracked)
  • ⚠️ The resources-as-components regression is a potential release blocker. alice-i-cecile has both filed the issues and opened a fix PR (#24594). If this doesn’t merge quickly, 0.19 final may be delayed.
  • rc.3 (Jun 10) is latest pre-release. v0.18.1 still tagged “Latest”.

2026-06-13 engine changes

No PRs merged today. Quiet day on main branch. Activity focused on issue tracking and milestone management.

Dev-Tools — Diagnostic overlay fixes and improvements (MERGED 2026-06-14)

  • #24611 MERGED (cart, opened Jun 12, merged 2026-06-14T21:21:27Z, 0.19 milestone, A-Dev-Tools, C-Bug, diagnostics_overlay.rs +45/-14).^[https://github.com/bevyengine/bevy/pull/24611]
  • Objective: Fix bugs and improve the diagnostic overlay in bevy_dev_tools.
  • Three fixes:
  1. Click passthrough [critical] — full-screen overlay Node default Pickable intercepted all clicks, so the overlay (on by default) made lower UI un-interactable; DiagnosticsOverlayPlane now spawns with Pickable { should_block_lower: false, ..Default::default() }.
  2. BSN compat [important]DiagnosticsOverlay gained #[derive(Component, Clone)] + impl Default (title: “Diagnostics”, items: empty vec); DiagnosticsOverlayItem gained Clone; now usable inside bsn bsn! macros.
  3. Font config [important] — new DiagnosticsOverlayStyle Resource (title_font_size Px(12.0) / item_font_size Px(10.0)); init_resource in Plugin build; hardcoded FontSize replaced.
  • API rename: field diagnostic_overlay_itemsitems (constructor, new(), fps(), mesh_and_standard_material()) — breaking but dev-tool-only.
  • Release strategy: cart stated this must ship in 0.19 final (not an RC) because the feature is enabled by default; without the click-passthrough fix it is “pretty broken”.
  • Review: jbuehler23 asked why not a Feathers widget; cart answered to avoid pulling in feathers/scene dependencies and keep it lean. kfc35 suggested syncing the rename in doc examples (adopted).
  • See diagnostic-overlay for the full component inventory + history, and cart for the author.

Notable non-milestone issues opened today

0.19 milestone status

  • 528/532 (99.2%), 4 open. #24611 merged Jun 14 (was 1 of the 5 open on Jun 13); scope still 532.
  • 4 remaining open items:
  • #24594 — Make resources usable as components (PR, P-Regression, S-Needs-Review)
  • #24592 — Types can’t be both resources and components (Issue, S-Waiting-on-SME)
  • #24591 — Inserting resource as component shouldn’t make it a resource (Issue)
  • #24582 — Allow directly writing enums as fields (previously tracked)
  • ⚠️ Resources-as-components regression still unresolved. #24594 needs SME review. #24592 waiting on SME.
  • rc.3 (Jun 10) is latest pre-release. v0.18.1 still tagged “Latest”.
  • First 0.20 milestone issue appeared (#24610 — Listview scrollwheel slow, by viridia).

2026-06-18 engine changes

ECS — SystemWithAccess::system immutable access

  • #24652 MERGED (Jengamon, Jun 18, merged by alice-i-cecile, A-ECS, C-Usability, P-Regression, S-Ready-For-Final-Review, 0.19 milestone).^[https://github.com/bevyengine/bevy/pull/24652]
  • Objective: Give back immutable access to ScheduleSystem through SystemWithAccess::system() without exposing mutation.
  • Root cause: An earlier PR made all SystemWithAccess fields private to prevent mutation. However, external crates (e.g., bevy_mod_debugdump) need read-only access to the contained system.
  • Solution: Add system() method returning immutable reference to the ScheduleSystem.
  • Impact: Fixes regression for ecosystem crates that introspect scheduled systems.

ECS/Dev-Tools — Rename Preferences to Settings

  • #24613 MERGED (cart, Jun 18, merged by alice-i-cecile, A-App, C-Code-Quality, 0.19 milestone, +164/-184, 15 commits).^[https://github.com/bevyengine/bevy/pull/24613]
  • Objective: Rename Preferences to Settings in the appropriate places within the bevy_settings framework.
  • Rationale: The framework conflates “settings” and “preferences” in multiple places. The name of the framework itself is Bevy Settings, so anything driving general “settings” behaviors should use “settings” terminology.
  • Example: PreferencesPlugin should be SettingsPlugin because it handles Settings types regardless of their “scope” (e.g., preferences.toml).
  • Migration impact: None for existing code — the bevy_settings crate is new in 0.19 and this lands before the API is published.

Rendering — Point/Spot Shadow Map refresh

  • #24626 MERGED (0.19 milestone, A-Rendering, C-Bug).^[https://github.com/bevyengine/bevy/pull/24626]
  • Objective: Refresh all components of the Point/Spot Shadow Map if its light has changed.
  • Impact: Fixes stale shadow data when dynamic lights move or change properties.

UI/Text — EditableText pointer propagation fix

UI/Text — Text selection collapse on focus loss

Rendering — InfiniteGrid Copy/Clone

Rendering — Heap allocation reuse (mesh bind groups)

  • #24643 MERGED (beicause, Jun 18, A-Rendering, C-Performance, D-Straightforward, X-Uncontroversial).^[https://github.com/bevyengine/bevy/pull/24643]
  • Objective: Reuse heap allocations in prepare_mesh_bind_groups.
  • Impact: Rendering performance optimization.

Rendering — Heap allocation reuse (RenderContextState)

Rendering — Background motion vectors cleanup

Error Handling — BevyError context messages

Math — Rect::clamp_point

Rendering — SunDisk::MARS preset

Docs/CI — Misc merged PRs

0.19 milestone status

  • 🚀 v0.19.0 STABLE RELEASED today (2026-06-18). This is the official stable release after 3 RCs (rc.1 May 13, rc.2 May 22, rc.3 Jun 10). v0.19.0 is now tagged “Latest” on GitHub. 543 PRs closed in the milestone. See bevy for highlights.

2026-06-20 engine changes

Scenes — bevy_scene: don’t use std Result

  • #24666 MERGED (mockersf, Jun 20, merged by cart, 0.19.1 milestone, +1/-1).
  • Objective: Fix clippy std_instead_of_core lint error triggered on 0.19 CI.
  • Root cause: bevy_scene/src/scene.rs:245 used std::prelude::v1::Result instead of core::Result.
  • Solution: Replace std::prelude::v1::Result with core::prelude::v1::Result.
  • Impact: No API change. No behavioral change. Fixes CI failure.

Dev-Tools — Fix PanCamera mouse button check

  • #24659 MERGED (codecnotsupported, Jun 19, merged by alice-i-cecile, 0.19.1 milestone, A-Camera, A-Dev-Tools, C-Bug, D-Straightforward, X-Uncontroversial, +11/-5).
  • Objective: Fix PanCamera to check that the correct mouse button is used for panning, not just any mouse button.
  • Root cause: PanCamera previously initiated panning on any mouse button press, not just the configured pan button.
  • Solution: Add explicit check against the configured pan mouse button before initiating pan camera movement.
  • BREAKING CHANGE: Default pan button changed from MouseButton::Left to MouseButton::Middle to avoid conflict with primary selection interactions.
  • Migration: Users relying on left-click panning must configure pan_button: MouseButton::Left to restore previous behavior.

Milestone status

2026-06-21 engine changes

UI — number_input scrubbing/dragging (0.19.1 MILESTONE)

  • #24636 MERGED (viridia, Jun 21, merged by alice-i-cecile, 0.19.1 milestone, A-UI, C-Feature, D-Complex, M-Release-Note, X-Contentious).^[https://github.com/bevyengine/bevy/pull/24636]
  • Objective: Add click-drag scrubbing to Feathers number_input widget, similar to Blender/Godot inspector behavior.
  • Behavior: Click and drag horizontally (or vertically with Shift) to adjust numeric values. Drag distance maps to configurable value delta.
  • Configuration: sensitivity, orientation (Horizontal/Vertical), min, max, step.
  • Significance: Major UX improvement for editor-like interfaces and dev tools. Tagged M-Release-Note.

Text — Performance regression fix (0.19.1 MILESTONE)

  • #24663 MERGED (ickshonpe, Jun 21, 0.19.1 milestone, A-Text, C-Performance, P-Regression, D-Straightforward).^[https://github.com/bevyengine/bevy/pull/24663]
  • Bug: Text layout measurement cache was invalidated too aggressively in 0.19, causing repeated expensive measurements.
  • Fix: Cache invalidation now correctly keyed by layout constraints.
  • Impact: Text-heavy UIs should see significant performance improvement.

Rendering — Sprite material shader module extraction

  • #24629 MERGED (cookie1170, Jun 21, A-Rendering, C-Code-Quality, C-Usability, D-Straightforward, D-Shaders).^[https://github.com/bevyengine/bevy/pull/24629]
  • Objective: Extract sprite_material functions, bindings, and types to a separate reusable shader module.
  • Impact: Internal refactoring — no API break. Enables future sprite material customization.

Rendering — Solari fixes

CI/Build

2026-06-22 engine changes

Rendering — Sorted batching without indirect drawing (0.19.1 MILESTONE)

  • #24708 MERGED (issam3105, Jun 22, 0.19.1 milestone, A-Rendering, C-Bug, O-WebGL2, D-Straightforward).^[https://github.com/bevyengine/bevy/pull/24708]
  • Bug: Sorted render phase batching did not work correctly when indirect drawing was unavailable (WebGL2). Meshes were not batched, causing significant performance degradation.
  • Fix: Implements CPU-side sorted batching fallback when indirect draw is not supported.
  • Impact: WebGL2 performance improvement for scenes with many sorted transparent meshes.

ECS — Entity wrappers in entity set/map types (BREAKING)

  • #18408 MERGED (Victoronz, Jun 22, A-ECS, C-Usability, D-Complex, M-Migration-Guide).^[https://github.com/bevyengine/bevy/pull/18408]
  • Objective: Allow EntityHashSet/EntityHashMap to accept wrapper types through new AsEntity trait.
  • Breaking: Changes EntitySet/EntityMap trait bounds. Code implementing these traits directly may need updates.
  • Migration guide: Included — trait implementations need to add AsEntity bound.

ECS — Remove 0.19 deprecated code

  • #24687 MERGED (Trashtalk217, Jun 22, A-ECS, C-Code-Quality, D-Trivial).^[https://github.com/bevyengine/bevy/pull/24687]
  • Objective: Remove APIs deprecated in 0.18 that were scheduled for removal in 0.19.
  • Impact: Code still using deprecated APIs will fail to compile. Migration guide covers replacements.

UI/Picking — clip_check_recursive fix (0.19.1 MILESTONE)

  • #24684 MERGED (ickshonpe, Jun 22, 0.19.1 milestone, A-UI, C-Bug, P-Regression, D-Straightforward, A-Picking).^[https://github.com/bevyengine/bevy/pull/24684]
  • Bug: UI clipping bounds were incorrectly calculated in nested layouts, causing picking (hit detection) to miss elements.
  • Fix: Correct clip containment check in recursive picking path.

Rendering — Solari MIS fix

  • #24671 MERGED (JMS55, Jun 22, A-Rendering, C-Bug, C-Code-Quality, D-Modest).^[https://github.com/bevyengine/bevy/pull/24671]
  • Bug: Multiple Importance Sampling in Solari was not using consistent PDF measures, causing noise/artifacts.
  • Fix: Aligns PDF measures across MIS paths.

Rendering — DX12 read-only buffer atomics fix

  • #24650 MERGED (stuartparmenter, Jun 22, A-Rendering, C-Bug, O-DX12, D-Straightforward, D-Shaders).^[https://github.com/bevyengine/bevy/pull/24650]
  • Bug: Atomics were declared in a read-only late mesh preprocessing buffer, causing DX12 validation errors.
  • Fix: Remove atomic declarations from read-only buffer path.

Time — max_delta clamp fix

  • #24237 MERGED (mockersf, Jun 22, A-Time, D-Straightforward).^[https://github.com/bevyengine/bevy/pull/24237]
  • Bug: Time did not clamp delta by max_delta when relative speed > 1, allowing extreme time steps.
  • Fix: Apply max_delta clamp regardless of relative speed.

Dependencies — sysinfo 0.39.5

Dev-Tools — Diagnostics overlay border radius fix (0.19.1 MILESTONE)

Rendering — Light probe import fix (0.19.1 MILESTONE)

  • #24714 MERGED (kfc35, Jun 22, 0.19.1 milestone, A-Rendering, C-Bug, D-Trivial).^[https://github.com/bevyengine/bevy/pull/24714]
  • Fix: Adds missing WGSL import for LIGHTMAPPED_MESH_DIFFUSE constant in irradiance volume shader.

UI — Feathers radio button background (0.20 MILESTONE)

Other merged

Milestone status

2026-06-23/24 engine changes

Text — Swash stable font id (MAJOR PERFORMANCE FIX)

  • #24710 MERGED (kristoff3r, Jun 23, merged by alice-i-cecile, C-Bug, D-Complex, +18/-6, 3 files changed).^[https://github.com/bevyengine/bevy/pull/24710]
  • Objective: Fix a text rendering performance regression from the move to parley.
  • Root cause: FontRef constructors implicitly generated new CacheKey instances on every call, breaking swash’s internal caching layer. Using the scale builder without giving an id did this internally.
  • Solution: Give the builder a stable font id derived from the asset.
  • Impact: many_text2d --hinting startup time drops from 7s → 500ms (14× faster). Text-heavy UIs with hinting enabled will see dramatic startup improvement.
  • Testing: many_text2d example with new hinting flag.

Rendering — InfiniteGrid Visibility fix (0.19.1 MILESTONE)

  • #24723 MERGED (chris-hain, Jun 23, merged by alice-i-cecile, 0.19.1 milestone, A-Rendering, C-Bug, D-Straightforward, X-Uncontroversial, +27/-1, 2 files changed).^[https://github.com/bevyengine/bevy/pull/24723]
  • Bug: The custom render phase for infinite grid did not clear invisible or despawned meshes before rendering, meaning the Visibility component had no effect on InfiniteGrid.
  • Fix: Added a removal pass in the infinite_grid render queue.
  • Testing: toggle_visibility system added to the infinite_grid example.

UI — Feathers missing png feature (0.19.1 MILESTONE)

  • #24727 MERGED (Sigma-dev, Jun 23, merged by alice-i-cecile, 0.19.1 milestone, A-UI, C-Bug, D-Trivial).^[https://github.com/bevyengine/bevy/pull/24727]
  • Fix: Adds missing png feature to bevy_feathers feature declaration.
  • Impact: Fixes compilation when using bevy_feathers without explicitly enabling the png feature.

Camera — IsDefaultUiCamera Clone (0.19.1 MILESTONE)

  • #24729 MERGED (JasmineLowen, Jun 24, merged by alice-i-cecile, 0.19.1 milestone, A-Camera, C-Usability, D-Trivial).^[https://github.com/bevyengine/bevy/pull/24729]
  • Impact: Derives Clone for IsDefaultUiCamera, improving ECS ergonomics for camera setup patterns.

UI — Feathers theme aware fixes

  • #24719 MERGED (gagnus, Jun 23, merged by alice-i-cecile, A-UI, C-Bug, +161/-43, 6 files changed).^[https://github.com/bevyengine/bevy/pull/24719]
  • Bugs fixed:
  • Disclosure toggle was setting colors directly when enabled/disabled instead of re-inserting InheritableThemeTextColor.
  • NumberInput needed a plugin to add an update function for theme changes.
  • Slider needed an update function for theme changes.
  • Icons not updating with theme — added new ThemedIcon component marker and a system to color it after text color propagation.
  • Impact: Zero behavior change if themes are not switched at runtime. Fixes only manifest when changing themes dynamically.

UI — Number input polish (0.20 MILESTONE)

  • #24701 MERGED (viridia, Jun 23, merged by alice-i-cecile, 0.20 milestone, A-UI, C-Feature, +83/-7, 3 files changed).^[https://github.com/bevyengine/bevy/pull/24701]
  • Objective: Polish the Feathers number_input widget following #24636 (scrubbing).
  • Changes: Release notes and migration guide added, focus behavior when disabled fixed, various UI tweaks.
  • Part of: #19236 (Feathers UI widget set).

Milestone status

2026-06-25 engine changes

UI — Floating dialogs in Feathers (0.20 MILESTONE)

  • #24705 MERGED (gagnus, Jun 24, merged by alice-i-cecile, 0.20 milestone, A-UI, C-Feature, D-Modest, M-Release-Note, 6 commits).^[https://github.com/bevyengine/bevy/pull/24705]
  • Objective: Support floating dialogs that can be re-ordered and moved around, for editor requirements like settings windows or entity debuggers.
  • Solution: Expanded the existing modal dialog into a full floating dialog system at both the Feathers UI level and the underlying bevy_ui_widgets level. No changes to existing modal dialog APIs.
  • Impact: Enables editor-style floating panels in Feathers-based UIs. Zero breaking changes.

Milestone status

2026-06-26 engine changes

Scenes — BSN nested entity references fix

  • #24742 MERGED (HeartofPhos, Jun 25, merged 6h ago, 0.19.1 milestone, A-Scenes, C-Bug, D-Straightforward, +11/-1).^[https://github.com/bevyengine/bevy/pull/24742]
  • Bug: BSN nested entity references were not correctly resolved during scene expansion. Inner entity refs inside nested structures failed to parse/expand.
  • Fix: Corrected the nested entity reference parsing logic in BSN scene expansion.
  • Impact: Projects using BSN with deeply nested entity hierarchies will see correct spawning behavior. Zero API break.

States — NextState::set_if_neq renamed to set_if_different (BREAKING)

  • #24676 MERGED (mansiverma897993, Jun 25, A-States, C-Bug, D-Straightforward, M-Migration-Guide, +23/-13).^[https://github.com/bevyengine/bevy/pull/24676]
  • Bug: NextState::set_if_neq clashed with std/core PartialEq::ne method naming convention, causing confusion and potential method resolution issues.
  • Fix: Renamed to set_if_different to avoid the clash.
  • Impact: Code using NextState::set_if_neq must rename to set_if_different. This is a straightforward find-and-replace migration.

Milestone status

2026-06-27 engine changes

Rendering — Temporal jitter applied to PreviousViewData (0.20 MILESTONE)

  • #24672 MERGED (JMS55, Jun 26, merged by alice-i-cecile, 0.20 milestone, A-Rendering, C-Bug, D-Straightforward, +82/-12, 7 files changed).^[https://github.com/bevyengine/bevy/pull/24672]
  • Objective: PreviousViewData did not account for temporal jitter, which led to small inaccuracies that caused issues in a future Solari PR.
  • Solution: Apply temporal jitter to PreviousViewData. Add unjittered_clip_from_world for motion vector usage which requires unjittered matrices.
  • Impact: Rendering correctness improvement for TAA/motion vector paths. Solari path tracer will benefit in upcoming PRs. No API break.

Milestone status

2026-06-28 engine changes

Dependencies — Stricter nonmax crate version requirement

  • #24776 MERGED (RCoder01, Jun 27, C-Dependencies, D-Trivial, S-Ready-For-Final-Review).^[https://github.com/bevyengine/bevy/pull/24776]
  • Bug: bevy_ecs fails to compile when nonmax crate is pinned to <= 0.5.3, because bevy_ecs uses nonmax::NonMaxU32::MAX which was only added in 0.5.4. The Cargo.toml constraint nonmax = "0.5" incorrectly allowed 0.5.3.
  • Fix: Bump nonmax requirement to > 0.5.4.
  • Impact: Projects upgrading from old Bevy versions without running cargo update will no longer hit this compilation error. Zero API break.

Rendering — Clustered decal docs macOS/iOS restriction fix

  • #24770 MERGED (mgi388, Jun 27, A-Rendering, C-Docs, D-Trivial, S-Ready-For-Final-Review).^[https://github.com/bevyengine/bevy/pull/24770]
  • Bug: PR #21332 previously fixed clustered decal docs for macOS/iOS platform restriction but missed the component-level doc comment.
  • Fix: Update component doc comment and tidy spacing in the doc block.
  • Impact: Documentation only. No behavior change.

Time — effective_speed accuracy when max_delta clamping

  • #24768 MERGED (akshitj11, Jun 26, A-Time, C-Bug).^[https://github.com/bevyengine/bevy/pull/24768]
  • Bug: Fixes #24715. effective_speed reported relative_speed instead of the actual applied multiplier, causing incorrect values when max_delta clamping occurred.
  • Fix: Set effective_speed to delta / raw_delta (the multiplier actually applied).
  • Impact: Any code reading effective_speed on a Time resource with max_delta configured will now see correct values. Behavior correction, not an API break.

Milestone status

2026-06-29 engine changes

Build System — rust-version bumped to 1.96

  • #24736 MERGED (taearls, Jun 29, merged by alice-i-cecile, A-Build-System, A-Cross-Cutting, C-Bug, C-Testing, D-Trivial, X-Uncontroversial, +1/-1).^[https://github.com/bevyengine/bevy/pull/24736]
  • Bug: rust-version in root Cargo.toml was 1.95, but Bevy tests use assert_matches! macro which requires Rust 1.96. Running cargo test on Rust 1.95 failed.
  • Fix: Bump rust-version from 1.95 to 1.96 in root Cargo.toml.
  • Impact: No API break. CI already uses stable toolchain (1.96+). This is purely a correctness fix for the declared minimum supported Rust version.

Milestone status

2026-06-30 engine changes

Rendering — Shrink previous mesh uniform to transform only (PERFORMANCE)

  • #23892 MERGED (pcwalton, Jun 29/30, merged by cart, A-Rendering, C-Performance, D-Modest, +83/-29, 6 files changed, 2 commits).
  • Objective: The entire MeshInputUniform (24 words) was copied to the previous mesh instance buffer every frame, but only the transform is ever used (for motion blur).
  • Solution: Introduces PreviousMeshInputUniform containing only the transform matrix. The previous mesh instance buffer now stores ~16 floats instead of ~96 floats for this path.
  • Performance: On many_cubes, prepare_previous_mesh_uniforms median time drops from 240.1 μs → 65.33 μs (3.68× speedup).
  • Future work: Simplifies sparse updates where only changed MeshInputUniform fields are written.
  • Impact: No public API change. Internal rendering optimization.

Milestone status

  • 0.19.1 milestone: 20/35 closed (57% complete), 15 open. Scope expanded from 28 → 35 total items since Jun 29 (7 new items added). Closed count unchanged at 20.^[https://github.com/bevyengine/bevy/milestones]
  • 0.20 milestone: 25/59 closed/open (42% complete), 34 open. Scope expanded from 57 → 59 total items. Closed count unchanged at 25.^[https://github.com/bevyengine/bevy/milestones]
  • v0.19.0 stable remains latest release. No new RC or patch release.