Aviso al lector: si has llegado aquí desde el capítulo 1, vete a por un café. Este anexo es la guía de la guía: el IKEA de plugins de Bevy, con honestidad emocional.
Bevy es un coche recién salido de fábrica. Tiene cuatro ruedas y un motor, pero no trae GPS, ni radio, ni ambientador. Para eso están los plugins: añadidos comunitarios (o del propio equipo Bevy) que te dan superpoderes a cambio de una línea en tu Cargo.toml. Hay cientos, y todos juran ser los mejores. Spoiler: mienten casi todos.
Plugin (en Bevy): un módulo en Rust que implementa el trait `Plugin` y se registra con `app.add_plugin(MiPlugin)`. Es la forma oficial de extender el motor sin tocar su código.
Release train (de Bevy): cadencia de versiones. Cada ~3 meses sale una nueva (0.16, 0.17, 0.18, 0.19...). Los plugins serios siguen ese ritmo; los demás se quedan en el andén.
Leyenda de Madurez:
| Plugin | Versión Bevy 0.18/0.19 | Categoría | Cuándo SÍ | Cuándo NO | Alternativa | Madurez |
|---|---|---|---|---|---|---|
bevy_sprite (built-in) | ✅ ambas | Render / 2D | Juegos 2D puros, sprites simples, atlases | Si necesitas rotación 3D de un sprite 2D | bevy_sprite_3d | 🟢 |
bevy_sprite_3d | ✅ 0.18 (en revisión) | Render / 2D | Sprites 2D con iluminación 3D, billboards | Si tu juego es 2D puro y no quieres complicarte | bevy_sprite | 🟡 |
bevy_ecs_tilemap | ✅ 0.18, 0.19 en camino | Tilemaps / Render | Mapas de tiles grandes (RPG, RTS, plataformas) | Si solo tienes un fondo estático | bevy_ldtk (alto nivel) | 🟢 |
bevy_ldtk | ✅ 0.18, 0.19 parcial | Tilemaps / Assets | Niveles diseñados en LDtk | Si editas a mano o con Tiled | bevy_ecs_tilemap + Tiled exporter | 🟡 |
avian2d | ✅ 0.18 y 0.19 | Física 2D | Plataformas, top-down, cualquier cosa con colisiones 2D reales | Si necesitas simulación 3D (usa avian3d) | bevy_rapier2d, bevy_xpbd_2d | 🟢 |
bevy_rapier2d | ✅ 0.18 (suele ir 1 ciclo por detrás) | Física 2D | Proyectos ya en Rapier 0.x/0.14, sensores avanzados | Nuevos proyectos (avian ha comido su lunch) | avian2d | 🟡 |
bevy_xpbd_2d | ⚠️ soporte irregular | Física 2D | Simulación XPBD específica, papers académicos | Juegos comerciales — autor en mantenimiento | avian2d | 🟡 |
bevy_kira_audio | ✅ 0.18, 0.19 compatible | Audio | Música dinámica, fade, sound managers | Si solo necesitas reproducir un .ogg y ya | bevy_audio | 🟢 |
bevy_audio (built-in) | ✅ ambas | Audio | Proyectos pequeños, prototipos, "solo quiero sonido" | Si vas a hacer un juego con muchas capas de audio en runtime | bevy_kira_audio | 🟢 |
leafwing-input-manager | ✅ 0.18 y 0.19 | Input | Juegos medianamente serios, rebindings, gamepads | Hola Mundo (sobrecarga) | Hecho a mano con bevy_input | 🟢 |
bevy_replicon | ✅ 0.18 y 0.19 | Networking | Multijugador autoritativo, replicación de componentes | P2P caótico, single-player | lightyear, bevy_renet | 🟢 |
lightyear | ✅ 0.18, 0.19 parcial | Networking | Netcode custom, lag comp, prediction client-side | Si quieres algo "que simplemente funcione" | bevy_replicon | 🟡 |
bevy_renet | ⚠️ soporte 0.18 lento | Networking | Vienes de la era 0.13 con todo montado | Nuevos proyectos — renet en pausa | bevy_replicon | 🔴 |
sickle_ui | ⚠️ atascado en Bevy 0.14 (v0.4.0 del crate) | UI / UX | UIs 2D in-game (inventarios, menús, tiendas) — útil si estás en 0.14 | Bevy 0.15+: no compila sin fork. Mejor bevy_egui o esperar a bevy_feathers estable | bevy_egui, bevy_feathers | 🔴 |
bevy_ui (built-in) | ✅ ambas | UI / UX | UIs in-game simples, botones, sliders, texto | UI de editor, formularios complejos | sickle_ui, bevy_egui | 🟢 |
bevy_egui | ✅ 0.18 y 0.19 | UI / UX | Panels de debug, editores, dev tools | UI in-game pulida para jugadores | sickle_ui, bevy_cosmic_ui | 🟢 |
bevy_cosmic_ui | ⚠️ 0.18 wip, 0.19 tbd | UI / UX | UI declarativa con cosmic-text | Primer juego — está verde | bevy_ui + manual | 🔴 |
bevy_feathers (built-in 0.19, experimental) | ✅ 0.19 (preview en 0.18) | UI / UX | UI oficial moderna de Bevy (templates BSN @FeathersButton {} o funciones helper) | Producción: sigue siendo experimental, API puede cambiar; si necesitas estable, usa bevy_ui a pelo | bevy_ui a pelo | 🟡 |
bevy_skein | ⚠️ solo 0.18, autor slow | Animación | Si necesitas un editor de animaciones in-engine | Juegos pequeños, animaciones simples | bevy_spritesheet_animation | 🟡 |
bevy_spritesheet_animation | ✅ 0.18 y 0.19 | Animación | Spritesheets clásicos, frame-a-frame | Skeletal animation, timelines | bevy_skein | 🟢 |
bevy_hanabi | ✅ 0.18 y 0.19 | Partículas | Explosiones, magia, fuegos artificiales, GPU compute | Pocos efectos, móbiles gama baja | bevy_particle_systems | 🟢 |
bevy_particle_systems | ⚠️ 0.17, 0.18 lento | Partículas | Si ya lo usabas y no quieres migrar | Nuevos proyectos en 0.18+ | bevy_hanabi | 🔴 |
bevy_asset_loader | ✅ 0.18 y 0.19 | Carga de assets | Juegos con loading screens, assets por nivel | Prototipos throwaway | bevy_common_assets | 🟢 |
bevy_common_assets | ✅ 0.18 y 0.19 | Carga de assets | Parsers reutilizables (ROMLoader, JSONLoader) | Si solo necesitas tipos básicos | bevy_asset_loader | 🟢 |
bevy_save | ✅ 0.18 y 0.19 | Save / Serialización | Savegames complejos, migraciones, perfiles | Si solo guardas 3 enteros | bevy_pkv | 🟢 |
bevy_pkv | ✅ 0.18 y 0.19 | Save / Serialización | Settings, high-score, key-value puro | Worlds enteros, snapshots | bevy_save | 🟢 |
bevy_world_serialization | ⚠️ 0.17, 0.18 wip | Save / Serialización | Snapshots del ECS World (debug, replay) | Producción — en pañales | bevy_save + custom | 🔴 |
vleue_navigator (sucesor de bevy_pathmesh) | ✅ 0.18 (v0.15+ del crate) | Pathfinding | NPCs moviéndose por mapa 2D con obstáculos usando navmesh auto-generada | Pathfinding muy custom o grids puros | A* manual, astar | 🟡 |
bevy_light_2d (community, jgayfer) | ⚠️ atascado en Bevy 0.18 (v0.9.0) | Render / Iluminación 2D | Iluminación 2D sobre community crate (sombra, occlusion) | Bevy 0.19 nativo ya trae PointLight2d + AmbientLight2d en bevy::render::light_2d | Iluminación nativa 0.19 | 🟡 |
bevy_ecs_tiled | ✅ 0.13.1 → Bevy 0.19 | Tilemaps / Render | Mapas editados en Tiled (formato .tmx) | Si editas con LDtk (mejor bevy_ecs_ldtk) | bevy_ecs_tilemap + parser TMX propio | 🟢 |
bevy_mod_debugdump | ✅ 0.16.0 → Bevy 0.19 | Dev tools | Volcar el schedule graph a dot/svg para depurar orden de sistemas | Build de release al usuario | bevy_inspector_egui (en vivo) | 🟢 |
bevy_state (built-in 0.14+) | ✅ ambas | State | Cualquier juego con menú/playing/paused/game-over | — (built-in, no hay alternativa) | hecho a mano (no lo hagas) | 🟢 |
bevy_inspector_egui | ✅ 0.18 y 0.19 | Dev tools | Inspeccionar/modificar entidades en runtime | Build de release al usuario | bevy_remote | 🟢 |
bevy_remote | ✅ 0.18 y 0.19 | Dev tools | Hot-reload, profiling remoto, BRP | Dev local simple | bevy_inspector_egui | 🟡 |
bevy_editor (built-in 0.18 preview) | ✅ 0.18 preview, 0.19+ | Editor | Editor visual oficial de Bevy | Producción — sigue en preview | — | 🟡 |
bevy_rand | ✅ 0.18 y 0.19 | Otros | RNG determinista, reproducible, seedable | Si te da igual el determinismo | rand crate a pelo | 🟢 |
bevy_kira_aseprite | ⚠️ 0.17/0.18, soporte intermitente | Otros | Animaciones en Aseprite, import directo | Spritesheets ya hechas a mano | bevy_spritesheet_animation | 🟡 |
bevy_trickfilm | ⚠️ 0.17, autor desaparecido | Otros | Animación 2D cutout con joints | Cualquier proyecto serio en 0.18+ | bevy_spritesheet_animation | 🔴 |
bevy_prototype_lyon | ⚠️ abandonado, 1D only | Otros | Geometría procedural 2D | Producción — más polvo que commits | Dibuja a mano con meshes | 🔴 |
Nota: "0.19 compatible" significa compat declarada al cierre de este anexo. Comprueba siempre el
Cargo.tomlantes de copiar y pegar ciegamente.
📅 **1996 — id Software.** John Carmack lanzó *Quake* con un sistema de plugins DLL que cargaba `.so`/`.dll` en caliente. Es el abuelo filosófico de esta tabla. Si viera `app.add_plugins((DefaultPlugins, AvianPlugin, LeafwingInputPlugin))`, asentiría levemente y volvería a programar rockets.
bevy_ecs_tilemap.kira: crossfades, buses, mixing.renet. Histórico, en coma.egui. Debug sí, in-game no.cosmic-text. Prometedor, inmaduro.prefs de Unity.bevy_pathmesh).PointLight2d nativo..tmx de Tiled..aseprite directo.🚫 **Error común:** añadir `bevy_rapier2d` y `avian2d` "por si acaso". Resultado: no compila, las físicas pelean, pierdes 4 horas. **Solución:** un solo motor. Dos es un bug, no una precaución.
Ya tienes la tabla. Cinco criterios que uso cada vez que meto un crate nuevo en Cargo.toml.
Mira la fecha del último commit en main. Menos de 3 meses: vivo. Más de 6: huye. Más de un año: abandonado, aunque el autor diga "lo mantengo en mi tiempo libre". El tiempo libre no compila código.
Commit reciente: fecha del último `git commit` que tocó código (no solo README). El latido del proyecto.
Bevy saca versión cada ~3 meses. Si un plugin dice "soporta Bevy 0.14" y estamos en 0.19, no lo uses salvo que sepas lo que haces. Truco: busca bevy = "0.X" en su Cargo.toml. Si no coincide con tu versión (o la anterior), mala señal.
Abre tests/ o busca #[test]. Vacío = "lo probó en su juego" (eso no es un test, es una anécdota). CI, mejor.
leafwing-input-manager, bevy_save. API pequeña, una tarde.Regla: docs.rs con más de 2000 items, prepárate. Menos de 200, lo dominas en un finde.
examples/ es el test de fuego. 5+ ejemplos, 1-2 como juego pequeño, README con capturas: buena señal. "Hello world" + "más ejemplos próximamente" desde 2023: mala señal.
📅 **2014 — Mojang.** Notch tenía en *Minecraft* un plugin system que cargaba `.jar` con código Java. La idea de "extender el motor sin tocarlo" es anterior a Bevy, a Rust, y casi a la computación moderna. Lo que Bevy hace con traits es lo mismo que Notch con classloaders, pero con tipos.
Tres anti-patrones que más entierran proyectos (los he visto y cometido).
Usar un plugin con 6+ meses sin commits. Miente. Funciona en tu máquina, con tu Bevy y tu pifia de Cargo.lock. El día que actualices Bevy, no compilará, y como está abandonado, no lo arreglarán. Tendrás que forkearlo, y no quieres forkearlo.
Síntoma: Cargo.toml con Bevy de hace 5 ciclos. Último issue de 2024. Respuesta del autor: "I'll look into it when I have time".
Meter 3 plugins que hacen lo mismo "por si uno falla": rapier+avian, kira+audio, state built-in+reinventos caseros. Síntoma: Cargo.toml con 15 deps, 3 son "motores de físicas", binario de 80 MB, linker quejándose. Solución: uno y comprometerse.
Depender de un plugin con un solo mantenedor, sin co-mantenedores. Si Fulano se cansa, se cambia de lenguaje o le sale un trabajo, tu proyecto se queda huérfano.
Síntomas: un solo contributor en GitHub, CODEOWNERS con un nombre, plugin bajo user personal. Excepción: plugins de la organización oficial (bevyengine) o equipos conocidos (Leafwing Studios).
🚫 **Error común:** "El plugin es perfecto, el autor está en exámenes, ya lo actualizará". No. Si lleva 8 meses parado, **no lo va a actualizar**. Fork, migra o reescríbelo. Las tres duelen, pero son mejores que quedarte en Bevy 0.14 para siempre.
Si tuviera que armar un juego 2D comercial hoy, día 1, este sería el stack. Todos están mantenidos y juegan bien entre sí. Nota: anteriormente recomendaba sickle_ui aquí, pero desde 2024 está atascado en Bevy 0.14; en su lugar uso bevy_egui para dev tools y bevy_ui nativo + helpers para HUD/menús.
| Plugin | Para qué lo uso |
|---|---|
avian2d 0.7.0 | Física 2D seria, ECS-first. |
leafwing-input-manager 0.21.0 | Input multiplataforma, rebindings. |
bevy_kira_audio 0.26.0 | Audio con fade, buses, mixing. |
bevy_ecs_tilemap 0.19.0 | Tilemaps chunked y rápidos. |
bevy_hanabi 0.19.0 | Partículas GPU para efectos. |
bevy_save 2.0.1 (Bevy 0.16; para 0.19 verificar bevy_persistent) | Savegames con versionado y perfiles. |
bevy_rand 0.15.0 | RNG determinista y seedable. |
Por qué estos y no otros: avian va más sincronizado con el release train; kira ya trae crossfades; con inventario drag&drop el UI built-in se queda corto; bevy_save escala sin reescribir nada cuando lo pequeño se vuelve mediano.
📅 **2021 — Graceful Decay / Annapurna Interactive.** El estudio Graceful Decay publicó *Maquette* (publicado por Annapurna Interactive), un puzle recursivo que demuestra que un equipo indie puede llevar un concepto ambicioso a Steam, PS y Xbox. No es Bevy (usa Unity), pero es referencia obligada de *art direction* indie.
Si solo te llevas una cosa: el plugin adecuado es el que siga vivo cuando tú termines tu juego. No el más bonito, ni el más rápido, ni el que tenga más estrellas. El que siga vivo.
Abre Cargo.toml. Añade un plugin. Haz un prototipo. Si en 30 minutos no compila, bórralo y prueba el siguiente. La elección no es compromiso matrimonial: es una primera cita. Si no funciona, hay más. — El autor, huyendo a actualizar su Cargo.lock
Esta edición añade varios capítulos que dependen de plugins. Aquí está el detalle de los que el libro recomienda oficialmente, con la versión a fecha de la edición (verificá antes de usar; el release train de Bevy es rápido).
| Plugin | Versión | Notas |
|---|---|---|
bevy_inspector_egui | 0.37.0 | Estable, sigue release train. Necesita bevy/debug feature. |
bevy::remote + bevy::remote::http | built-in desde 0.16 | BRP no requiere crate externo. |
tracy + bevy/trace_tracy | built-in feature | El profiler Tracy se conecta a la GUI por red local. |
bevy_mod_debugdump | 0.16.0 | Exporta el schedule graph a Graphviz (.dot/.svg). |
| Plugin | Versión | Notas |
|---|---|---|
bevy_save | 2.0.1 → Bevy 0.16 (verificar 0.19) | Trait Migrate para migraciones de save. |
bevy_persistent | ^0.19 | Wrapper sobre serde. Más simple que bevy_save. |
bevy_pkv | ^0.19 | Key-value store. Bueno para settings. |
bevy_simple_prefs | ^0.19 | Persistencia de Resources a un archivo RON. |
| Plugin | Versión | Notas |
|---|---|---|
bevy_fluent | ^0.19 (verificar) | Sobre Fluent (Mozilla). Más completo. |
bevy_simple_i18n | ^0.19 | Sobre rust-i18n. Más simple. |
bevy_locales | 0.1.0 | Wrapper sobre bevy_fluent. |
| Plugin | Versión | Notas |
|---|---|---|
bevy_aseprite_ultra | 0.9.0 → Bevy 0.19 | Aseprite con hot-reload completo. Recomendado. |
bevy_aseprite | 0.12 (desactualizado) | El viejo, congelado. |
bevy_spritesheet_animation | ^0.19 | Animación por spritesheet simple. |
bevy_sprite_animation | ^0.19 | Reanimator-style. |
bevy_tweening | 0.16.0 → Bevy 0.19 | Tweens y easing. Complemento, no sustituto. |
bevy_spine | 0.10.1 publicado (main en 0.12 para 0.19) | Skeletal animation Spine. Migrando a 0.19 en main. |
bevy_hanabi | 0.19.0 → Bevy 0.19 | Partículas GPU con compute shaders. |
bevy_ecs_ldtk | 0.15.0 → Bevy 0.19 | Carga de niveles LDtk. |
bevy_ecs_tilemap | 0.19.0 → Bevy 0.19 | Tilemaps chunked sobre ECS. |
bevy_ecs_tiled | 0.13.1 → Bevy 0.19 | Soporte del formato .tmx de Tiled. Alternativa a bevy_ecs_tilemap. |
| Plugin | Versión | Notas |
|---|---|---|
bevy_replicon | 0.41.1 → Bevy 0.19 | Replicación autoritativa base. Es la versión verificada para 0.19. |
bevy_rewind | 0.0.1 (marzo 2025; muy temprano) | Rollback server-authoritative. |
bevy_replicon_snap | ^0.29 (Bevy 0.15; verificar 0.19) | Snapshot interpolation sobre replicon. |
bevy_timewarp | (verificar 0.19) | Predict/rollback. |
bevy_ggrs | 0.22.0 → Bevy 0.19 | P2P con GGRS. Más viejo. |
lightyear | 0.28.0 → Bevy 0.19 | Netcode de bajo nivel con prediction/interp. |
| Plugin | Versión | Notas |
|---|---|---|
bevy-rust-gpu | experimental | Escribir shaders en Rust compilado a SPIR-V. NO recomendado para producción. |
Bevy publica una minor version cada ~3 meses. Los plugins serios siguen ese ritmo; los demás se quedan atrás. Antes de adoptar un plugin, verificá en su repo:
Si el plugin está abandonado, considerá el fork propio. Si dependés de un plugin congelado, evaluá migrar a otro. El stack recomendado del cap. 28B se mantiene actualizado porque los plugins que lo componen están vivos.
No todo lo que está en crates.io con bevy en el nombre vale la pena. Estos son los que el autor del libro probó y descartó, con la razón:
bevy_audio (built-in antiguo): la API era pobre. Reemplazado por bevy_kira_audio para la mayoría de casos.bevy_prototype_lyon: muy útil para formas 2D primitivas, pero no se mantiene al ritmo de Bevy. Úsalo si necesitás, pero con un plan B.bevy_contrib_inspector: obsoleto. Reemplazado por bevy_inspector_egui.bevy_editor-pls: era un editor third-party, congelado. El Inspector General working group es el camino oficial ahora.bevy_ecs_ldtk: históricamente estaba detrás de releases. La versión actual 0.15.0 ya es compatible con Bevy 0.19; documentá bien la versión del crate en tu Cargo.toml.La regla: si ves "prototype" en el nombre del crate, sabé que estás adoptando algo experimental. Úsalo bajo tu propio riesgo.
Si solo te llevas una cosa: el plugin adecuado es el que siga vivo cuando tú termines tu juego. No el más bonito, ni el más rápido, ni el que tenga más estrellas. El que siga vivo.
Abre Cargo.toml. Añade un plugin. Haz un prototipo. Si en 30 minutos no compila, bórralo y prueba el siguiente. La elección no es compromiso matrimonial: es una primera cita. Si no funciona, hay más. — El autor, huyendo a actualizar su Cargo.lock