"Bevy cambia. El que dice 'no rompe nada' te estΓ‘ mintiendo o no ha leΓdo el CHANGELOG."
β Frase tatuada en el brazo de todo mantenedor de crates que dependen de Bevy.
Este anexo es una tabla de referencia rΓ‘pida para saber quΓ© API existΓa en quΓ© versiΓ³n. No pretende ser exhaustiva (el CHANGELOG de Bevy tiene 1500+ entradas por minor), sino dar la respuesta a las preguntas del tipo "ΒΏesto ya estaba en 0.16?" o "ΒΏesto se rompiΓ³ en 0.17?" sin tener que leer siete release notes.
**CHANGELOG**: archivo markdown en el repo de un proyecto donde se listan cambios por versiΓ³n. Bevy lo mantiene escrupulosamente en `bevyengine/bevy/CHANGELOG.md`.
**Breaking change**: cambio que rompe cΓ³digo existente. En semver, requiere bump de MINOR (0.X.0) o MAJOR (X.0.0).
**Feature flag**: ver glosario principal. En este anexo verΓ‘s `bevy_asset`, `bevy_sprite`, etc., que son las *feature collections* de 0.16+.
| API / Concepto | 0.13 | 0.14 | 0.15 | 0.16 | 0.17 | 0.18 | 0.19 |
|---|---|---|---|---|---|---|---|
Component derive | β | β | β | β | β | β | β |
Resource derive | β | β | β | β | β | β | β |
Bundle derive | β | β | β | β | β | β | β |
Plugin trait | β | β | β | β | β | β | β |
PluginGroup trait | β | β | β | β | β | β | β |
Required Components | β | β | β | β | β | β | β |
#[require(T)] macro | β | β | β | β | β | β | β |
Component Hooks (on_add, on_insert, on_discard, on_remove) | β | β | β | β | β | β | β |
HookContext | β | β | β | β | β | β | β |
Observers | β | β | β οΈ parcial | β | β | β | β |
Observer derive | β | β | β | β | β | β | β |
On<T> trigger event | β | β | β | β | β | β | β |
EntityWorldMut::trigger | β | β | β | β | β | β | β |
Relations (bevy_ecs::Relationship) | β | β | β | β | β | β | β |
Relationship derive | β | β | β | β | β | β | β |
RelationshipTarget derive | β | β | β | β | β | β | β |
Pair(From, To) shorthand | β | β | β | β | β | β | β |
Linked filter en Query | β | β | β | β | β | β | β |
Resources-as-Components (#[derive(Component)] impl Resource) | β | β | β οΈ exp. | β | β | β | β |
Render-Graph-as-Systems | β | β | β | β | β | β | β |
Render schedule expuesto como sistemas | β | β | β | β | β οΈ parcial | β | β |
RenderTarget separado de Window | β | β | β | β | β | β | β |
bevy_render::RenderTarget::Image | β | β | β | β | β | β | β |
Anchor como required component | β | β | β | β | β | β | β |
Text2d y Text3d separados | β | β | β | β | β | β | β |
TextBundle reemplazado por Text + Node + TextFont + TextColor | β | β οΈ deprec. | β | β | β | β | β |
SpriteBundle β Sprite + Transform + Image (required comps) | β | β | β | β | β | β | β |
Camera2dBundle β Camera2d solo | β | β οΈ | β | β | β | β | β |
Mesh2d + MeshMaterial2d (en lugar de bundle) | β | β | β οΈ | β | β | β | β |
Time::delta_secs() | β | β | β | β | β | β | β |
Time::delta() (devuelve Duration) | β | β | β | β | β | β | β |
FixedUpdate schedule | β | β | β | β | β | β | β |
Fixed::delta() configurable | β | β | β | β | β | β | β |
Fixed schedule graph | β | β | β | β | β | β | β |
Time<()> vs Time<Virtual> | β | β | β | β | β | β | β |
Input<KeyCode> β ButtonInput<KeyCode> | β | β οΈ deprec. | β | β | β | β | β |
MouseButton input | β | β | β | β | β | β | β |
Gamepad input | β | β | β | β | β | β | β |
TouchInput event | β | β | β | β | β | β | β |
EventReader<T> / EventWriter<T> | β | β | β | β | β | β | β |
Events<T> recurso | β | β | β | β | β | β | β |
EventRegistry (auto-register) | β | β | β | β | β | β | β |
app.add_event::<T>() | β | β | β | β | β | β | β |
States derive | β | β | β | β | β | β | β |
OnEnter / OnExit / OnTransition schedules | β | β | β | β | β | β | β |
NextState<T> recurso | β | β | β | β | β | β | β |
SubStates / ComputedStates derive | β | β | β | β | β | β | β |
run_if(in_state) | β | β | β | β | β | β | β |
SystemSet derive | β | β | β | β | β | β | β |
SystemSet::chain() | β | β | β | β | β | β | β |
in_set(S) chaining | β | β | β | β | β | β | β |
apply_deferred automΓ‘tico | β | β | β | β | β | β | β |
Commands::entity(e).insert(T) | β | β | β | β | β | β | β |
Commands::entity(e).remove::<T>() | β | β | β | β | β | β | β |
EntityWorldMut API robusta | β | β οΈ | β | β | β | β | β |
World::entity(e) | β | β | β | β | β | β | β |
World::spawn_empty() | β | β | β | β | β | β | β |
Query::get_single / get_single_mut | β | β | β | β | β | β | β |
Query::iter() y iter_mut() | β | β | β | β | β | β | β |
Query::par_iter() | β | β | β | β | β | β | β |
With<T> / Without<T> filters | β | β | β | β | β | β | β |
Added<T> / Changed<T> filters | β | β | β | β | β | β | β |
Or<(A, B)> filter | β | β | β | β | β | β | β |
Optional<T> access en Query | β | β | β | β | β | β | β |
Local<T> en sistemas | β | β | β | β | β | β | β |
Res<T> / ResMut<T> | β | β | β | β | β | β | β |
NonSend<T> / NonSendMut<T> | β | β | β | β | β | β | β |
Deref / DerefMut en Query | β | β | β | β | β | β | β |
Children / Parent componentes | β | β | β οΈ β ChildOf | β | β | β | β |
ChildOf componente (oficial) | β | β | β | β | β | β | β |
Propagate trait para transformaciones | β | β | β | β | β | β | β |
Transform y GlobalTransform | β | β | β | β | β | β | β |
Transform::from_xyz() | β | β | β | β | β | β | β |
Transform::with_scale() | β | β | β | β | β | β | β |
glam::Vec2 / Vec3 / Vec4 | β | β | β | β | β | β | β |
Color::srgb() / linear() | β | β | β | β | β | β | β |
Color::hsla() | β | β | β | β | β | β | β |
Text componente (separado de estilo) | β | β οΈ | β | β | β | β | β |
TextFont componente | β | β | β | β | β | β | β |
TextColor componente | β | β | β | β | β | β | β |
TextSection (deprecado) | β | β οΈ deprec. | β | β | β | β | β |
JustifyText y LineBreak | β | β | β | β | β | β | β |
Node componente UI | β | β | β | β | β | β | β |
Style componente UI | β | β | β οΈ β Node | β | β | β | β |
Flex layout automΓ‘tico | β | β | β | β | β | β | β |
Grid layout (experimental) | β | β | β | β | β οΈ exp. | β | β |
bevy_ui separado | β | β | β | β | β | β | β |
bevy_picking crate oficial | β | β | β | β | β | β | β |
OnPointer trigger | β | β | β | β | β | β | β |
AssetServer | β | β | β | β | β | β | β |
Assets<T> storage | β | β | β | β | β | β | β |
Handle<T> | β | β | β | β | β | β | β |
AssetEvent (Modified, Added, Removed) | β | β | β | β | β | β | β |
LoadState<T> para assets | β | β | β | β | β | β | β |
AssetLoader trait | β | β | β | β | β | β | β |
bevy_asset feature collection | β | β | β | β | β | β | β |
bevy_audio feature collection | β | β | β | β | β | β | β |
bevy_render feature collection | β | β | β | β | β | β | β |
bevy_sprite feature collection | β | β | β | β | β | β | β |
bevy_text feature collection | β | β | β | β | β | β | β |
bevy_pbr (3D) | β | β | β | β | β | β | β |
bevy_winit separado | β | β οΈ | β | β | β | β | β |
bevy_window separado | β | β | β | β | β | β | β |
Window component | β | β | β | β | β | β | β |
Cursor component | β | β | β | β | β | β | β |
WindowMode enum | β | β | β | β | β | β | β |
Msaa configurable | β | β | β | β | β | β | β |
Camera::clear_color | β | β | β | β | β | β | β |
Tonemapping | β | β | β | β | β | β | β |
ColorGrading global | β | β | β | β | β | β | β |
DACGamut / OutputColorSpace | β | β | β | β | β | β | β |
bevy_gizmos crate | β | β | β | β | β | β | β |
Gizmos resource | β | β | β | β | β | β | β |
bevy_log separado | β | β | β | β | β | β | β |
tracing integration | β | β | β | β | β | β | β |
bevy_diagnostic | β | β | β | β | β | β | β |
Diagnostics recurso | β | β | β | β | β | β | β |
bevy_scene crate | β | β | β | β | β | β | β |
DynamicScene / Scene | β | β | β | β | β | β | β |
DynamicSceneBuilder | β | β | β | β | β | β | β |
SceneSpawner | β | β | β | β | β | β | β |
Component derive con #[reflect(Component)] | β | β | β | β | β | β | β |
Reflect derive | β | β | β | β | β | β | β |
TypeRegistry | β | β | β | β | β | β | β |
bevy_reflect mejor ergonomics | β | β οΈ | β | β | β | β | β |
FromReflect | β | β | β | β | β | β | β |
AppTypeRegistry recurso | β | β | β | β | β | β | β |
bevy_utils | β | β | β | β | β | β | β |
HashSet / HashMap re-exports | β | β | β | β | β | β | β |
Duration re-export | β | β | β | β | β | β | β |
Instant re-export | β | β | β | β | β | β | β |
ParallelCommands | β | β | β | β | β | β | β |
World::try_run_schedule | β | β | β | β | β | β | β |
ScheduleLabel trait | β | β | β | β | β | β | β |
IntoScheduleConfigs (ergonΓ³mico) | β | β | β | β | β | β | β |
SystemBuilder chaining | β | β | β | β | β | β | β |
Resource::from_arc (compartir entre worlds) | β | β | β | β | β | β | β |
World::send_event | β | β | β | β | β | β | β |
Bevy ui render world separado | β | β | β | β | β | β | β |
Mesh::insert_attribute | β | β | β | β | β | β | β |
Mesh::with_inserted_attribute | β | β | β | β | β | β | β |
StandardMaterial | β | β | β | β | β | β | β |
MaterialExtension trait | β | β | β | β | β | β | β |
Material2d / Material3d plugins | β | β οΈ | β | β | β | β | β |
bevy_sprite::Material2d | β | β | β | β | β | β | β |
Aabb component | β | β | β | β | β | β | β |
Visibility / InheritedVisibility | β | β | β | β | β | β | β |
ViewVisibility | β | β | β | β | β | β | β |
ComputedVisibility (deprecado) | β | β οΈ | β | β | β | β | β |
SpatialBundle | β | β | β | β | β | β | β |
bevy_hierarchy crate | β | β | β | β | β | β | β |
bevy_state (oficial) | β | β | β | β | β | β | β |
StateMachine (build into Bevy) | β | β | β | β | β | β | β (use crate externo) |
bevy_dev_console | β | β | β | β | β | β | β |
bevy_ecs_schedule_graphs | β | β | β | β | β | β οΈ exp. | β οΈ exp. |
Mobile (iOS/Android) support | β | β | β | β | β | β | β |
Web (WASM) support | β | β | β | β | β | β | β |
Pipelined rendering | β | β | β | β | β οΈ | β | β |
Parallel rendering | β | β | β | β | β | β | β |
Multi-threaded asset loading | β | β | β | β | β | β | β |
Async asset loading (Tokio) | β | β | β | β οΈ | β | β | β |
bevy_remote (BRP - Bevy Remote Protocol) | β | β | β | β | β | β | β |
BRP HTTP y WebSocket | β | β | β | β | β | β | β |
Component schema reflection | β | β | β | β | β | β | β |
Resource schema reflection | β | β | β | β | β | β | β |
Bevy Editor (oficial) | β | β | β | β | β | β | β (aΓΊn no) |
bevy_editor_pls (community) | β | β | β | β | β | β | β |
bevy_inspector_egui | β | β | β | β | β | β | β |
bevy_rapier (3D/2D physics) | β | β | β | β | β | β | β |
bevy_avian (alternativa fΓsica) | β | β | β | β | β | β | β |
bevy_renet (networking) | β | β | β | β | β | β | β |
bevy_replicon (networking replicaciΓ³n) | β | β | β | β | β | β | β |
bevy_tweening (animaciones) | β | β | β | β | β | β | β |
bevy_hanabi (partΓculas) | β | β | β | β | β | β | β |
leafwing-input-manager | β | β | β | β | β | β | β |
bevy_kira_audio | β | β | β | β | β | β | β |
Introducidos en 0.15. Reemplazan muchos Bundles. Marcador #[require(T)] en un componente aΓ±ade T automΓ‘ticamente cuando se inserta el primero.
#[derive(Component)]
#[require(Sprite)]
struct Player; // Al spawnear Player, tambiΓ©n spawnas Sprite (vacΓo).
Lanzados en 0.14 como RFC, estables en 0.15. Permiten ejecutar lΓ³gica cuando un componente se aΓ±ade (on_add), se inserta (on_insert), se descarta (on_discard, renombrado de on_replace en 0.19 vΓa PR #22789) o se quita (on_remove). Imprescindible para mantener Γndices sincronizados.
Introducidos experimentalmente en 0.14, estables en 0.15, mejorados en 0.16. Son sistemas que escuchan triggers sobre una entidad especΓfica. Complementan (no sustituyen) a EventWriter/EventReader.
#[derive(Event)]
struct Click;
commands.spawn(Player).observe(|trigger: Trigger<Click>, ...| {
// Reacciona a Click sobre ESTA entidad.
});
Lanzadas en 0.17. Permiten definir relaciones tipadas entre entidades. Parent/Children se reescribieron sobre Relations internamente.
#[derive(Component)]
#[relationship(relationship_target = OwnedBy)]
struct Owned(Entity);
#[derive(Component)]
#[relationship_target(relationship = Owned)]
struct OwnedBy(Vec<Entity>);
RFC experimental en 0.15, estabilizado en 0.16. Un Resource puede derivar Component para ser usado como dato de entidad en sistemas especΓficos (e.g. datos globales que tambiΓ©n necesitan query por componente).
Antes de 0.17, el render era una caja negra. Ahora los render passes son sistemas que puedes aΓ±adir a Render schedule. MΓ‘s flexible, mΓ‘s depurable.
En 0.17 se introdujo RenderTarget::Image para dibujar a una textura en lugar de a la ventana. Habilita post-procesado, minimapas, y render-to-texture.
Anchor (pivote de sprites/texto) pasΓ³ de ser un campo de Sprite/Text a ser un componente independiente y required component en 0.17. Permite pivotar entidades sin sprite (e.g. texto UI) sin duplicar el campo.
FixedUpdate siempre estuvo, pero en 0.16 se volviΓ³ configurable el delta (Time<Fixed>::set_duration). En 0.17 el schedule graph permite sistemas con dependencias explΓcitas en fixed timestep.
Desde 0.16, las features de Bevy se reorganizaron en feature collections: bevy_asset, bevy_audio, bevy_render, bevy_sprite, bevy_text, etc. Activar default-features = false y luego features = ["bevy_asset"] te da binarios mΓ‘s pequeΓ±os. Era imposible en 0.13-0.15.
# 0.13
bevy = "0.13"
# 0.19
bevy = { version = "0.19", default-features = false, features = ["bevy_asset", "bevy_sprite"] }
Si vienes de 0.13 y subes a 0.19, esta es tu lista de la compra de breaking changes:
| VersiΓ³n | Cambio | AcciΓ³n |
|---|---|---|
| 0.14 | Input<KeyCode> β ButtonInput<KeyCode> | Reemplazar todas las ocurrencias |
| 0.14 | TextSection deprecated | Migrar a Text + TextFont + TextColor |
| 0.15 | Bundles reemplazados por required components en muchos casos | Reemplazar SpriteBundle por Sprite + Transform + Image |
| 0.15 | Children/Parent separados β unificados en jerarquΓa ChildOf | Revisar cΓ³digo de jerarquΓas |
| 0.15 | apply_deferred se vuelve automΓ‘tico en muchos puntos | Quitar llamadas manuales donde ya no hacen falta |
| 0.16 | Features reorganizadas | Actualizar Cargo.toml |
| 0.16 | Time<()> y Time<Virtual> diferenciados | Revisar uso de Time en sistemas |
| 0.17 | RenderTarget separado | Si dibujabas a textura, usar la nueva API |
| 0.17 | Anchor es required component | Quitar anchor de struct literals |
| 0.18 | Pipelined rendering activado por defecto | Si tenΓas workarounds para el single-thread render, revisa |
| 0.15 | SubStates / ComputedStates oficiales | Si tenΓas jerarquΓas de estado custom, evalΓΊa migrar |
| 0.19 | #[reflect(Resource)] tambiΓ©n refleja Component; ReflectResource es ZST | Si usabas BRP o bevy_world_serialization con ReflectResource, migra a ReflectComponent |
| 0.19 | bsn! macro para escenas next-gen | Si usabas DynamicScene exclusivamente, considera migrar para escenas declarativas (cap 12) |
**Metedura de pata del anexo**: hacer `cargo update` y esperar que todo siga funcionando. Cada minor de Bevy ha tenido al menos 1 breaking change. Lee el CHANGELOG. LΓ©elo otra vez. LΓ©elo en voz alta si hace falta. El compilador te lo agradecerΓ‘.
@: bevy = "0.19.1" en Cargo.toml para evitar sorpresas.cargo fix --edition para sugerencias automΓ‘ticas, pero revΓsalas: a veces el fix propuesto no es el mΓ‘s limpio.**ΒΏSabΓas queβ¦?** Bevy publica un *migration guide* oficial en `https://bevy.org/learn/migration-guides/0-18-to-0-19/` (un *path* por cada par de versiones) que lista cada cambio con ejemplos de "antes/despuΓ©s". Es una mina de oro y pocos lo leen. Ahora tΓΊ ya sabes que existe.
No somos videntes, pero la hoja de ruta pΓΊblica menciona:
bevy_picking para UI 3D.Hasta entonces, este anexo cubre lo que necesitas para moverte entre 0.13 y 0.19 sin tirarte de los pelos. Β‘Suerte!