Docker images are hundreds of MB; a full game engine compiles to 35MB WASM

· web cloud · Source ↗

TLDR

  • A Godot 4 export with GL Compatibility renderer, Jolt physics, GDScript, and Ink runtime compiles to 35MB WASM, less than python:3.14-slim-trixie before any deps.

Key Takeaways

  • Godot 4 full 3D engine WASM artifact: 35MB. python:3.14-slim-trixie: 144MB. node:latest: 421MB. A Python AI agent: 1.45GB.
  • Facebook’s homepage loads 44MB across 379 requests – the full Godot engine binary is smaller.
  • Go (livekit at 75MB) is the closest Docker competitor, but wasip1 lacks sockets and threads, blocking WASM server adoption.
  • Practical WASM server targets today require Rust or C/C++; Zig is close but not production-ready. Cloudflare Workers, runwasi, and kwasm exist but haven’t shifted defaults.
  • The author draws a parallel to ARM nodes: 10x size advantage existed for years before ARM became standard practice.

Hacker News Comment Review

  • Commenters challenged the comparison directly: Docker images bundle a full OS and libs; the WASM blob depends on a browser, which depends on Chrome (~404MB installed) and GPU drivers – the runtime cost is just shifted, not eliminated.
  • On the WASM side, the 35MB figure is not a floor. Unity IL2CPP via Emscripten reaches ~3MB; hand-coded C99 WASM games run under 107KB uncompressed. Godot 3 outputs were reportedly 2-3x smaller.
  • The “runs in any browser” claim drew a concrete failure report on Chrome 148 / Fedora 44 with a 4090 RTX: WebGL2 not available, engine refuses to load.

Notable Comments

  • @Tsarp: Rust binary in a scratch Docker image can ship under 5MB; same project’s WASM build is under 1MB – undercuts the framing that Docker is inherently bloated.
  • @AshleysBrain: Construct game engine exports ~300KB by targeting web APIs natively and tree-shaking unused components, avoiding shipping a heavyweight runtime entirely.

Original | Discuss on HN