Anexo D. Mapa de plugins del ecosistema Bevy 2D

ANEXO D · Material de referencia

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.

Tabla maestra de plugins

Leyenda de Madurez:

PluginVersión Bevy 0.18/0.19CategoríaCuándo SÍCuándo NOAlternativaMadurez
bevy_sprite (built-in)✅ ambasRender / 2DJuegos 2D puros, sprites simples, atlasesSi necesitas rotación 3D de un sprite 2Dbevy_sprite_3d🟢
bevy_sprite_3d✅ 0.18 (en revisión)Render / 2DSprites 2D con iluminación 3D, billboardsSi tu juego es 2D puro y no quieres complicartebevy_sprite🟡
bevy_ecs_tilemap✅ 0.18, 0.19 en caminoTilemaps / RenderMapas de tiles grandes (RPG, RTS, plataformas)Si solo tienes un fondo estáticobevy_ldtk (alto nivel)🟢
bevy_ldtk✅ 0.18, 0.19 parcialTilemaps / AssetsNiveles diseñados en LDtkSi editas a mano o con Tiledbevy_ecs_tilemap + Tiled exporter🟡
avian2d✅ 0.18 y 0.19Física 2DPlataformas, top-down, cualquier cosa con colisiones 2D realesSi necesitas simulación 3D (usa avian3d)bevy_rapier2d, bevy_xpbd_2d🟢
bevy_rapier2d✅ 0.18 (suele ir 1 ciclo por detrás)Física 2DProyectos ya en Rapier 0.x/0.14, sensores avanzadosNuevos proyectos (avian ha comido su lunch)avian2d🟡
bevy_xpbd_2d⚠️ soporte irregularFísica 2DSimulación XPBD específica, papers académicosJuegos comerciales — autor en mantenimientoavian2d🟡
bevy_kira_audio✅ 0.18, 0.19 compatibleAudioMúsica dinámica, fade, sound managersSi solo necesitas reproducir un .ogg y yabevy_audio🟢
bevy_audio (built-in)✅ ambasAudioProyectos pequeños, prototipos, "solo quiero sonido"Si vas a hacer un juego con muchas capas de audio en runtimebevy_kira_audio🟢
leafwing-input-manager✅ 0.18 y 0.19InputJuegos medianamente serios, rebindings, gamepadsHola Mundo (sobrecarga)Hecho a mano con bevy_input🟢
bevy_replicon✅ 0.18 y 0.19NetworkingMultijugador autoritativo, replicación de componentesP2P caótico, single-playerlightyear, bevy_renet🟢
lightyear✅ 0.18, 0.19 parcialNetworkingNetcode custom, lag comp, prediction client-sideSi quieres algo "que simplemente funcione"bevy_replicon🟡
bevy_renet⚠️ soporte 0.18 lentoNetworkingVienes de la era 0.13 con todo montadoNuevos proyectos — renet en pausabevy_replicon🔴
sickle_ui⚠️ atascado en Bevy 0.14 (v0.4.0 del crate)UI / UXUIs 2D in-game (inventarios, menús, tiendas) — útil si estás en 0.14Bevy 0.15+: no compila sin fork. Mejor bevy_egui o esperar a bevy_feathers establebevy_egui, bevy_feathers🔴
bevy_ui (built-in)✅ ambasUI / UXUIs in-game simples, botones, sliders, textoUI de editor, formularios complejossickle_ui, bevy_egui🟢
bevy_egui✅ 0.18 y 0.19UI / UXPanels de debug, editores, dev toolsUI in-game pulida para jugadoressickle_ui, bevy_cosmic_ui🟢
bevy_cosmic_ui⚠️ 0.18 wip, 0.19 tbdUI / UXUI declarativa con cosmic-textPrimer juego — está verdebevy_ui + manual🔴
bevy_feathers (built-in 0.19, experimental)✅ 0.19 (preview en 0.18)UI / UXUI 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 pelobevy_ui a pelo🟡
bevy_skein⚠️ solo 0.18, autor slowAnimaciónSi necesitas un editor de animaciones in-engineJuegos pequeños, animaciones simplesbevy_spritesheet_animation🟡
bevy_spritesheet_animation✅ 0.18 y 0.19AnimaciónSpritesheets clásicos, frame-a-frameSkeletal animation, timelinesbevy_skein🟢
bevy_hanabi✅ 0.18 y 0.19PartículasExplosiones, magia, fuegos artificiales, GPU computePocos efectos, móbiles gama bajabevy_particle_systems🟢
bevy_particle_systems⚠️ 0.17, 0.18 lentoPartículasSi ya lo usabas y no quieres migrarNuevos proyectos en 0.18+bevy_hanabi🔴
bevy_asset_loader✅ 0.18 y 0.19Carga de assetsJuegos con loading screens, assets por nivelPrototipos throwawaybevy_common_assets🟢
bevy_common_assets✅ 0.18 y 0.19Carga de assetsParsers reutilizables (ROMLoader, JSONLoader)Si solo necesitas tipos básicosbevy_asset_loader🟢
bevy_save✅ 0.18 y 0.19Save / SerializaciónSavegames complejos, migraciones, perfilesSi solo guardas 3 enterosbevy_pkv🟢
bevy_pkv✅ 0.18 y 0.19Save / SerializaciónSettings, high-score, key-value puroWorlds enteros, snapshotsbevy_save🟢
bevy_world_serialization⚠️ 0.17, 0.18 wipSave / SerializaciónSnapshots del ECS World (debug, replay)Producción — en pañalesbevy_save + custom🔴
vleue_navigator (sucesor de bevy_pathmesh)✅ 0.18 (v0.15+ del crate)PathfindingNPCs moviéndose por mapa 2D con obstáculos usando navmesh auto-generadaPathfinding muy custom o grids purosA* manual, astar🟡
bevy_light_2d (community, jgayfer)⚠️ atascado en Bevy 0.18 (v0.9.0)Render / Iluminación 2DIluminación 2D sobre community crate (sombra, occlusion)Bevy 0.19 nativo ya trae PointLight2d + AmbientLight2d en bevy::render::light_2dIluminación nativa 0.19🟡
bevy_ecs_tiled✅ 0.13.1 → Bevy 0.19Tilemaps / RenderMapas 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.19Dev toolsVolcar el schedule graph a dot/svg para depurar orden de sistemasBuild de release al usuariobevy_inspector_egui (en vivo)🟢
bevy_state (built-in 0.14+)✅ ambasStateCualquier 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.19Dev toolsInspeccionar/modificar entidades en runtimeBuild de release al usuariobevy_remote🟢
bevy_remote✅ 0.18 y 0.19Dev toolsHot-reload, profiling remoto, BRPDev local simplebevy_inspector_egui🟡
bevy_editor (built-in 0.18 preview)✅ 0.18 preview, 0.19+EditorEditor visual oficial de BevyProducción — sigue en preview🟡
bevy_rand✅ 0.18 y 0.19OtrosRNG determinista, reproducible, seedableSi te da igual el determinismorand crate a pelo🟢
bevy_kira_aseprite⚠️ 0.17/0.18, soporte intermitenteOtrosAnimaciones en Aseprite, import directoSpritesheets ya hechas a manobevy_spritesheet_animation🟡
bevy_trickfilm⚠️ 0.17, autor desaparecidoOtrosAnimación 2D cutout con jointsCualquier proyecto serio en 0.18+bevy_spritesheet_animation🔴
bevy_prototype_lyon⚠️ abandonado, 1D onlyOtrosGeometría procedural 2DProducción — más polvo que commitsDibuja a mano con meshes🔴

Nota: "0.19 compatible" significa compat declarada al cierre de este anexo. Comprueba siempre el Cargo.toml antes 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.

Notas rápidas por plugin (1 línea cada uno)

🚫 **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.

Cómo elegir un plugin

Ya tienes la tabla. Cinco criterios que uso cada vez que meto un crate nuevo en Cargo.toml.

1. ¿Está mantenido? (último commit reciente)

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.

2. ¿Sigue el release train de Bevy?

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.

3. ¿Tiene tests?

Abre tests/ o busca #[test]. Vacío = "lo probó en su juego" (eso no es un test, es una anécdota). CI, mejor.

4. ¿Tamaño de la API? (¿mega-plugin o enfocado?)

Regla: docs.rs con más de 2000 items, prepárate. Menos de 200, lo dominas en un finde.

5. ¿Tiene ejemplos?

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.

Anti-patrones de elección de plugins

Tres anti-patrones que más entierran proyectos (los he visto y cometido).

Anti-patrón 1: "Está abandonado pero igual funciona"

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".

Anti-patrón 2: "Por si acaso, meto dos"

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.

Anti-patrón 3: "Es de un solo tío muy majo"

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.

Mi stack recomendado para empezar (2026)

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.

PluginPara qué lo uso
avian2d 0.7.0Física 2D seria, ECS-first.
leafwing-input-manager 0.21.0Input multiplataforma, rebindings.
bevy_kira_audio 0.26.0Audio con fade, buses, mixing.
bevy_ecs_tilemap 0.19.0Tilemaps chunked y rápidos.
bevy_hanabi 0.19.0Partí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.0RNG 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.

Cierre

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


Apéndice D.1: plugins introducidos en la edición 3.0 (capítulos nuevos)

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).

Dev tooling (cap. 26B)

PluginVersiónNotas
bevy_inspector_egui0.37.0Estable, sigue release train. Necesita bevy/debug feature.
bevy::remote + bevy::remote::httpbuilt-in desde 0.16BRP no requiere crate externo.
tracy + bevy/trace_tracybuilt-in featureEl profiler Tracy se conecta a la GUI por red local.
bevy_mod_debugdump0.16.0Exporta el schedule graph a Graphviz (.dot/.svg).

Persistencia con migraciones (cap. 24B / cap. 28B)

PluginVersiónNotas
bevy_save2.0.1 → Bevy 0.16 (verificar 0.19)Trait Migrate para migraciones de save.
bevy_persistent^0.19Wrapper sobre serde. Más simple que bevy_save.
bevy_pkv^0.19Key-value store. Bueno para settings.
bevy_simple_prefs^0.19Persistencia de Resources a un archivo RON.

Internacionalización (cap. 23B)

PluginVersiónNotas
bevy_fluent^0.19 (verificar)Sobre Fluent (Mozilla). Más completo.
bevy_simple_i18n^0.19Sobre rust-i18n. Más simple.
bevy_locales0.1.0Wrapper sobre bevy_fluent.

Animación 2D (cap. 22B)

PluginVersiónNotas
bevy_aseprite_ultra0.9.0 → Bevy 0.19Aseprite con hot-reload completo. Recomendado.
bevy_aseprite0.12 (desactualizado)El viejo, congelado.
bevy_spritesheet_animation^0.19Animación por spritesheet simple.
bevy_sprite_animation^0.19Reanimator-style.
bevy_tweening0.16.0 → Bevy 0.19Tweens y easing. Complemento, no sustituto.
bevy_spine0.10.1 publicado (main en 0.12 para 0.19)Skeletal animation Spine. Migrando a 0.19 en main.
bevy_hanabi0.19.0 → Bevy 0.19Partículas GPU con compute shaders.
bevy_ecs_ldtk0.15.0 → Bevy 0.19Carga de niveles LDtk.
bevy_ecs_tilemap0.19.0 → Bevy 0.19Tilemaps chunked sobre ECS.
bevy_ecs_tiled0.13.1 → Bevy 0.19Soporte del formato .tmx de Tiled. Alternativa a bevy_ecs_tilemap.

Networking con rollback (cap. 25B)

PluginVersiónNotas
bevy_replicon0.41.1 → Bevy 0.19Replicación autoritativa base. Es la versión verificada para 0.19.
bevy_rewind0.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_ggrs0.22.0 → Bevy 0.19P2P con GGRS. Más viejo.
lightyear0.28.0 → Bevy 0.19Netcode de bajo nivel con prediction/interp.

Render 2D avanzado (cap. 14E)

PluginVersiónNotas
bevy-rust-gpuexperimentalEscribir shaders en Rust compilado a SPIR-V. NO recomendado para producción.

Caveat global: el release train es rápido

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:

  1. ¿Tiene release para tu versión de Bevy?
  2. ¿Cuántos commits en los últimos 3 meses?
  3. ¿Cuántos issues abiertos sin responder?
  4. ¿Cuántos contributors?

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.


Apéndice D.2: plugins rechazados (con explicación)

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:

La regla: si ves "prototype" en el nombre del crate, sabé que estás adoptando algo experimental. Úsalo bajo tu propio riesgo.


Cierre (de verdad)

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