Here’s an informative story about and its experimental Wasm GC backend. In a dimly lit server room, a developer named Alex stared at a browser tab. Running Minecraft 1.12.2 — complete with Forge mods, redstone contraptions, and shaders — inside a vanilla browser. No plugins. No native code. Just JavaScript and WebAssembly.
That night, the code was pushed to a public branch. Within days, players were running modded 1.12 worlds on school Chromebooks, fighting the Ender Dragon with zero lag spikes. eaglercraft 1.12 wasm gc
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. Here’s an informative story about and its experimental
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. No plugins
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.
This was Eaglercraft.
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.