Why I changed the engine
Mine Mage Minion started life as a hand-rolled C++ game on top of raylib. It worked, but the frame rate fell off a cliff the moment the screen filled with enemies, which is exactly what a wave-survival game is supposed to do.
On the raylib side I had also hand-rolled my own ECS, and I just wasn't good enough at it. It kept producing undefined behavior: weird bugs that only showed up at runtime, memory management issues I didn't fully understand, hours lost chasing crashes with no clear cause. Bevy's ECS is battle-tested and none of that class of bug happens anymore.
So I ported the whole thing 1:1 to Bevy (Rust). Same game, same systems, same content, different engine. This page is the honest before/after: frame rate under enemy load, and how big the builds ended up on each platform.
Short version: raylib wins on an empty map and on download size. Bevy wins everywhere that actually matters once the game gets busy, 2.2× the frame rate at 1000 enemies, and it stops falling apart where raylib drops below 30.
Both versions were benchmarked on the same laptop: a GTX 1650 Mobile, Ryzen 5 3550H, 32 GB dual-channel RAM at 2400 MHz. Take the exact numbers with a grain of salt, I'm not that good at optimizing either engine, so these could shift by 10–15 fps with better tuning on either side. The overall shape of the comparison should still hold.