Eaglercraft 1.12 - Wasm Gc ((top))
Alex grinned. Eaglercraft 1.12 with Wasm GC wasn’t just a tech demo. It proved that full legacy Minecraft could live forever, directly in browsers, with near-native performance — no plugins, no downloads, no Java runtime.
The first test was a superflat world with 64 villagers. On the JS backend, frame rate dropped to 15 FPS with major GC spikes every 5 seconds. On Wasm GC? A steady 45 FPS. No visible hitches. The collector ran concurrently, reclaiming entire chunks of blocks and entity pathfinding data without stopping the world — in both senses.
But it wasn't magic. Wasm GC lacked finalizers, so native resources (like WebGL textures) still needed manual cleanup. The class hierarchy of Minecraft — TileEntity subclasses, IRecipe types — all required precise casting support. And the biggest hurdle: reflection. Minecraft 1.12’s ObfuscationReflectionHelper and dynamic proxies broke. Alex had to write a custom transformation pass at compile time to replace reflective calls with direct Wasm GC casts. eaglercraft 1.12 wasm gc
This was Eaglercraft.
WebAssembly Garbage Collection is a new proposal that allows compiled languages (Java, C#, Kotlin) to manage memory using the browser’s built-in GC, rather than emulating it in JavaScript or manually managing linear memory. For Eaglercraft, this was revolutionary. Alex grinned
Eaglercraft had already pulled off the impossible: a full Java-to-JavaScript recompilation of the Minecraft client using TeaVM, plus a custom WebSocket-based multiplayer protocol. It ran in any modern browser, no installation needed. But version 1.12 was a beast — over 8 million lines of Minecraft code, plus the labyrinthine complexity of the 1.12.2 engine. Performance stuttered. Garbage collection froze the screen mid-PvP.
Then came the experiment: .
After weeks of patching, a breakthrough: the first stable 1.12.2 survival world running entirely in Wasm GC mode. Chunk loading was snappy. Entity AI computed faster. And the memory footprint? Down 30% — because Wasm GC structs are far more compact than JS objects.