Install
$ agentstack add skill-chrisgliddon-bevy-skills-bevy-migration-0-18-to-0-19 ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Bevy 0.18 → 0.19 — Migration cheat sheet
Released 2026-06-18. Apply top-down — earlier items break later builds if skipped.
When to use this skill
- Compiler errors after a
bevy = "0.18"→bevy = "0.19"bump. - LLM emits 0.18-era text/font/scene API names from training data.
- A
#[derive(Resource)]type suddenly behaves like a component. - A third-party crate (
bevy_capture, etc.) hasn't shipped 0.19 yet.
The renames you'll hit first
Text layout: drop the new_with_ prefix
// 0.19
TextLayout::justify(Justify::Left) // was new_with_justify
TextLayout::linebreak(/* … */) // was new_with_linebreak
TextLayout::no_wrap() // was new_with_no_wrap
TextFont fields changed type: FontSource + FontSize
// 0.19 — font is FontSource (handle OR family), font_size is FontSize
TextFont {
font: asset_server.load("fonts/FiraSans-Bold.ttf").into(), // Handle → FontSource via .into()
font_size: FontSize::Px(24.0), // f32 → FontSize::Px / ::Vh / ::Rem
..default()
}
// Select by family (needs the `bevy/system_font_discovery` feature for installed fonts):
TextFont { font: FontSource::family("Fira Sans"), ..default() }
0.19 swapped the cosmic-text layout backend for Parley, which does font fallback automatically via fontique. The old "insert a DefaultFontHandle so ..default() entities inherit a font" trick is obsolete — see [references/text-and-fonts.md](references/text-and-fonts.md).
Scene serialization crate was renamed (silent wrong-crate trap)
bevy_scene is reused for the new BSN system. Classic DynamicScene round-trip serialization moved to bevy_world_serialization:
// 0.18 → 0.19
// bevy_scene::DynamicScene → bevy_world_serialization::DynamicWorld
// bevy::scene::SceneRoot → bevy::world_serialization::WorldAssetRoot
// DynamicSceneBuilder → DynamicWorldBuilder
// SceneSpawner → WorldInstanceSpawner
glTF scene spawning still uses the old (now world_serialization) system. Full table: [references/scene-serialization.md](references/scene-serialization.md).
Resources are now Components (mostly a mental-model change)
Res, ResMut, #[derive(Resource)], and insert_resource all still work. The narrow breakages:
// ILLEGAL in 0.19 — a type can no longer be both:
#[derive(Component, Resource)] struct Health(u32);
Plus: a resource type now also matches Query, and inserting it as a component can despawn other copies. Non-send resource methods were renamed (deprecated, not removed):
world.init_non_send::(); // was init_non_send_resource
world.get_non_send::(); // was get_non_send_resource
Details + the query/despawn footgun: [references/resources-as-components.md](references/resources-as-components.md).
Cargo feature implications tightened
# 0.19: audio is NO LONGER implied by 2d / 3d / ui — add it explicitly:
bevy = { version = "0.19", features = ["3d", "bevy_audio", "vorbis"] }
# ui is NO LONGER implied by 2d / 3d either — add "ui" if you build UI.
Feathers UI stabilized
experimental_ dropped. FeathersPlugin → FeathersCorePlugin, and widget components lost their Core prefix (CoreScrollbarThumb → ScrollbarThumb, CoreSliderDragState → SliderDragState, etc.). Only relevant if you use Feathers.
Third-party crates lag the release
bevy_capture (the crate behind bevy-capture) tracks Bevy and may not have a 0.19 release yet — verify a 0.19-compatible version exists before bumping. When it does, EasyScreenRecordPlugin gained a required output_dir: Option field (only breaks manual struct construction; ..default() is fine).
Gotchas
#[reflect(Resource)]reflection access now also needsReflectComponentin some paths.TextFont::default().fontis aFontSource, not aHandle— code that read it as a handle won't compile.- System font discovery needs the
bevy/system_font_discoveryfeature; on Linux alsolibfontconfig1-dev. - The fallback setters (
set_serif_family, etc.) now returnResult— and you mostly shouldn't need them under Parley.
See also
bevy-migration-0-17-to-0-18— the previous release's rename catalogue.bevy-ui—TextFont/FontSize/FontSourcein everyday UI code.bevy-cargo-features— feature-implication table and renames.bevy-ecs-components— the Component model the new Resource subtrait plugs into.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: chrisgliddon
- Source: chrisgliddon/bevy-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.