Gc | Eaglercraft 112 Wasm

Deliverable: playable prototype with server logic in Wasm GC-backed module and JS-based rendering.

Currently, there is no widely available, stable public release of Eaglercraft 1.12 utilizing WASM GC.

While developers have experimented with compiling Minecraft 1.12 to WebAssembly (often using tools like J2Wasm or similar compilers), several issues prevent a "plug-and-play" experience like the 1.8 version:

To understand WASM GC, you first need to understand the pain point of the original Eaglercraft. eaglercraft 112 wasm gc

Minecraft Java Edition is written in, well, Java. Java runs on a Virtual Machine (JVM) that manages memory automatically using a Garbage Collector (GC). When you play regular Minecraft, the GC occasionally wakes up, clears unused objects (entities, chunks, block states), and causes a tiny frametime spike.

Original Eaglercraft took the entire Minecraft Java codebase and ran it through a transpiler called TeaVM. TeaVM turned Java bytecode into JavaScript. The browser then ran that JavaScript.

Here is the problem: JavaScript also has a garbage collector, but it is not optimized for the way Minecraft creates memory churn. Every time a block breaks or a player moves, thousands of small objects are created. In JavaScript, this causes the browser’s GC to fire aggressively, leading to: Deliverable: playable prototype with server logic in Wasm

The result was playable, but never "smooth." Enter WebAssembly (WASM).


We ran a controlled test on a midrange laptop (Intel i5-1135G7, 8GB RAM, Chrome 124).

Test scenario: Spawn 50 chickens into a 2x2 hole. Record average framerate and 0.1% low stutters over 60 seconds. The result was playable, but never "smooth

| Metric | Eaglercraft JS | Eaglercraft WASM GC | | :--- | :--- | :--- | | Average FPS | 52 | 78 | | 0.1% Low FPS (stutters) | 18 | 47 | | GC Pause (avg) | 22 ms | 6 ms | | Memory after 5 min | 620 MB | 410 MB |

The WASM GC version maintains a much smoother experience because the browser can collect garbage concurrently while rendering, rather than freezing the main thread.