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_sceneregression (#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
SceneComponenttrait + 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 ofcommands.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, notbevy_ecs; new dependency onbevy_ecs_macro_logicfor reusable derive logic. - Static enforcement of “never spawn scene component without scene” deferred to 0.20.
EditableText API breaking change
TextLayoutInfo::cursortype 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::cursormust be updated.
Dynamic light shadow rendering fixed
ExtractedViewandFrustumnow update correctly whenExtractedPointLightchanges (#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_feathersrenamed tobevy_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_featherstobevy_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 toEntityCommands::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,WindowScaleFactorChangednow correctly delivered asWindowEventvariants (#24046). Previously these were only available via dedicatedMessageReader<WindowResized>etc. If code was matching onWindowEventvariants 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
ToolButtonrenamed toFeathersToolButton(#24098) for consistency with other widgets. Simple find-and-replace migration.
Handle from_reflect bug fix
Handle<T>::from_reflectwas incorrectly instantiating handles regardless ofTtype (#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 theDespawnWhenpattern.- 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_cursorto 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_cursorfeature references.
Quit on RenderErrors (watch for 0.19 default change)
- PR #24131 (kfc35, 0.19) proposes quitting the application on any
RenderErrorby 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_blurexample (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
CoreScrollbarDragStateandCoreSliderDragStateduring the next dependency bump. - Review local ECS helper utilities to see whether
insert_if_neqmakes 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()andand(). - Evaluate SceneComponent (#24008) for any project that manually ties components to scenes. Plan migration to
#[derive(SceneComponent)]. - Update
TextLayoutInfo::cursorusage — type changed fromOption<Rect>toOption<(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_feathers→bevy_feathersin 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>ANDWindowEventmatching, consolidate to one approach to avoid duplicate events. - Replace custom resource-if-neq helpers —
Commands::insert_resource_if_neqis 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
Ignoreto quitting on anyRenderError. - 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
EnvironmentMapUniformand stores view environment map rotation inLightProbesUniform. - Migration: If projects directly reference
EnvironmentMapUniform, update to useLightProbesUniforminstead. Migration guide included in the PR.
ImageNode — OverflowClipMarginBox renamed to VisualBox (breaking)
- PR #24154 (ickshonpe) renames
OverflowClipMarginBoxtoVisualBoxand adds avisual_boxfield toImageNode. - Migration: Grep for
OverflowClipMarginBoxand replace withVisualBox.
Disable/Enable now recursive over Children (bug fix)
- PR #24158 (Freyja-moth, 0.19) fixes #24142: entity disabling/enabling now recurses over
Childrenhierarchy. - Migration: No action needed — this is a correctness fix. Previously,
Disabledwas 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_resourceand replace with the recommended alternative (likelyWorld::init_resourceor 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(), andupdate_cpu_culled_entities()public onRenderVisibleEntitiesClass. - 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_clampedtoAnimationClipandAnimationCurvetrait. - 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_settingsfails to compile (#24282). Awaiting fix before full release. - Crates.io naming conflict:
bevy-settingscrate cannot be renamed tobevy_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).
RenderGraphis now exported frombevy_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 24282 —
bevy_settingscompilation 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
ShadowLodOrigincomponent. 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+NoCpuCullingwould get GPU culling back. NewShadowLodOrigincomponent 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
SelectAllOnFocuscomponent. - Migration: If projects relied on automatic select-all-on-focus, add
SelectAllOnFocuscomponent to text input entities.
TextLayout migration guide incoming
- #24286 (urben1680, approved). Community-contributed migration guide for
TextLayoutconstructor renames. Fills a gap in the 0.19 migration documentation.
RC-blocking: crates.io naming conflict
- #24279 —
bevy-settingscrate cannot be renamed on crates.io. SME-blocked, awaiting crates.io team response. - #24282 —
bevy_settingscompilation 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
SelectAllOnFocuscomponent to text inputs that need select-all behavior. → RC is NOT production-ready —bevy_settingsfails to compile. Wait for rc.2 or test with the fix applied locally. → Auditbevy_ui_renderfeature flag — if your project opts out ofdefault-featuresand 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
.bsnasset format references in 0.19 docs. The.bsnfile format is not yet supported — onlybsn!macros. If your docs or tutorials mention.bsnfiles, 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
SelectAllOnFocuscomponent to text inputs that need select-all behavior. → RC is NOT production-ready —bevy_settingsfails to compile. Wait for rc.2. → Audit.bsnreferences — ensure docs/tutorials don’t promise.bsnfile support (not in 0.19). → Auditbevy_ui_renderfeature flag — if your project opts out ofdefault-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
.bsnasset 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
UiGlobalTransformreturning incorrect positions when padding, margin, border, or preceding siblings are present. The min bound of a node incorrectly affectstranslation. - Migration impact: If a fix lands in 0.19, projects using
UiGlobalTransformto 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)
ScenePatchInstancefails silently when spawning viabsn!macro. The scene doesn’t spawn and no error is emitted. Works withCommands::spawn.^[https://github.com/bevyengine/bevy/issues/24320]- Migration impact: None unless you’re using
queue_spawn_scenewithbsn!. If so, test your scene spawning and consider usingCommands::spawnas 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
SelectAllOnFocuscomponent to text inputs that need select-all behavior. → RC is NOT production-ready —bevy_settingsfails to compile. Wait for rc.2. → Audit.bsnreferences — ensure docs/tutorials don’t promise.bsnfile support (not in 0.19). → Test ScenePatchInstance + bsn! — if usingqueue_spawn_scenewith 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
EntityTemplateinto 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
EntityTemplateparameter type.
#24336 — bsn! macro gains const/unsafe support (0.19 milestone)
- #24336 (pcwalton, 0.19 milestone, open). Adds
constandunsafeblock support insidebsn!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
EntityTemplateparameter 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, addSelectAllOnFocuscomponent to text inputs. → RC is NOT production-ready —bevy_settingsfails 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
ShadowLodOrigincomponent for shadow map visibility range resolution.^[https://github.com/bevyengine/bevy/pull/24289] - Migration impact: Additive — no existing code breaks. The new
ShadowLodOrigincomponent is opt-in. New GPU View uniform fieldlod_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_textchanged fromusizetou32.^[https://github.com/bevyengine/bevy/pull/24274] - Migration: If code stores or passes these indices as
usize, adjust tou32. 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
ShadowLodOrigincomponent 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 asusize, change tou32. → Prepare for SelectAllOnFocus — if #24278 merges, addSelectAllOnFocuscomponent to text inputs. → RC is NOT production-ready —bevy_settingsfails 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
ShadowLodOriginsemantics. The #24252 revert has been undone.^[https://github.com/bevyengine/bevy/pull/24343] - Migration impact: Low — additive restoration. Projects using
--no-cpu-culling+VisibilityRangewill 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_pbrwill panic becausebevy_renderrequiresRenderShadowLodOriginunconditionally.^[https://github.com/bevyengine/bevy/issues/24352] - Migration impact: If your project uses
bevy_renderwithoutbevy_pbr(e.g. 2D feature set), this is a crash regression introduced by #24289. Workaround: includebevy_pbrfeature 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+VisibilityRangeworks again with correct shadow LOD. → **2D apps: watch 24352 — if usingbevy_renderwithoutbevy_pbr, addbevy_pbras 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 asusize, change tou32. → Prepare for SelectAllOnFocus — if #24278 merges, addSelectAllOnFocuscomponent to text inputs. → RC is NOT production-ready —bevy_settingsfails 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.
RenderShadowLodOriginis now optional duringViewconstruction — 2D apps and custom feature sets that omitbevy_pbrno longer panic.^[https://github.com/bevyengine/bevy/pull/24359] - Migration impact: No action needed — this is a crash fix. If you added
bevy_pbras 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_settingstobevy-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_, sobevy_settingsfeature flag references continue to work. No user action needed.
#24336 — bsn! const/unsafe block support (additive)
- #24336 MERGED (loreball, May 20).
constandunsafeblocks now work insidebsn!macro field expressions.^[https://github.com/bevyengine/bevy/pull/24336] - Migration impact: Additive — no existing code breaks. New capability for low-level patterns.
asyncblocks were attempted but removed — async futures are unnamable and can’t satisfyClone+Default.
#24322 — require attribute in Resource derive (additive)
- #24322 MERGED (musjj, May 20). The
requireattribute is now available inResourcederive 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_pbrworkaround. →bevy_settings→bevy-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 checkafter upgrading; compiler errors will flag every syntax mismatch.
#24245 — TextLayoutInfo scale_factor centralization (behavior change)
- #24245 MERGED (ickshonpe).
TextLayoutInfo::sizenow in physical pixels (was logical).scale_factorset by layout function, not callers.^[https://github.com/bevyengine/bevy/pull/24245] - Migration: Code that reads
TextLayoutInfo::sizemay get different pixel values. Code that manually setsscale_factorshould remove those lines. - ⚠️ Known regression #24384:
multi_window_textexample 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
FixedNodemarker component for viewport-relative UI positioning.^[https://github.com/bevyengine/bevy/pull/24323] - Migration: Additive — no existing code breaks. To use: add
FixedNodecomponent (requiresNode+OverrideClip). Primary use case: modal dialogs portaled from deep hierarchy. Closes #9564. - Naming: Alternatives considered (WindowRelative, PinnedNode, RootNode) —
FixedNodechosen 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 readsTextLayoutInfo::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
- Bevy v0.19.0-rc.2 released May 22 by mockersf. All rc.1 blockers resolved.^[https://github.com/bevyengine/bevy/releases/tag/v0.19.0-rc.2]
- Migration impact: Projects on rc.1 should upgrade to rc.2 for the three critical fixes: compile failure (#24282), crates.io naming (#24279), 2D crash (#24352).
#24389 — Skybox render-world cleanup (no migration impact)
SyncComponentPlugin<Skybox>manually re-registered after being lost in the move tobevy_light.^[https://github.com/bevyengine/bevy/pull/24389]- Migration impact: None — bug fix only.
#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
SelectAllOnFocuscomponent 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)
- Opaque types now capture generic type information in reflection.^[https://github.com/bevyengine/bevy/pull/24382]
- Migration impact: None — bug fix only. May improve reflection-based workflows that use
Arc<T>etc.
#24276 — 0.19 release branch created
- Release content cleared from
main. 0.19 has its own branch;maintargets 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 withAssetId::<T>::default().- Migration: Search for
AssetId::invalid()across codebase and replace withAssetId::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@fnblock for function plugins.- Migration impact: None for existing code. New feature only.
#24399 — Text2d size fix (fixes #24384 regression)
- Fixes the
multi_window_textregression 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::sizein physical pixels, but text2d bounds now use logical size after #24399. When readingTextLayoutInfo::sizedirectly 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/removesSkybox, 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/removesSkybox, 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::addtoadd_retained. If merged, this is a breaking API change for custom render pipeline code.- #24406 (eugineer2) — Add
RelationshipHookModeargument toBundleWriter::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
FromTemplatewithDefault + 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/removesSkybox, 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/removesSkybox, 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::addrenamed toadd_retained.^[https://github.com/bevyengine/bevy/pull/24404] - Migration: Search for
SortedRenderPhaseusage 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 (oldaddbehavior)
- Why this matters: The
addmethod 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_resourceWorld::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_componentsmigration guide.
#24405 — SystemParam for SmallVec (additive)
- #24405 MERGED (Shatur, A-ECS, C-Usability).
SmallVec<[T; N]>now implementsSystemParam.^[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>withSmallVec<[T; N]>in system signatures.
#24440 — FromTemplate → Default + Clone (potential impact on template code)
- #24440 MERGED (hxYuki, A-Scenes). Replaces
FromTemplatederives withDefault + CloneonTilemapChunkTileDataandScrollbarThumb.^[https://github.com/bevyengine/bevy/pull/24440] - Migration impact: If code relied on
FromTemplatebeing implemented by these specific types, switch toDefaulttrait bounds. The documentation now recommendsDefault + Clonewhen 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
894d8d7from 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 onSortedRenderPhaseand 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 withAssetId::default()to clear deprecation warnings. → Test skybox removal — if code dynamically adds/removesSkybox, 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_modemethod.^[https://github.com/bevyengine/bevy/pull/24406] - Migration impact: Additive — no existing code breaks. The original
BundleWriter::writesignature is unchanged. Only relevant for projects that useBundleScratchto batch-write bundles with relationships on existing entities (e.g. entity cloning). IfRelationshipHookMode::Runwas causing ordering issues inRelationshipTarget, switch to the new method withRunIfNotLinked. - Future:
EntityClonerwill 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 onSortedRenderPhaseand replace with.add_retained()or.add_transient(). This is a compile-breaking change. → 🔥 NEW: Check BSN caching syntax — if anybsn!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 withAssetId::default()to clear deprecation warnings. → Test skybox removal — if code dynamically adds/removesSkybox, 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 usingBundleScratchwith 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
#Nameand#{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
SystemIdTemplatetype for passingSystemIdinto 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 toSystemIdTemplate+ 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
NoIndirectDrawingor callingset_changedonMesh3d), 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 withName({...})or#Rootpatterns. This is a compile-breaking change if used. → Evaluate SystemIdTemplate — if code registers systems in Bundle constructors, consider migrating toSystemIdTemplate+ bsn! scenes. → Retest GPU HLOD / VisibilityRange — if code had workarounds for mesh vanishing (forcingNoIndirectDrawing), 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 onSortedRenderPhaseand 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.
Related pages
- bevy — hub page for engine-level updates.
- bevy-game-development — broader development practices and ecosystem notes.
- bevy-projects — project-specific action items.
- bevy-migration-notes — Current watchlist and April 2026 migration notes.
- bevy-shadow-maps — 阴影映射系统与 ShadowLodOrigin 修复
- skybox — Skybox 组件与渲染世界清理
- sync-component-plugin — SyncComponentPlugin 同步机制
- bsn — Bevy Scene Notation(含 EntityTemplate 传递 + prefix overhaul)