6/25/2026 at 5:58:04 PM
I am the freaky outlier that's actually excited about this.My city builder game, Microlandia[1], runs on Deno. The game's graphics and UI is a Three.js/React app, but the guts of the game are in a "sidecar" process that is a `deno compile` typescript executable.
On Mac, there's a Tauri shell that runs both client and server, and for Linux and Windows we use Electron, (Tauri proved to be quite problematic except when in macOS)
Why on earth did I choose this cursed stack instead of a "proper" game engine? Well,
Turns out developing the simulation in typescript with a performant sqlite driver hot reloads very fast and with a light code editor and my browser open on a second window I see the stuff updating live as I make it.
Deno has a good VSCode extension with test helpers and a fast language server. WebGPU is good enough for me to write any cool shader I can think of and I don't miss any capability of a game engine.
More importantly, not using Unity/Unreal brought back to me the joy of game development that I had lost due to and horrendous UI-driven workflow that takes me back to Macromedia Flash (yes, I am that old). Oh, and the licensing.
And I know I could switch to Bun with small changes in code but Deno has never got in my way. Maybe it's because I avoid using libraries at all costs (and don't need much).
Also, Typescript/React is such an amazing language for building a complex tycoon/simulation type of game that deals with a lot of data and displays it. Anyone who's worked on Unity knows it's the dark ages for UI over there.
I'm unsure if i'll port the game to Deno Desktop anytime soon but if I start a game again I will use this stack again, as my game engine, this time without Electron or Tauri.
by phaser
6/25/2026 at 11:04:57 PM
https://80.lv/articles/developing-microlandia-a-socioeconomi...Do you have a dev blog or anything else? This is super interesting to me as I have an idea for a game I can rapid prototype in the browser.
by pragmatic
6/26/2026 at 9:31:55 AM
Here is a blog article I wrote when the game was super early but it's outdated.https://explodi.tubatuba.net/2025/09/26/using-deno-as-my-gam...
I also asked claude to give me a 1-paragraph summary of how our stack works. Anyway, if you have more questions i'm happy to answer e-mail (check my profile)
Robotic text below:
The whole thing is TypeScript end-to-end, run by Deno, which acts as the glue. In the browser, there are just two pieces communicating over a native WebSocket: a React front end bundled by Vite—Deno runs Vite for the development server and hot reload—and a Deno back end that owns the simulation.
The simulation runs on a tick loop, with each tick representing roughly one in-game day and taking about one second of wall-clock time. The client sends small command events such as `newBuilding` and `bulldoze`. The server processes each tick and broadcasts all resulting state changes in a single batched frame. This makes the client essentially a renderer of authoritative server state, with a full resynchronization whenever it reconnects.
Under the hood, the simulation distributes heavy workloads—including demographics, taxes, and housing markets—across Web Workers. These workers coordinate through a shared SQLite database used as a cross-thread bus, allowing the game to simulate tens of thousands of citizens.
The 3D layer uses Three.js with WebGPU, a WebGL2 fallback, TSL shaders, and batched draw calls. It runs imperatively in its own `requestAnimationFrame` loop inside one large component, deliberately avoiding React Three Fiber. React manages only the 2D HUD and menus layered on top, keeping the performance-critical rendering loop entirely outside React’s reconciliation process.
The key point for prototyping is that the browser application—the client plus a local server connected over WebSocket—is the entire game. The desktop builds are simply thin native shells around the exact same application. On macOS, the shell uses Tauri with Rust and the operating system’s WKWebView. On Windows and Linux, it uses Electron with bundled Chromium.
Each shell launches the server, compiled into a single self-contained binary using `deno compile`, as a sidecar process. It then finds an available localhost port and points its webview at the bundled client. This means the game can be built and iterated entirely in the browser, with native packaging added only at the end.
by phaser
6/25/2026 at 6:55:18 PM
Congrats on your game it reminds me both of SimCity on the SNES and SimCity 2000 (pc).I'm also using a cursed stack (deno + pyodide) and it's awesome! Everything works surprisingly well and I can do my Python experiments in a notebook while hot reloading via vite in a browser + quickly try things in the dev console.
by bobajeff
6/25/2026 at 8:26:44 PM
is it also a game? godspeed!by phaser
6/25/2026 at 9:43:55 PM
No, it's just a calculator app. So I guess it's not that crazy of a way to use those together but it sure seemed like it would be before I started tried it.by bobajeff
6/25/2026 at 8:33:13 PM
> Tauri proved to be quite problematic except when in macOSCan you elaborate?
by auraham
6/25/2026 at 9:26:57 PM
For Linux, it was an ABI nightmare, the Steam sandbox is based on Debian 11, and glibc/GTK/webkit can't be reliably static-linked to a modern version that Tauri wants. We also ship a stand-alone version in itch.io that doesn't have the limitations of the sandbox but it was a friction point for many players having to figure out how to meet the dependencies.For Windows, it was a bit less dramatic, but WebView2 is controlled by Windows Update in Windows 10, Some players have it, some players don't. And requiring windows 11 and up is a very unpopular choice. Maybe could have been solved by vendoring it but also not super clean.
I look forward to give it a try again, when Steamworks Linux runtime 4.0 comes around, and less people are still using Windows 10.
by phaser