Eaglercraft 1.12 Wasm Gc [top] -

And the browser’s garbage collector just hummed along, quietly collecting fallen leaves in the background.

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.

Then came the experiment: .

Alex recompiled the 1.12 client using a custom TeaVM fork targeting Wasm GC. Instead of outputting JavaScript heap management, every object allocation, every new BlockPos() , every HashMap of entities — all became Wasm GC structs and arrays, traced and collected by the browser’s optimized garbage collector. And the browser’s garbage collector just hummed along,

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. The class hierarchy of Minecraft — TileEntity subclasses,

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.