2026-05-01 additions

2026-05-02 additions

TextLayout constructor rename

  • TextLayout::new_with_justify(...)TextLayout::justify(...)
  • TextLayout::new_with_linebreak(...)TextLayout::linebreak(...)
  • TextLayout::new_with_no_wrap()TextLayout::no_wrap()
  • Rationale: “new” is redundant, “with” is reserved for fluent APIs. Simple find-and-replace migration.

Mesh view bind group layout on demand

  • #23982 removes exponential pre-allocation of MeshPipelineViewLayoutKey.
  • If you have custom render pipelines that directly access MeshPipelineViewLayouts::get_view_layout, expect a slight behavior change (on-demand creation instead of pre-built cache).
  • Fixes WebGL2 3d_scene regression (#23627).
  • Migration guide included in the PR.

0.19 release readiness

  • 349/363 closed (96%), 14 open issues remain.
  • Open issues are primarily platform-specific rendering bugs, not API changes.
  • 0.20 milestone created (5/15 closed, 33%).

Scene Components architecture

  • SceneComponent trait + derive (#24008) is now merged. Projects that manually spawn scenes alongside components should evaluate #[derive(SceneComponent)] plus BSN inheritance syntax (world.spawn_scene(bsn! { :Player { ... } })). The old pattern of commands.spawn(Player::default()) + separate scene spawning should be replaced only after moving the scene construction into the SceneComponent path.
  • BSN inheritance syntax (:) distinguishes scene component spawning from normal patching.
  • Scene logic is in bevy_scene, not bevy_ecs; new dependency on bevy_ecs_macro_logic for reusable derive logic.
  • Static enforcement of “never spawn scene component without scene” deferred to 0.20.

EditableText API breaking change

  • TextLayoutInfo::cursor type changed: Option<Rect>Option<(bool, Rect)>. The boolean indicates cursor visibility.
  • Fixes Chinese text jitter (#23931) and partial cursor racing fix (#23933).
  • Any code that reads or writes TextLayoutInfo::cursor must be updated.

Dynamic light shadow rendering fixed

  • ExtractedView and Frustum now update correctly when ExtractedPointLight changes (#24038). This is a rendering correctness fix, not an API break.
  • Combined with “render once” shadow optimization (#23713), shadow maps now both render efficiently AND update correctly for dynamic lights.

0.19 release readiness

  • Milestone at 96% (349/363 closed, 14 open). Most remaining issues are platform-specific rendering regressions.
  • 0.20 milestone created (5/15, 33%), signaling imminent 0.19 release.
  • Start testing projects against main now.

2026-05-05 additions

Feathers API graduation (breaking for feature flag users)

  • bevy_experimental_feathers renamed to bevy_feathers (#24108). With Scene Components (#24008) completing the architecture, the feathers widget system has reached its final form and is no longer experimental.
  • Migration: Change any Cargo.toml feature flag from bevy_experimental_feathers to bevy_feathers. Bevy examples migration to feathers widgets now unblocked, starting with one example at a time.

wgpu dependency bump

  • wgpu and related deps bumped from 29.0.1 to 29.0.3 (#24064). Should fix the DX12 black meshes regression (#23573), a major 0.19 blocker. Also fixes #23220. Projects with custom wgpu dependency pins should update to 29.0.3 when upgrading to 0.19.

New ECS API: insert_resource_if_neq

  • Commands::insert_resource_if_neq (#24082) is the resource counterpart to EntityCommands::insert_if_neq. If projects have custom “only write resource when changed” helpers, this may replace them.

ECS resource storage change (internal, low risk)

  • Resources now stored on sparse sets (#24077). ~10% faster resource access. This is an internal optimization; no API change expected.

Window event delivery fix (breaking if using WindowEvent matching)

  • WindowResized, WindowBackendScaleFactorChanged, WindowScaleFactorChanged now correctly delivered as WindowEvent variants (#24046). Previously these were only available via dedicated MessageReader<WindowResized> etc. If code was matching on WindowEvent variants and missing these cases, they’ll now fire. If code was using both the dedicated readers AND the enum variants, it may get duplicate events — pick one approach.

Feathers widget naming

  • ToolButton renamed to FeathersToolButton (#24098) for consistency with other widgets. Simple find-and-replace migration.

Handle from_reflect bug fix

  • Handle<T>::from_reflect was incorrectly instantiating handles regardless of T type (#24048). If projects relied on reflection-based handle instantiation, behavior may change subtly — the fix is correct, but verify reflection-based asset workflows.

0.19 release readiness

  • Milestone at 97.7% (382/391), only 9 open issues. Up from 96% on May 2. The feathers graduation and wgpu bump are strong signals that 0.19 is imminent — potentially this week. Start testing projects against main NOW.

2026-05-06 additions

Disabled/Enabled state scoped components (new ECS feature)

  • DisableWhen, DisableOnEnter, DisableOnExit, EnableWhen, EnableOnEnter, EnableOnExit (#24142) are new state-scoped components mirroring the DespawnWhen pattern.
  • Migration: Additive API — no existing code breaks. If projects have custom state-driven entity toggling, these can replace manual system logic.

Feature flag reshuffle (watch for 0.19)

  • PR #22488 moves bevy_window, bevy_input_focus, custom_cursor to alternate feature collections. 0.19 milestone, X-Contentious, S-Ready-For-Final-Review. Migration guide included.
  • Migration: If accepted before 0.19 final, projects with custom feature sets will need to audit bevy_window, bevy_input_focus, custom_cursor feature references.

Quit on RenderErrors (watch for 0.19 default change)

  • PR #24131 (kfc35, 0.19) proposes quitting the application on any RenderError by default instead of silently degrading. X-Contentious.
  • If merged: Applications that currently survive render errors (e.g., lost device on WebGL2) will exit instead. May need opt-out configuration.

Prepass indirect parameters fix (rendering correctness)

  • #24113 fixes the motion_blur example (and any app with early prepass but no depth/shadow prepass). Rendering correctness, no API change.

0.19 release readiness

  • Milestone at 97.0% (384/396), 12 open issues. Up from 97.7% (382/391, 9 open) — 3 new issues filed.
  • No release published yet; v0.18.1 remains latest. Release extremely close but not today.
  • Feature flag reshuffle (#22488) and RenderError quit (#24131) are last-minute controversies that could still land.

Practical checklist for ZoOL

  • Audit feature flags before the next Bevy upgrade if any project opts out of default features.
  • Grep UI code for CoreScrollbarDragState and CoreSliderDragState during the next dependency bump.
  • Review local ECS helper utilities to see whether insert_if_neq makes custom wrappers obsolete.
  • Retest UI focus-driven logic and screenshot-based text-input baselines when adopting the latest 0.19-dev changes.
  • Reproduce load_folder + file watcher behavior before relying on folder hot reload in Bevy projects.
  • Add explicit tests for composed ECS run conditions that combine not() and and().
  • Evaluate SceneComponent (#24008) for any project that manually ties components to scenes. Plan migration to #[derive(SceneComponent)].
  • Update TextLayoutInfo::cursor usage — type changed from Option<Rect> to Option<(bool, Rect)>.
  • Test dynamic light shadows — if any project has moving point/spot lights, verify shadow rendering against main.
  • Start testing against main — 0.19 is at 96% and 0.20 milestone exists.
  • Rename feathers feature flag — change bevy_experimental_feathersbevy_feathers in all Cargo.toml files.
  • Update wgpu dependency pinnings — ensure wgpu is at 29.0.3 or later to get the DX12 fix.
  • Audit WindowEvent matching — if using both MessageReader<WindowResized> AND WindowEvent matching, consolidate to one approach to avoid duplicate events.
  • Replace custom resource-if-neq helpersCommands::insert_resource_if_neq is now built-in.
  • Grep for ToolButton — renamed to FeathersToolButton.

2026-05-07 additions

Quit on RenderErrors — DEFAULT BEHAVIOR CHANGE (breaking)

  • PR #24131 (kfc35, 0.19, X-Contentious) has been MERGED. Default error policy changed from Ignore to quitting on any RenderError.
  • Migration: Applications that currently survive render errors (OOM, validation errors, lost device on WebGL2) will now exit instead. To preserve old behavior, explicitly set the error handler to ErrorPolicy::Ignore.
  • Affects: All platforms. Most impactful on WebGL2/wasm where device loss is more common.

EnvironmentMapUniform removed (breaking, migration guide included)

  • PR #24095 (beicause, 0.19, M-Migration-Guide) removes EnvironmentMapUniform and stores view environment map rotation in LightProbesUniform.
  • Migration: If projects directly reference EnvironmentMapUniform, update to use LightProbesUniform instead. Migration guide included in the PR.

ImageNode — OverflowClipMarginBox renamed to VisualBox (breaking)

  • PR #24154 (ickshonpe) renames OverflowClipMarginBox to VisualBox and adds a visual_box field to ImageNode.
  • Migration: Grep for OverflowClipMarginBox and replace with VisualBox.

Disable/Enable now recursive over Children (bug fix)

  • PR #24158 (Freyja-moth, 0.19) fixes #24142: entity disabling/enabling now recurses over Children hierarchy.
  • Migration: No action needed — this is a correctness fix. Previously, Disabled was only applied to the target entity, not its children.

0.19 release readiness — 99%

  • Milestone at 395/398 (99%), only 3 open issues. All three are rendering regressions. Release could be within days.
  • Action: Start final integration testing against main now.

Updated practical checklist

  • Quit on RenderErrors — add opt-out if project needs graceful degradation after render errors.
  • EnvironmentMapUniform — replace references with LightProbesUniform.
  • OverflowClipMarginBox — rename to VisualBox.

2026-05-08 additions

World::register_resource deprecated (ECS cleanup)

  • PR #24168 (SpecificProtagonist, 0.19) deprecates World::register_resource. This was missed in a prior ECS cleanup pass.
  • Migration: Grep for World::register_resource and replace with the recommended alternative (likely World::init_resource or direct insertion). Deprecation warnings will appear in 0.19 builds.

RenderVisibleEntitiesClass public API exposure

  • PR #24180 (komadori, 0.19) makes added_entities, prepare_for_new_frame(), and update_cpu_culled_entities() public on RenderVisibleEntitiesClass.
  • Migration: Additive change — no existing code breaks. Third-party rendering crates (e.g. bevy_mod_outline) can now build custom visibility systems without workarounds.

AnimationClip curve sampling (new API, additive)

  • PR #24152 (Hilpogar, 0.19) adds sample_clamped to AnimationClip and AnimationCurve trait.
  • Migration: Additive — no breakage. Enables root motion and third-party animation curve sampling. Relevant if project uses custom animation systems.

2026-05-09 additions

Resource hooks & immutable resources (new ECS feature)

  • PR #24164 (SpecificProtagonist, 0.19, M-Release-Note, 23 comments). Hooks and immutable resources added to Bevy ECS.
  • Migration: Additive — no existing code breaks. If projects have custom resource-change-detection wrappers, evaluate whether built-in hooks can replace them.

0.19 release readiness — 99.3%

  • Milestone at 417/420 (99.3%), 3 open issues. All three are visibility-range shadow rendering regressions. Release could be any hour.

2026-05-10 additions

0.19 release readiness — 98.8%

  • Milestone at 418/423 (98.8%), 5 open issues. Up from 417/420 (99.3%, 3 open) on May 9 — 1 issue closed, 2 new issues added. Release remains imminent but milestone scope expanded slightly.

2026-05-11 ~ 2026-05-13 additions

0.19 release readiness — 98.1%

  • Milestone at 423/431 (98.1%), 8 open issues. Up from 418/423 (98.8%, 5 open) on May 10. Five issues closed, three new issues added.
  • The release is gated on the GPU visibility range culling decision (#24252). If the revert is merged, 0.19 can ship immediately.

GPU visibility range culling — potential revert (watch)

  • #24252 (kfc35, May 11, open/approved): Revert of #23115. If merged, removes GPU visibility range culling from 0.19 to avoid shadow regressions. This is the pragmatic choice approved by JMS55 and Zeophlite.
  • Migration impact: If the revert happens, any code relying on GPU visibility range culling (NoCpuCulling + VisibilityRange) will fall back to CPU culling. No action needed for most projects unless explicitly using the GPU culling path.

Flickering shadows fix (no migration impact)

  • #24216 (JMS55, May 12): Rendering correctness fix for Windows 11 Vulkan. No API change.

Updated practical checklist

  • **Monitor 24252 — if the GPU culling revert merges, 0.19 will likely ship within 24-48 hours.
  • Shadow pass split migration guide is now available — review if using custom shadow rendering.
  • No urgent action items for ZoOL’s projects from this 3-day window.

2026-05-14 additions

🚨 Bevy 0.19.0-rc.1 Released — test now

  • v0.19.0-rc.1 published May 13 by mockersf. All migration-sensitive changes tracked on this page are now testable against the RC.
  • Known rc.1 compilation issue: bevy_settings fails to compile (#24282). Awaiting fix before full release.
  • Crates.io naming conflict: bevy-settings crate cannot be renamed to bevy_settings (#24279). SME-blocked.

GPU visibility range culling REVERTED (0.19)

  • #24252 MERGED (kfc35, May 13). Rolls back #23115. If projects explicitly used GPU visibility range culling (NoCpuCulling + VisibilityRange), they will fall back to CPU culling in 0.19. Future partial re-introduction planned for 0.20.
  • Migration impact: Low for most projects. Only affects code explicitly using GPU visibility range culling.

RenderGraph now in bevy_render::prelude

  • #24265 MERGED (kfc35, May 13). RenderGraph is now exported from bevy_render::prelude. Projects that imported it from a deeper path can simplify their imports.
  • Migration: No breakage — additive. Simplify import paths if desired.

FXAA/SMAA systems public (additive)

  • #24225 MERGED (komadori, May 13). FXAA and SMAA system symbols are now public. Users can apply ordering constraints.
  • Migration: Additive — no breakage. Only relevant for projects customizing AA system ordering.

Updated practical checklist

  • Test against 0.19.0-rc.1 NOW — all tracked breaking changes are in the RC.
  • **Watch 24282bevy_settings compilation issue may need a patch before full release.
  • GPU culling revert — if using NoCpuCulling + VisibilityRange, verify behavior falls back correctly to CPU culling.
  • Simplify RenderGraph imports — now in bevy_render::prelude.

2026-05-15 additions

pcwalton’s shadow visibility range fix — watch for potential GPU culling un-revert

  • #24289 (pcwalton, May 14, S-Needs-Review) introduces ShadowLodOrigin component. If this merges into 0.19, the team may un-revert #23115 (GPU visibility range culling), restoring the feature with correct semantics.
  • Migration impact if un-reverted: Projects using VisibilityRange + NoCpuCulling would get GPU culling back. New ShadowLodOrigin component is additive — no breakage unless code conflicts with the new component name.
  • If deferred to 0.20: The revert (#24252) stands for 0.19. GPU culling returns in 0.20 with pcwalton’s fix.
  • Key new concepts: ShadowLodOrigin (customizable shadow LOD origin), lod_view_world_position (GPU View uniform field).

SelectAllOnFocus — new opt-in UI behavior (in merge queue)

  • #24278 (ickshonpe, approved). Text input no longer select-all on focus by default. Must add SelectAllOnFocus component.
  • Migration: If projects relied on automatic select-all-on-focus, add SelectAllOnFocus component to text input entities.

TextLayout migration guide incoming

  • #24286 (urben1680, approved). Community-contributed migration guide for TextLayout constructor renames. Fills a gap in the 0.19 migration documentation.

RC-blocking: crates.io naming conflict

  • #24279bevy-settings crate cannot be renamed on crates.io. SME-blocked, awaiting crates.io team response.
  • #24282bevy_settings compilation failure in rc.1 (trivial fix, not yet implemented).
  • These two issues are the effective release gate for 0.19 final.

Updated practical checklist

→ **Watch 24289 — if ShadowLodOrigin merges, GPU culling may return in 0.19. → Prepare for SelectAllOnFocus — if #24278 merges, add SelectAllOnFocus component to text inputs that need select-all behavior. → RC is NOT production-readybevy_settings fails to compile. Wait for rc.2 or test with the fix applied locally. → Audit bevy_ui_render feature flag — if your project opts out of default-features and manually selects features, verify "bevy_ui_render" is listed alongside "bevy_ui". See bevy-0-19-ui-feature-modularization for full diagnosis flow.

2026-05-16 additions

Solari BRDF — no migration impact

  • #24243 is a rendering-internal fix (Solari BRDF layering). No API changes visible to user code. No migration action needed.

Milestone update

  • 0.19 milestone: 434/445 (97%), 11 open. Two new issues: #24306 (selection rect gap), #24309 (.bsn docs cleanup).
  • Still blocked on SME decisions for #24279 (crates.io naming) and #24275 (tileset y-axis).

.bsn docs issue worth noting

  • #24309 (laundmo): requests removal or warning about .bsn asset format references in 0.19 docs. The .bsn file format is not yet supported — only bsn! macros. If your docs or tutorials mention .bsn files, audit them.

Updated practical checklist (May 16)

→ **Watch 24289 — if ShadowLodOrigin merges, GPU culling may return in 0.19. → Prepare for SelectAllOnFocus — if #24278 merges, add SelectAllOnFocus component to text inputs that need select-all behavior. → RC is NOT production-readybevy_settings fails to compile. Wait for rc.2. → Audit .bsn references — ensure docs/tutorials don’t promise .bsn file support (not in 0.19). → Audit bevy_ui_render feature flag — if your project opts out of default-features, verify "bevy_ui_render" is listed alongside "bevy_ui".

2026-05-16 additions

#24309 — .bsn asset format documentation warnings (0.19 milestone)

  • Issue #24309 (laundmo, May 15) requests removing or warning about .bsn asset format mentions in 0.19 docs. alice-i-cecile decided to add warnings everywhere rather than remove references, as the examples are essential for the BSN mental model.
  • Migration impact: None for code. Documentation-only change.

#24311 — UiGlobalTransform incorrect with padding (watch, C-Bug)

  • Issue #24311 (ehllie, May 15) reports UiGlobalTransform returning incorrect positions when padding, margin, border, or preceding siblings are present. The min bound of a node incorrectly affects translation.
  • Migration impact: If a fix lands in 0.19, projects using UiGlobalTransform to position world-space objects relative to UI nodes should retest. Reproduced on Bevy 0.18.1 macOS Metal.

Updated practical checklist

→ **Watch 24309 — .bsn docs warnings incoming, no code impact. → **Watch 24311 — UiGlobalTransform bug may affect projects that overlay world entities on UI nodes. → No rc.2 yet — the RC-blocking issues (#24282, #24279) remain unresolved.

2026-05-17 additions

No migration-relevant changes

  • 0 merged PRs since May 16. Merge train remains frozen. No new API changes to track.
  • 0.19 milestone: 434/446 (97.3%), 12 open. No rc.2 or 0.19 final yet.

#24320 — ScenePatchInstance + bsn! bug (watch, no migration action)

  • ScenePatchInstance fails silently when spawning via bsn! macro. The scene doesn’t spawn and no error is emitted. Works with Commands::spawn.^[https://github.com/bevyengine/bevy/issues/24320]
  • Migration impact: None unless you’re using queue_spawn_scene with bsn!. If so, test your scene spawning and consider using Commands::spawn as a workaround.

Updated practical checklist (May 17)

→ **Watch 24289 — if ShadowLodOrigin merges, GPU culling may return in 0.19. → Prepare for SelectAllOnFocus — if #24278 merges, add SelectAllOnFocus component to text inputs that need select-all behavior. → RC is NOT production-readybevy_settings fails to compile. Wait for rc.2. → Audit .bsn references — ensure docs/tutorials don’t promise .bsn file support (not in 0.19). → Test ScenePatchInstance + bsn! — if using queue_spawn_scene with BSN, verify your scenes actually spawn. → No rc.2 yet — the RC-blocking issues (#24282, #24279) remain unresolved.

2026-05-18 additions

#24174 — BSN EntityTemplate in scene functions (additive, no breakage)

  • #24174 MERGED (laundmo, May 17). Enables passing EntityTemplate into scene functions and Scene Component @props.^[https://github.com/bevyengine/bevy/pull/24174]
  • Migration impact: Additive — no existing code breaks. Projects using BSN can now leverage entity name references in scene function parameters. If you have scene functions that previously could not receive entity references, refactor to use the new EntityTemplate parameter type.

#24336 — bsn! macro gains const/unsafe support (0.19 milestone)

  • #24336 (pcwalton, 0.19 milestone, open). Adds const and unsafe block support inside bsn! macro.^[https://github.com/bevyengine/bevy/pull/24174]
  • Migration impact: Additive if merged — no existing code breaks. Enables embedding const expressions and unsafe blocks in bsn! bodies. Low-level patterns become expressible.

0.19 milestone status

  • 435/449 (96.9%), 14 open. Milestone scope continues expanding. No rc.2 or 0.19 final yet.
  • SME-blocked items unchanged: #24279 (crates.io naming), #24275 (tileset y-axis).

Updated practical checklist (May 18)

BSN EntityTemplate now available — if using scene functions with entity references, upgrade to test the new EntityTemplate parameter type. → **Watch 24336 — bsn! const/unsafe support may expand macro capabilities. → **Watch 24289 — if ShadowLodOrigin merges, GPU culling may return in 0.19. → Prepare for SelectAllOnFocus — if #24278 merges, add SelectAllOnFocus component to text inputs. → RC is NOT production-readybevy_settings fails to compile. Wait for rc.2. → No rc.2 yet — the RC-blocking issues (#24282, #24279) remain unresolved.

2026-05-19 additions

#24289 — ShadowLodOrigin merged (new component, additive)

  • #24289 MERGED (pcwalton, May 18). Introduces ShadowLodOrigin component for shadow map visibility range resolution.^[https://github.com/bevyengine/bevy/pull/24289]
  • Migration impact: Additive — no existing code breaks. The new ShadowLodOrigin component is opt-in. New GPU View uniform field lod_view_world_position.
  • This merge paves the way for #24343 (re-apply GPU-driven HLOD evaluation). If #24343 also merges, GPU visibility range culling (#23115) is effectively un-reverted in 0.19.

#24274 — bevy_text index types: usize → u32 (breaking)

  • #24274 MERGED (ickshonpe, May 19). Line and section indices in bevy_text changed from usize to u32.^[https://github.com/bevyengine/bevy/pull/24274]
  • Migration: If code stores or passes these indices as usize, adjust to u32. Check for truncation in conversions. Generally a straightforward type change.

0.19 milestone status

  • 436/450 (96.9%), 14 open. Up from 435/449 on May 18.
  • #24343 (pcwalton’s GPU-driven HLOD re-application) added to milestone and ready for final review.
  • Still no rc.2 or 0.19 final.

Updated practical checklist (May 19)

ShadowLodOrigin now available — evaluate if your project uses visibility ranges + shadows. The new ShadowLodOrigin component enables correct shadow LOD behavior. → **Watch 24343 — if GPU-driven HLOD re-applies, GPU visibility range culling returns to 0.19. → Audit bevy_text index usage — if storing text line/section indices as usize, change to u32. → Prepare for SelectAllOnFocus — if #24278 merges, add SelectAllOnFocus component to text inputs. → RC is NOT production-readybevy_settings fails to compile. Wait for rc.2. → No rc.2 yet — RC-blocking issues (#24282, #24279) remain unresolved.

2026-05-20 additions

#24343 — GPU-driven HLOD re-applied (no migration impact)

  • #24343 MERGED (pcwalton, May 19). Restores GPU visibility range culling (#23115) with the correct ShadowLodOrigin semantics. The #24252 revert has been undone.^[https://github.com/bevyengine/bevy/pull/24343]
  • Migration impact: Low — additive restoration. Projects using --no-cpu-culling + VisibilityRange will get GPU culling back automatically. Shadow LOD behavior is now correct.

#24352 — RenderShadowLodOrigin crash without PBR (breaking regression)

  • #24352 (laundmo, May 19, P-Crash, 0.19 milestone). 2D apps or custom feature sets that omit bevy_pbr will panic because bevy_render requires RenderShadowLodOrigin unconditionally.^[https://github.com/bevyengine/bevy/issues/24352]
  • Migration impact: If your project uses bevy_render without bevy_pbr (e.g. 2D feature set), this is a crash regression introduced by #24289. Workaround: include bevy_pbr feature until the fix lands.
  • Fix pending — no PR opened yet.

Updated practical checklist (May 20)

GPU-driven HLOD is back — no action needed; --no-cpu-culling + VisibilityRange works again with correct shadow LOD. → **2D apps: watch 24352 — if using bevy_render without bevy_pbr, add bevy_pbr as a workaround until the fix lands. → Watch pixel_grid_snap — #24350 reports incorrect rounding in the pixel-perfect example. Retest if using bevy-pixel-perfect-rendering. → ShadowLodOrigin now available — evaluate for projects using visibility ranges + shadows. → Audit bevy_text index usage — if storing text line/section indices as usize, change to u32. → Prepare for SelectAllOnFocus — if #24278 merges, add SelectAllOnFocus component to text inputs. → RC is NOT production-readybevy_settings fails to compile + #24352 crash regression. Wait for rc.2. → No rc.2 yet — RC-blocking issues (#24282, #24279, #24352) remain unresolved.

2026-05-21 additions

#24359 — RenderShadowLodOrigin crash FIXED (2D apps safe again)

  • #24359 MERGED (pcwalton, May 20, P-Crash). The #24352 crash regression is fixed. RenderShadowLodOrigin is now optional during View construction — 2D apps and custom feature sets that omit bevy_pbr no longer panic.^[https://github.com/bevyengine/bevy/pull/24359]
  • Migration impact: No action needed — this is a crash fix. If you added bevy_pbr as a workaround for #24352, it’s safe to remove (but no harm keeping it).

#24317 — bevy_settings renamed to bevy-settings (rc.1 blocker resolved)

  • #24317 MERGED (mockersf, May 20). The crate/directory is renamed from bevy_settings to bevy-settings.^[https://github.com/bevyengine/bevy/pull/24317]
  • **Closes 24282 (compile failure) and **resolves 24279 (crates.io naming). Both rc.1 blockers are now resolved.
  • Migration impact: Cargo normalizes - to _, so bevy_settings feature flag references continue to work. No user action needed.

#24336 — bsn! const/unsafe block support (additive)

  • #24336 MERGED (loreball, May 20). const and unsafe blocks now work inside bsn! macro field expressions.^[https://github.com/bevyengine/bevy/pull/24336]
  • Migration impact: Additive — no existing code breaks. New capability for low-level patterns.
  • async blocks were attempted but removed — async futures are unnamable and can’t satisfy Clone + Default.

#24322 — require attribute in Resource derive (additive)

  • #24322 MERGED (musjj, May 20). The require attribute is now available in Resource derive macro.^[https://github.com/bevyengine/bevy/pull/24322]
  • Migration impact: Additive — no existing code breaks. Resources can now use #[require(...)] like components.

Updated practical checklist (May 21)

rc.1 blockers ALL RESOLVED — #24282 ✅, #24279 ✅, #24352 ✅. Expect rc.2 soon. → 2D apps are safe — the crash regression is fixed. No need for bevy_pbr workaround. → bevy_settingsbevy-settings — transparent to users. Feature flags unchanged. → bsn! now supports const/unsafe — evaluate if any BSN patterns need these. → Resource derive gains require — if using resources that need component requirements, #[derive(Resource)] now supports #[require(...)]. → Still waiting for rc.2 — 9 open items remain, mostly UI/Text fixes.

2026-05-22 additions

#24367 — BSN prefix overhaul (BREAKING)

  • #24367 MERGED (laundmo, May 21, D-Macros). Complete BSN prefix redesign.^[https://github.com/bevyengine/bevy/pull/24367]
  • Migration: Every bsn! invocation needs syntax review:
    • @TemplateName~TemplateName (template patching uses tilde)
    • :SceneComponentName@SceneComponentName (SceneComponent uses at-sign)
    • : alone now means “cacheable”, not “inheritance” — terminology is now “include”/“included”
    • Caching NOT yet enabled — this is API-only preparation
  • Breaking for all existing BSN code. Run cargo check after upgrading; compiler errors will flag every syntax mismatch.

#24245 — TextLayoutInfo scale_factor centralization (behavior change)

  • #24245 MERGED (ickshonpe). TextLayoutInfo::size now in physical pixels (was logical). scale_factor set by layout function, not callers.^[https://github.com/bevyengine/bevy/pull/24245]
  • Migration: Code that reads TextLayoutInfo::size may get different pixel values. Code that manually sets scale_factor should remove those lines.
  • ⚠️ Known regression #24384: multi_window_text example broken. Milestone 0.20, no fix yet.

#24323 — FixedNode new UI component (additive, worth knowing)

  • #24323 MERGED (ickshonpe, May 21, A-UI, M-Release-Note). New FixedNode marker component for viewport-relative UI positioning.^[https://github.com/bevyengine/bevy/pull/24323]
  • Migration: Additive — no existing code breaks. To use: add FixedNode component (requires Node + OverrideClip). Primary use case: modal dialogs portaled from deep hierarchy. Closes #9564.
  • Naming: Alternatives considered (WindowRelative, PinnedNode, RootNode) — FixedNode chosen as pragmatic default.

Spotlight shadow basis reconstruction fix (no migration impact)

  • Rendering correctness fix for spotlight shadows. No API change.

Premultiplied Alpha for OIT (no migration impact)

  • Bug fix for order-independent transparency. No API change.

Updated practical checklist (May 22)

BSN syntax migration REQUIRED — audit all bsn! invocations: @Template~Template, :SceneComponent@SceneComponent, : = cacheable. → TextLayoutInfo size changed — now in physical pixels; retest any UI layout code that reads TextLayoutInfo::size. → multi_window_text regression — #24384 is open. If using multi-window + text, test carefully. → Still waiting for rc.2 — 10 open items remain in 0.19 milestone. → Milestone: 462/472 (97.9%) — rc.2 should be very close.

2026-05-23 additions

v0.19.0-rc.2 released

#24389 — Skybox render-world cleanup (no migration impact)

#24278 — SelectAllOnFocus now opt-in (behavior change for text input)

  • Single-line text inputs no longer automatically select all text on focus.^[https://github.com/bevyengine/bevy/pull/24278]
  • Migration: If projects expect the old auto-select-all behavior, add SelectAllOnFocus component to each text input entity explicitly.
  • Breaking: Any code that relied on implicit select-all on focus will need the component added.

#24382 — bevy_reflect opaque generic type info (no migration impact)

#24276 — 0.19 release branch created

  • Release content cleared from main. 0.19 has its own branch; main targets 0.20.^[https://github.com/bevyengine/bevy/pull/24276]
  • Migration impact: Development continues on both branches. Hotfixes for 0.19 go to the release branch; new features go to main (0.20).

Updated practical checklist (May 23)

Upgrade to rc.2 — all rc.1 blockers resolved. Safe to test projects. → Add SelectAllOnFocus — if text inputs relied on implicit select-all behavior, add the component. → Test skybox removal — if code dynamically adds/removes Skybox, verify render-world cleanup works. → 0.19 milestone: 466/474 (98%) — 8 open items, all non-blocking. 0.19 final is imminent.

2026-05-24 additions

#24392 — AssetId::invalid() deprecated (migration required)

  • AssetId::<T>::invalid() is now deprecated. Replace with AssetId::<T>::default().
  • Migration: Search for AssetId::invalid() across codebase and replace with AssetId::default(). The old function still compiles but emits deprecation warnings.
  • Progresses #19024 (removing UUID handles).
  • Timeline gap: No hard removal date set — this is a soft deprecation. Track #19024 for when AssetId::invalid() will be fully removed. Deprecation does not block compilation.

#24345 — plugin_group! @fn block (no migration impact for existing code)

  • plugin_group! macro now accepts @fn block for function plugins.
  • Migration impact: None for existing code. New feature only.

#24399 — Text2d size fix (fixes #24384 regression)

  • Fixes the multi_window_text regression from #24245 (TextLayoutInfo scale_factor change).
  • Migration impact: None — bug fix. If code was working around the #24384 regression, the workaround can be removed.
  • ⚠️ Physical vs logical: #24245 stores TextLayoutInfo::size in physical pixels, but text2d bounds now use logical size after #24399. When reading TextLayoutInfo::size directly in custom rendering code, multiply by inverse scale factor for anchor calculations.

Updated practical checklist (May 24)

Upgrade to rc.2 — all rc.1 blockers resolved. Safe to test projects. → Add SelectAllOnFocus — if text inputs relied on implicit select-all behavior, add the component. → Replace AssetId::invalid() — search and replace with AssetId::default() to clear deprecation warnings. → Test skybox removal — if code dynamically adds/removes Skybox, verify render-world cleanup works. → 0.19 milestone: 466/478 (97.5%) — 12 open items. 0.19 final is imminent.

2026-05-25 additions

Milestone update — no new merges, scope expanded slightly

  • 0.19 milestone: 466/480 (97%), 14 open issues. Up from 466/478 (97.5%, 12 open) on May 24.^[https://github.com/bevyengine/bevy/milestone/40]
  • No new merged PRs since May 23 — no new migration items today.
  • New milestone items: “Immutable resources need a migration guide” + “Immutable Resources fix” — both related to #24164 (resource hooks & immutable resources, merged May 9).

Updated practical checklist (May 25)

Upgrade to rc.2 — all rc.1 blockers resolved. Safe to test projects. → Add SelectAllOnFocus — if text inputs relied on implicit select-all behavior, add the component. → Replace AssetId::invalid() — search and replace with AssetId::default() to clear deprecation warnings. → Test skybox removal — if code dynamically adds/removes Skybox, verify render-world cleanup works. → Watch Immutable Resources migration guide — #24164 landed without migration docs. When the guide arrives, review for breaking changes. → 0.19 milestone: 466/480 (97%) — 14 open items, no critical blockers. 0.19 final is imminent.

2026-05-26 additions

Milestone update — scope grows, progress drops below 97%

  • 0.19 milestone: 466/485 (96%), 19 open. Down from 466/480 (97%, 14 open) on May 25. 5 new items added, 0 closed. Progress dropped for the first time — new issues are being filed faster than existing ones are resolved.^[https://github.com/bevyengine/bevy/milestone/40]
  • No new merged PRs since May 23 — no new migration items today.
  • New rc.2 regressions filed:
  • #24429 — Scale gizmo breaks when target scaled to 0 (editor/debug workflow).
  • #24431 — Transform gizmo local space snapping unusable (editor/debug workflow).

Open PRs in pipeline with potential migration impact

  • #24404 (kristoff3r) — Rename SortedRenderPhase::add to add_retained. If merged, this is a breaking API change for custom render pipeline code.
  • #24406 (eugineer2) — Add RelationshipHookMode argument to BundleWriter::write. Could affect ECS relationship code.
  • #24424 (Trashbalk217) — Immutable Resources fix. May require adjustments if you already migrated to the immutable resources API from #24164.
  • #24440 (hxYuki) — Replace unnecessary FromTemplate with Default + Clone. May affect template/scene code.

Updated practical checklist (May 26)

Upgrade to rc.2 — all rc.1 blockers resolved. Safe to test projects. → Add SelectAllOnFocus — if text inputs relied on implicit select-all behavior, add the component. → Replace AssetId::invalid() — search and replace with AssetId::default() to clear deprecation warnings. → Test skybox removal — if code dynamically adds/removes Skybox, verify render-world cleanup works. → Watch Immutable Resources migration guide — #24164 landed without migration docs. When the guide arrives, review for breaking changes. → Test gizmo interactions — rc.2 has two known gizmo regressions (#24429, #24431). If using editor/debug gizmos, verify they work in rc.2. → 0.19 milestone: 466/485 (96%) — 19 open items. 0.19 final may be delayed.

2026-05-27 migration watch

  • No new migration-sensitive changes — only 2 doc typo fixes merged (#24458, #24439). No API changes.
  • ⚠️ #24448 — Performance Regression under investigation. New regression reported against 0.19. If confirmed and caused by a merged PR, it could trigger a revert that affects migration. Watch for updates.^[https://github.com/bevyengine/bevy/issues/24448]
  • #24456 — TAA/CAS nodes going public. If you have custom render pipeline code that wraps TAA or CAS, this PR (once merged) will let you reference the official nodes directly instead of reimplementing.^[https://github.com/bevyengine/bevy/pull/24456]
  • 0.19 milestone: 466/489 (~95.3%), 23 open. Scope continues to grow without closures.

Updated practical checklist (May 27)

Upgrade to rc.2 — all rc.1 blockers resolved. Safe to test projects. → Add SelectAllOnFocus — if text inputs relied on implicit select-all behavior, add the component. → Replace AssetId::invalid() — search and replace with AssetId::default() to clear deprecation warnings. → Test skybox removal — if code dynamically adds/removes Skybox, verify render-world cleanup works. → Watch Immutable Resources migration guide — #24164 landed without migration docs. When the guide arrives, review for breaking changes. → Test gizmo interactions — rc.2 has two known gizmo regressions (#24429, #24431). If using editor/debug gizmos, verify they work in rc.2. → Monitor #24448 (performance regression) — if confirmed, may require project-level profiling before 0.19 upgrade.

2026-05-29 additions

#24404 — SortedRenderPhase::add renamed to add_retained (BREAKING)

  • #24404 MERGED (kristoff3r, A-Rendering, D-Straightforward). SortedRenderPhase::add renamed to add_retained.^[https://github.com/bevyengine/bevy/pull/24404]
  • Migration: Search for SortedRenderPhase usage and replace .add(...) with either:
    • .add_retained(...) — items persist until manually removed (new default behavior from #22966)
    • .add_transient(...) — items cleared at end of frame (old add behavior)
  • Why this matters: The add method silently changed semantics in #22966. Old code that expected frame-cleared items would instead see them persist — a subtle behavioral bug with no compiler warning. This rename forces a compile error so developers make an explicit choice.
  • Migration guide updated in #24408.

#24424 — Immutable Resources API additions (additive, but review needed)

  • #24424 MERGED (Trashtalk217, A-ECS). Adds new APIs for working with immutable resources:^[https://github.com/bevyengine/bevy/pull/24424]
    • UnsafeWorldCell::get_resource_mut_assume_mutable<R>() -> Option<Mut<'w, R>>
    • World::modify_resource
    • World::modify_resource_by_id
  • Migration impact: Additive — no existing code breaks. If projects already migrated to the immutable resources API from #24164 and hit the missing mutable access methods, this PR fills those gaps.
  • Migration guide text proposed in the PR for the resources_as_components migration guide.

#24405 — SystemParam for SmallVec (additive)

  • #24405 MERGED (Shatur, A-ECS, C-Usability). SmallVec<[T; N]> now implements SystemParam.^[https://github.com/bevyengine/bevy/pull/24405]
  • Migration impact: Additive — no existing code breaks. If projects need variable-length system parameters without heap allocation, replace Vec<T> with SmallVec<[T; N]> in system signatures.

#24440 — FromTemplate → Default + Clone (potential impact on template code)

  • #24440 MERGED (hxYuki, A-Scenes). Replaces FromTemplate derives with Default + Clone on TilemapChunkTileData and ScrollbarThumb.^[https://github.com/bevyengine/bevy/pull/24440]
  • Migration impact: If code relied on FromTemplate being implemented by these specific types, switch to Default trait bounds. The documentation now recommends Default + Clone when component construction doesn’t reference world/spawn context.

Other merged PRs (no migration impact)

  • #24472 — bevy_ui_widgets dependency fix. Bug fix only.
  • #24456 — TAA/CAS nodes public. Additive — no breakage.
  • #24433 — DiagnosticsOverlay moved to PreStartup. Bug fix only.
  • #24408 — Change list migration guide update. Documentation only.

Performance regression #24448 — root cause confirmed

  • Root cause bisected to commit 894d8d7 from PR #23481 (GPU bin unpacking).^[https://github.com/bevyengine/bevy/issues/24448]
  • If a revert or fix lands, it could affect code using GPU-driven rendering paths. No action needed yet — monitor for resolution.
  • Status: S-Waiting-on-SME.

Updated practical checklist (May 29)

🔥 NEW: Audit SortedRenderPhase usage — search for .add() calls on SortedRenderPhase and replace with .add_retained() or .add_transient(). This is a compile-breaking change. → Upgrade to rc.2 — all rc.1 blockers resolved. Safe to test projects. → Add SelectAllOnFocus — if text inputs relied on implicit select-all behavior, add the component. → Replace AssetId::invalid() — search and replace with AssetId::default() to clear deprecation warnings. → Test skybox removal — if code dynamically adds/removes Skybox, verify render-world cleanup works. → Watch Immutable Resources migration guide — #24164 now has the fix (#24424) and proposed guide text. Review when merged into release branch. → Test gizmo interactions — rc.2 has two known gizmo regressions (#24429, #24431). If using editor/debug gizmos, verify they work in rc.2. → Monitor #24448 (performance regression) — root cause confirmed (GPU bin unpacking). Awaiting SME decision. If fix involves API change, will add to checklist. → 0.19 milestone: 480/495 (~97.0%) — 15 open items. First progress day in a week.

2026-05-30 additions

#24406 — BundleWriter gains RelationshipHookMode (additive, ECS advanced usage)

  • #24406 MERGED (eugineerd, A-ECS). Adds BundleWriter::write_with_relationship_hook_insert_mode method.^[https://github.com/bevyengine/bevy/pull/24406]
  • Migration impact: Additive — no existing code breaks. The original BundleWriter::write signature is unchanged. Only relevant for projects that use BundleScratch to batch-write bundles with relationships on existing entities (e.g. entity cloning). If RelationshipHookMode::Run was causing ordering issues in RelationshipTarget, switch to the new method with RunIfNotLinked.
  • Future: EntityCloner will eventually be ported to use this API.

#24407 — False positive morph target error removed (no migration impact)

  • #24407 MERGED (kristoff3r, A-Diagnostics). Removes spurious error log when unloading meshes without morph targets.^[https://github.com/bevyengine/bevy/pull/24407]
  • Migration impact: None — removes noise only. If code was filtering this error log, the filter will no longer trigger.

#24473 — BSN caching syntax compile error (BSN code may need adjustment)

  • #24473 MERGED (laundmo, A-Scenes). BSN macro now throws a compile error when caching syntax is used on unsupported scene entries.^[https://github.com/bevyengine/bevy/pull/24473]
  • Migration impact: If any bsn! code uses caching syntax (: prefix) on entries that don’t support it, the code will now fail to compile with an error message. Remove the caching syntax from those entries. Caching is NOT yet enabled — this is validation-only.
  • Related upstream Rust issue: rust-lang/rust#141258 (error message ergonomics).

#24486 — Transform gizmo local snapping fix (no migration impact)

  • #24486 MERGED (bugsweeper, A-Gizmos). Fixes #24431 — transform gizmo local-space translation snapping.^[https://github.com/bevyengine/bevy/pull/24486]
  • Migration impact: None — bug fix only. If code worked around the broken snapping, the workaround is no longer needed.

Updated practical checklist (May 30)

🔥 NEW: Audit SortedRenderPhase usage — search for .add() calls on SortedRenderPhase and replace with .add_retained() or .add_transient(). This is a compile-breaking change. → 🔥 NEW: Check BSN caching syntax — if any bsn! code uses : (caching) on unsupported entries, it will now fail to compile. Remove unsupported caching. → Upgrade to rc.2 — all rc.1 blockers resolved. Safe to test projects. → Add SelectAllOnFocus — if text inputs relied on implicit select-all behavior, add the component. → Replace AssetId::invalid() — search and replace with AssetId::default() to clear deprecation warnings. → Test skybox removal — if code dynamically adds/removes Skybox, verify render-world cleanup works. → Watch Immutable Resources migration guide — #24164 now has the fix (#24424) and proposed guide text. Review when merged into release branch. → Test gizmo interactions — rc.2 gizmo regression #24431 is now FIXED. #24429 (scale gizmo at scale 0) remains open. → Monitor #24448 (performance regression) — root cause confirmed (GPU bin unpacking). Awaiting SME decision. If fix involves API change, will add to checklist. → Evaluate BundleWriter::write_with_relationship_hook_insert_mode — if using BundleScratch with relationships on existing entities, the new method provides correct ordering. → 0.19 milestone: 485/497 (~97.6%) — 12 open items. Second consecutive net-closure day.

2026-06-01 additions

#24402 — BSN #{expr} name expressions REMOVED (breaking)

  • #24402 MERGED (laundmo, May 31, 0.19). As part of fixing the entity deduplication bug, #{expr} name expressions were removed entirely from BSN.^[https://github.com/bevyengine/bevy/pull/24402]
  • Migration: Any code using #{format!(...)} or #{name} in bsn! must be rewritten:
    • bsn! { #{format!("Foo{x}")} }bsn! { Name({format!("Foo{x}")}) }
    • bsn! { #{name} Children [ widget(#{name}) ] }bsn! { #Root Name({name}) Children [ widget(#Root) ] }
  • Reason: Cart argued #Name and #{expr} were not semantically equivalent, breaking Rust-like intuition. Name expressions added complexity and runtime cost with acceptable workarounds.

#24087 — SystemIdTemplate (additive, no migration impact)

  • #24087 MERGED (ItsDoot, Jun 1). New SystemIdTemplate type for passing SystemId into bsn! scene templates.^[https://github.com/bevyengine/bevy/pull/24087]
  • Migration impact: Additive — no existing code breaks. If code uses Commands::register_system() in Bundle constructors, evaluate migrating to SystemIdTemplate + bsn!.

#24477 — Scale gizmo snap minimum (no migration impact)

  • #24477 MERGED (kfc35, May 31, 0.19). Fixes #24429 — scale gizmo at scale 0.^[https://github.com/bevyengine/bevy/pull/24477]
  • Migration impact: None — bug fix only. Behavior change: snapped scale values now have a minimum of snap_scale, but this prevents degenerate transforms.

#24381 — VisibilityRange stable buffer indices (no migration impact)

  • #24381 MERGED (stuartparmenter, May 31, 0.19). GPU HLOD correctness fix.^[https://github.com/bevyengine/bevy/pull/24381]
  • Migration impact: None — internal rendering fix. No public API or shader changes. If code used workarounds (forcing NoIndirectDrawing or calling set_changed on Mesh3d), those workarounds are no longer needed.

Updated practical checklist (Jun 1)

🔥 NEW: Remove #{expr} name expressions from BSN — search bsn! code for #{...} syntax and replace with Name({...}) or #Root patterns. This is a compile-breaking change if used. → Evaluate SystemIdTemplate — if code registers systems in Bundle constructors, consider migrating to SystemIdTemplate + bsn! scenes. → Retest GPU HLOD / VisibilityRange — if code had workarounds for mesh vanishing (forcing NoIndirectDrawing), those are no longer needed. → Gizmo regressions both fixed — #24431 and #24429 are both resolved. No gizmo workarounds needed. → Audit SortedRenderPhase usage — search for .add() calls on SortedRenderPhase and replace with .add_retained() or .add_transient(). → Check BSN caching syntax — if any bsn! code uses : (caching) on unsupported entries, it will fail to compile. → Upgrade to rc.2 — all rc.1 blockers resolved. rc.2 is safe for testing. → 0.19 milestone: 492/499 (~98%) — 7 open items. Very close to release.