Bevy Migration Notes

This page tracks upgrade-sensitive Bevy changes that are likely to matter to ZoOL’s active projects.

Current watchlist

Feature configuration

  • bevy_transform now exposes an explicit multi_threaded feature and stops treating std as a proxy for parallel transform propagation. Projects with hand-maintained Bevy feature sets should verify that the intended threading behavior still matches runtime targets such as desktop, wasm, or no_std builds.

UI renames

  • Remaining Core* prefixes were removed from some UI widget drag-state components, with migration-guide coverage in the upstream PR. Existing code should expect simple type renames rather than behavioral changes.

New APIs that may replace local workarounds

  • EntityCommands::insert_if_neq may allow cleanup of custom “only write when changed” helpers in ECS-heavy codebases.

UI focus and text input

  • Focus event semantics changed so repeated clicks on an already focused text field should no longer emit redundant FocusLost / FocusGained events. Audit UI code that used those duplicates as an implicit refresh trigger, and simplify code that manually deduplicated them.
  • Text input defaults and examples were visually refined ahead of 0.19; this is unlikely to be a breaking API change, but screenshot-based UI tests may need updated baselines.

Rendering behavior

  • CompositingSpace::Srgb now converts ClearColor to sRGB; any project that tuned colors around the old behavior should expect visual output changes after upgrading.
  • WebGL2 motion blur fixes landed, but depth-of-field fixes were excluded from that PR; keep browser effect testing granular rather than assuming all post-processing regressions are solved.

Open bugs to track before upgrade

  • AssetServer::load_folder with dev file watching has an open deadlock report on 0.18.1 and main; treat it as a migration risk for asset-heavy projects that rely on folder handles and hot reload. Update 2026-04-27: FIXED in #23980 (merged to main).
  • Composed run conditions involving not() and and() have an open bug report; add regression tests around resource-added/resource-changed transitions before upgrading gameplay state logic that uses this pattern.

2026-04-26 additions

IME support (breaking for custom text input)

  • IME support for text input (#23841) was merged as an MVP. If a project has custom text input handling that bypasses Bevy’s text input widget, it may need to be updated to cooperate with IME composition events. Projects targeting CJK users will benefit immediately.

New widgets: number input

  • A numeric input widget (#23842) was merged for editing Vec3 and similar types. This is new API surface, not a rename; existing code should be unaffected unless it had a local numeric input implementation that conflicts with the new built-in widget.

Shadow map behavior change

  • Point and spot light shadow maps now render only once regardless of camera count (#23713). Multi-camera setups should see improved performance. This is unlikely to break anything but should be verified if a project relied on per-camera shadow map differences.

sRGB environment map

  • EnvironmentMapLight::solid_color now uses linear space with default intensity 1.0 (#22588). Projects that tuned environment map colors around the old sRGB behavior should expect visual changes.

ECS event reflection

  • register_event_key is now exposed through reflection (#23973). This is additive API and should not break existing code, but projects using reflection-based ECS patterns should be aware of the new capability.

0.19 release readiness

  • The 0.19 milestone is at 95% completion with 15 open issues remaining. Key unresolved issues: mesh specialization performance regression (#23114), Vulkan Bistro scene flashing (#23183), ECS query regression (#23464), and text input breaking the first_person_view_model example (#23470).

2026-04-27 additions

FocusGained breaking change

  • FocusGained event now carries a FocusCause enum with Pressed (primary mouse click) and Navigated (tab, auto-focus, other) variants (#23993). Breaking: code that destructures or pattern-matches FocusGained will need updating. Single-line text inputs now select-all on navigation, matching HTML behavior.

load_folder deadlock resolved

  • The previously tracked load_folder + file watcher deadlock has been fixed in #23980. The fix reorders load_folder_internal to run after event handling and moves started_load_tasks tracking. This removes a key migration risk for asset-heavy projects using hot folder reload.

Web asset cache single-threaded support

  • web_asset_cache now compiles without multi_threaded feature (#23994). Projects targeting wasm or single-threaded builds can use web asset caching.

0.19 milestone progress

  • Milestone open issues dropped from ~15 to ~11. Remaining blockers are mostly platform-specific rendering regressions (Vulkan, DX12, WebGL2, Safari WebGPU).

2026-04-28 additions

Mesh view bind group layout on demand (migration guide included)

  • PR #23982 creates mesh view bind group layouts on demand instead of pre-allocating exponential combinations. This reduces sampled textures to 17 and fixes WebGL2 3D scene rendering (#23627). A migration guide is included in the PR. Projects with custom render pipelines that reference mesh view bind group layouts should review the migration guide when upgrading.

PCSS / light despawning SyncComponent change

  • PR #23790 adds shadow maps and extracted lights to SyncComponent for light entities. The extracted_light_removed observer was removed. Projects that relied on custom light extraction observers or manual render-world light sync may need to update.

GhostNode behavior change

  • PR #24001 fixes GhostNode tree synchronization. If a project uses GhostNode in UI layouts and has workarounds for layout not updating after add/remove, those workarounds may no longer be needed.

0.19 milestone progress

  • Milestone is at 93% (294/315 closed, 21 open issues). New issues added: spotlight/rect_light rendering incorrect (#23997), shadows disappear in visibility range (#23991). Most remaining issues are platform-specific rendering regressions.