Show HN: Journey – A Custom 2D ECS Game Engine Written in Rust and WGPU

Dev builds his own game engine; commenters cheer, roast the loading screen, and beg for mobile

TLDR: A dev launched Journey, a DIY 2D game engine in Rust that runs in the browser, to learn how graphics really work. Comments split between applauding the deep dive and roasting the user experience—especially a pointless loading screen and no mobile support—turning a passion project into a UX showdown

A brave dev just dropped “Journey,” a hand-built 2D game engine coded in Rust (a fast, safety-first language) that runs in your browser via WebAssembly. Instead of using big-name engines like Unity or Godot, he built his own to learn what’s under the hood—how graphics talk to the computer and why performance tanks.

The crowd? Split. Supporters hype the learn-by-building spirit, echoing the OP’s vibe: it’s a “long-term R&D playground.” They love the data-first design (think Lego pieces you snap together) and the promise of draw-once, run-anywhere graphics. For non-devs: a “game engine” is the toolbox that moves characters and draws everything on screen; this one is DIY to the core.

But the other half showed up with popcorn and pitchforks. On phones, people can’t even play—cue the plea to just show GIFs. And the award for most roasted feature goes to… a loading screen for a text page. One joker called it “the real boss fight,” another quipped that Rust’s strict safety referee “hates fun.”

So yes, it’s a gutsy passion project about learning the gritty bits. But the thread’s vibe? Half masterclass in engine design, half UX court trial. Build the car from scratch? Sure. Just don’t make people wait to read the manual

Key Points

  • Journey is a custom 2D game engine built in Rust, using wGPU for graphics and compiling to WebAssembly for browser execution.
  • The engine adopts an ECS architecture to ensure data locality, with the World storing columns of component data and systems iterating over them.
  • Rust’s borrow checker drove decoupled design and a custom System Runner enabling safe mutable/immutable borrows without runtime overhead.
  • wGPU provides cross-platform rendering: Vulkan, Metal, and DX12 on desktop, and WebGL2/WebGPU in the browser.
  • Graphics require manual setup, including buffer lifecycle management, bind groups, uniform buffers, and WGSL shaders; even drawing a sprite involves a substantial render pipeline.

Hottest takes

"Journey is my long-term R&D project" — ujjwalvivek
"On a mobile device I can't interact with the game" — Hammershaft
"Why do you need a loading screen to show me a markdown file?" — owenpalmer
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.