[HN Gopher] Using Deno as my game engine
___________________________________________________________________
Using Deno as my game engine
Author : phaser
Score : 159 points
Date : 2025-10-03 06:33 UTC (4 days ago)
(HTM) web link (explodi.tubatuba.net)
(TXT) w3m dump (explodi.tubatuba.net)
| kamranjon wrote:
| awesome! I have wanted to do something like this since the deno
| compile feature came out - great to see someone pulled it off,
| and last i checked the binaries were significantly less bulky
| than electron.
| zephraph wrote:
| Pretty cool! While I was at Recurse I took a stab at building a
| library like webview client mentioned in the post.
| https://github.com/zephraph/webview. Deno was my first target. I
| really enjoy deno's tooling overall, it's nice to be able to just
| import a server script as a URL and limit its permissions.
| tibu wrote:
| It would be great to see a business model behind it too. You had
| to manufacture all the products in a factory and every product
| would be breaker down to the very basics. This was my idea for
| ages but never started to build it...
| socalgal2 wrote:
| Not the same but there's this https://github.com/kmamal/gpu
|
| It's SDL + WebGPU + Node. It doesn't give you a webview. It gives
| you (windows, input, audio, joypads) via SDL and graphics via
| WebGPU. I'd guess you can run three.js on it.
|
| It's not looking super loved though but it does show a simple
| idea. Glue SDL and WebGPU (via dawn or wgpu) to pretty much any
| language and you get an environment to make portable apps.
| esperent wrote:
| > I'd guess you can run three.js on it.
|
| I'm a bit out of the loop with three.js. How far along is their
| WebGPU renderer? Is it close to feature parity with the WebGL
| renderer?
| laurencerowe wrote:
| This is cool but I don't understand why they didn't choose to
| make it a local first web app since nothing about it seems to
| require unrestricted local access.
| cdaringe wrote:
| He mentions multip long term iirc
| laurencerowe wrote:
| Also possible from a browser with WebRTC:
|
| https://github.com/lesmana/webrtc-without-signaling-server
| ranadomo wrote:
| Fun game. Great work. I think schools are billed twice, once when
| you build and then again at the end of the month. Also there may
| be a bug with "lowest rent". It never seems to change and is
| higher than the "median rent".
|
| Would also like to see more infrastructure like water and
| electricity. Any plans to open source parts of this?
| datatraveler wrote:
| If this requires installing WebView2 on Windows, then I'd
| recommend against this approach. I did something similar myself
| (to avoid distributing a bloated Electron build), but, since the
| WebView2 installer sets its window title to "Microsoft Edge
| Update", I got a lot of negative feedback from a few very vocal
| Steam users who thought my game was trying to re-install
| Microsoft Edge--a browser they had meticulously removed all
| traces of. I think one Steam user even called my (free and open
| source) game "malware", just because of that window title (which
| only appeared on first run, when the WebView2 installer ran).
|
| I'm sorry to say that if I had to do it again, I'd use Electron,
| despite the bloat. I bet Electron would also make distributing a
| Linux build easier, too. (WebView2 didn't work fullscreen on
| Proton when I last tested.)
|
| Sorry to be a downer! Obviously, I originally loved this approach
| since I did something similar--it just didn't end up paying off.
| No one noticed that the download was ~100 MB lighter--but they
| sure noticed a brief flash of "Microsoft Edge" on their screen!
| skinnymuch wrote:
| Hah that is so unfortunate when it's so much nicer not to be
| using electron.
| 20after4 wrote:
| Is there really no way to get around the webview2 installer?
| Why not package it in your app bundle somehow instead of
| installing it as an external dependency?
| magicalhippo wrote:
| > Is there really no way to get around the webview2
| installer?
|
| WebView2 supports both the auto-updating "Evergreen" version
| and a fixed version[1]:
|
| _In the Fixed Version distribution mode, you control the
| timing of updates to the WebView2 Runtime for your app. You
| download a specific version of the WebView2 Runtime and then
| package it with your WebView2 app. The WebView2 Runtime on
| the client isn 't automatically updated._
|
| [1]: https://learn.microsoft.com/en-us/microsoft-
| edge/webview2/co...
| datatraveler wrote:
| For me personally, I was trying to avoid bundling an entire
| browser runtime, so I viewed that approach (bundling
| WebView2's runtime instead of downloading on demand, only if
| needed) as no better than using Electron. At the time, that
| also wouldn't have solved my "Linux support" problem, but the
| blog post author is using webivew (which uses WebKitGTK on
| Linux), so that might not be relevant to them either. At
| which point I have nothing relevant to say!
| moron4hire wrote:
| I made an attempt at using WebKitGTK on Linux to build a
| WebGL game a couple of years ago. I was basing it on some
| existing code that I had already done a ton of work with to
| optimize and make cross-browser compatible. Had basically
| 99% feature parity between Chrome and Firefox.
|
| Lack of standards support in WebKit made it painful to use
| and even meant losing major features like VR support.
| WebKit and WebKitGTK were both extremely unstable in their
| own ways. And I never could figure out a decent debugging
| scenario setup.
| echelon wrote:
| I wonder if Tauri is subject to this.
|
| The sooner Tauri grows Electron/Chrome bundling capabilities,
| the better.
|
| Chunky and predictable beats confusion, errors, and
| inconsistencies.
| mort96 wrote:
| By that logic, every website should bundle their own web
| browser. They don't. Browsers are consistent enough,
| _especially_ when you limit your web browsers to only those
| that OSes provide as web view components.
| surajrmal wrote:
| Bundling your dependencies is in fact something
| applications like to do though. The question becomes
| whether your browser/runtime is the layer you stop
| including deps or the os native apis which that browser is
| built on top is. When you get to physical products the OS
| is absolutely part of the dependencies you want to control
| and deploy, even if it largely exists to run a single
| application.
| raincole wrote:
| By that logic, every app that utilizes Python scripting
| should bundle their own Python runtime.
|
| And they do.
| mort96 wrote:
| Python is neither backwards nor forwards compatible. The
| web is very stable.
|
| And most people don't have a Python runtime installed.
| Almost everyone has an OS with a web view component
| already installed.
| echelon wrote:
| Safari and Edge scare the user about pointer lock control,
| which makes it annoying/impossible to build nice 3D games
| or visualizations in Tauri. Every on click event is met
| with a huge, scary browser-native alert. Chrome doesn't do
| that.
|
| That's just one of dozens of browser inconsistencies we've
| recently dealt with. It's just the most egregious.
| flashgordon wrote:
| Out of curiosity how do you feel about wasm? Reason I am asking
| is I've been doing something like this but using Go and
| phaserjs. I've found the experience pretty awesome and my main
| target was the web so didn't think beyond that. My choice was
| based on comfort with Go and a big frustration with the react
| eco system (also low expertise there).
| hu3 wrote:
| Interesting. Aere you using Ebiten for wasm?
|
| https://ebitengine.org/en/documents/webassembly.html
| flashgordon wrote:
| Dang I am not sure why I was downvoted. But to your
| question I just used a basic MVP pattern where the Go side
| was pushed events from the browser and the game lib did the
| validation and called back methods on the browser to update
| the view state. So the browser side was very stateless for
| me. This made my testing a lot easier.
| CuriouslyC wrote:
| I started out really hyped for Deno, but I feel like in most
| cases Bun or WASM end up being better options. WASM is a
| great option because it has real security unlike Deno, it's a
| bit more involved to work with but that project setup cost
| gets amortized over the life of a big project, so the main
| downside is build chain speed, but Go is pretty good there.
| flashgordon wrote:
| Yeah build speed was actually quite good (I am sure rust-
| wasm has better over all performance but I am not that
| advanced yet). Two things I still am not able to get a feel
| for is:
|
| a. load time - the Go wasm bundles can be large (TinyGo
| should help) but even with 25mb -> 5mb - that 5mb feels
| like big especially on a mobile download (i think?). But
| this is one off so I can suck it up.
|
| b. This feels like a big one. I am only doing turn based
| games so may not be a big issue but it feels like the wasm
| <-> browser ser/deser can be a killer. Thank fully I am not
| doing high (or even medium) FPS games so will deal with
| that later :D
| CommonGuy wrote:
| This shouldn't be a problem with Windows 11 anymore? AFAIK, the
| "evergreen" version of WebView2 is installed by default.
| datatraveler wrote:
| It might even be better than that. It sounds like Microsoft
| pushed WebView2 to (at least some) Windows 10 computers (N.B.
| Steam says 32% of users are still on Windows 10).
|
| Of course, the docs still say:
|
| > Even if your app uses the Evergreen distribution mode, we
| recommend that you distribute the WebView2 Runtime, to cover
| edge cases where the Runtime wasn't already installed.
|
| https://learn.microsoft.com/en-us/microsoft-
| edge/webview2/co...
|
| I wish we knew how prevalent that situation was. Not sure
| what the failure mode would be. But it sure would be nice to
| be able to assume that a modern WebView always exists on
| Windows! That certainly wasn't the case back when I made my
| decision circa 2022.
| ZeWaka wrote:
| It was added in 22H2 Windows 10.
| rovingeye wrote:
| MicrosoftEdgeWebview2Setup.exe /silent /install
| debugnik wrote:
| I'm assume (wrongly?) that installing this dependency is
| managed by Steam before the first run, not up to them.
| zamadatix wrote:
| One can opt in to the common redistributables (which
| usually makes sense if the thing you're looking for is
| covered) or decide to package custom steps into
| InstallScript files
| https://partner.steamgames.com/doc/sdk/installscripts. In
| either approach, Steam will automatically manage the
| runtime dependency installation for the user before the
| "Play" button appears.
| rovingeye wrote:
| Thanks for the info. Looks like they're using /silent
| right there in the example
|
| "Steam customers love a quick and silent install. Add
| silent or quiet parameters to all run process commands
| and only add what you absolutely need for the game."
| zigzag312 wrote:
| Impeller renderer is about 100 KB [0]. You still need to add
| things like text layouting library and image codecs to that
| size. A few MB in total I guess, but much less than a full web
| engine.
|
| While Flutter could be used to draw UI to texture, Impeller
| could also be used by other UI frameworks. Recently, Avalonia
| team experimented with replacing Skia and a Flutter developer
| asked, if they are interested in using Impeller and even
| offered some help [1].
|
| This would probably be suitable, as a more lightweight
| alternative to WebView, for integrating into game engines.
|
| [0]
| https://chromium.googlesource.com/external/github.com/flutte...
|
| [1]
| https://www.reddit.com/r/dotnet/comments/1nv3snm/comment/nh7...
| surajrmal wrote:
| Even if you don't opt for gpu compositing, you can be 8x more
| performant than skia by writing something yourself. Skia is
| optimized for portability, not necessarily performance.
| matt3210 wrote:
| I saw Dino, which is a web technology, but I was very saddened
| that after trying to click components in every screenshot, non of
| them were web based and just screenshots :frowny-face:
| Agentlien wrote:
| This game is to Sim City what My Summer Car is to Need For Speed.
| That's delightful!
| pjmlp wrote:
| I would rather use the user's installed browser, using Chrome
| Firefox, Safari as the game engine.
| potatoman22 wrote:
| I'm currently making a tycoon game with React, it's not bad for
| making some games. I use setInterval for a simple game loop along
| with a zustand store for the game logic. I'm keeping the game
| logic and state client-side for now, but I might move it over to
| a server in the future.
| fainpul wrote:
| Just a note for those planning to make a simple game or
| animation in JavaScript: in most cases it's preferrable to use
| `requestAnimationFrame` instead of `setInterval` or
| `setTimeout`.
|
| https://stackoverflow.com/a/38709924
| bob1029 wrote:
| > But the fast workflow enables me to focus on the insanity that
| is the foolish endeavor of simulating the world, instead of
| getting sidetracked on making 3D and UI actually work in Go, or
| intoxicating my brain with Unity
|
| I'm glad the author found something that works for them. That
| said, if the author's goal _was_ to publish a game with intention
| of turning a profit, this attitude can be very counterproductive.
| It does work out really well in some cases, but more often than
| not it results in failure. The distribution looks like a bathtub
| curve - either your concept is so simple that a DIY thing can
| work (Minecraft) or you have the other thing (Elden Ring).
|
| The most challenging parts of game dev happen in places like
| photoshop, blender, audacity and blank sheet of paper. Turning
| the art integration tool into your primary obsession is a
| fantastic way to slide on all of these other value drivers. For
| example, populating a game with premade assets from the store is
| no longer a viable commercial solution when your audience has
| seen hundreds of prior arrangements of the same.
|
| If the game is a hobby or other not-for-profit venture, then all
| of the advice in this article is fantastic. I started my game dev
| journey doing everything in the web as well. It is still a very
| compelling platform target. The thing that really gets me
| thinking is that despite my ability to create flawless webGL
| builds out of unity is the fact that I don't bother anymore. The
| need kind of went away once it became clear that layers like
| Proton on Linux would actually cover my ass.
| CaptainOfCoit wrote:
| > For example, populating a game with premade assets from the
| store is no longer a viable commercial solution when your
| audience has seen hundreds of prior arrangements of the same.
|
| Focusing purely on profits (as your comment does), is this
| really true? Production costs seems really low for those sort
| of games, and I see countless of them on the Playstation Store
| even, which does have some barrier to entry, so someone must
| find it profitable enough to continue churning out those sort
| of slop games.
|
| But the author of this post seems to not do it for the profits,
| they have other goals in mind, so not sure it really matters in
| the end.
|
| > If the game is a hobby or other not-for-profit venture, then
| all of the advice in this article is fantastic
|
| Good job author for creating a fantastic blog post, I agree
| with parent :)
| Cthulhu_ wrote:
| It reminds me of the idea behind Dwarf Fortress, which has been
| a sleeper hit for 20 years before one of the creators needed
| money for a cancer treatment; their Steam release earned them a
| good chunk of money. But for 20 years, it was a not-for-profit
| labour of love.
| mort96 wrote:
| I don't understand how Deno is the game engine here, isn't it
| just the runtime for their chosen programming language? Is the
| CLR the "game engine" for games written in C#?
|
| Anyway, this seems like a fun project and a neat use of Deno. I
| didn't know about the compile feature.
| zahlman wrote:
| That was my first objection.
|
| My second objection is that when I see a title of the form
| "using X as Y" (especially here, where the audience is
| technical) I expect the article content to be primarily about
| how X is useful for Y, and about the specific actions taken to
| make it fit for purpose. But this one seems to be largely about
| the consideration and rejection of other tools, and then the
| rest is basically just celebrating the experience of having
| made it work.
|
| The main thing I learned about the game, outside of the
| screenshots and basic description, is that it uses a client-
| server model. Even though there's no clear reason why that
| would be necessary or even helpful beyond "it's written in
| TypeScript and that's what TypeScript devs are accustomed to".
| Certainly I can hardly fathom that any original implementation
| of SimCity too such an approach.
| thomasfl wrote:
| Upvote for making a great city planning game. This could teach
| the young generation the importance of good city planning for the
| economy, the environment and the well-being of people. The
| architectural uprising is just as much about city planning as
| beautiful architecture. Human friendly towns is good for
| business, saves the municipalities money and increases quality of
| life. Ideally people should be paid to live in cities.
| Disclaimer, I am the chairman of the Norwegian architectural
| uprising.
| MrGilbert wrote:
| > teach the young generation
|
| Looking at the political situation around the world, I think
| learning should not stop at a certain age. I'm pretty sure even
| the "older" generation can learn from this. People that grew up
| with SimCity are now in their forties and fifties, and some
| never quit gaming at all.
| Tade0 wrote:
| > Ideally people should be paid to live in cities.
|
| Just make it actually cheaper than the suburbs and you'll have
| more people.
|
| ...who in turn will create demand driving prices up.
|
| I'm 100% with you on this, as I spent close to an hour in
| traffic yesterday driving _into_ the city during the afternoon
| rush hour, but transport is so much cheaper than real estate,
| that plenty of people are actually stuck outside big cities.
| wiseowise wrote:
| > Is it too simple? Maybe. But Cities Skylines is made using
| Unity and can make your laptop so hot that doubles as heating for
| the winter.
|
| How does Microlandia fare against cities skylines? I have played
| neither, but I'm curious about performance comparisons between
| fully web sim game against unity one.
| Labo333 wrote:
| I don't get why one wouldn't just use webworkers to run the
| simulation instead, thus making the game fully executable in a
| web browser.
|
| If deno has some perks during development, there must be a way to
| replace websocket with some other transport that works with
| webworkers for "production" builds.
| stephenlf wrote:
| The author is so close to using Tauri that he's starting to taste
| metal.
| reactordev wrote:
| Bun + WebView + WebGPU is my new experiment. Deno also has
| bindings for glfw but I couldn't get it to play nice with WebGPU
| or OpenGL beyond 3.2 profile.
|
| As someone who got into programming because of games, wrote a few
| game engines, released a few - the concept of being able to use
| webdev tech (beyond UI stuff) for the core game graphics is just
| unbelievable.
|
| Obviously you won't get every ounce of juice from the machine but
| a lot of games don't require that AAA touch. I'm glad to see the
| author's on the same tract as me. WebGPU is so awesome. My
| biggest issue with this whole approach is that is super trivial
| to spit out the gltf models that anyone can use your assets.
|
| Trying to work some old school pkg logic into the mix doesn't
| really help either. Barring writing my own binary format, I'd
| love to see a way to make gltf models secure. Allowable from your
| site but not loadable from elsewhere or something like that. DRM
| for the art assets.
| efilife wrote:
| I think that Godot engine would be perfect for this project. Can
| produce a single executable, super easy 3D, very lightweight, and
| very extensible. No webview dependencies, 4.4 still supports
| windows 7.
|
| https://godotengine.org/
| butz wrote:
| Commercial, and pretty good game, CrossCode, was coded in
| "HTML5", more precisely - JavaScript. And new game from same
| developers seems to be using same technologies, probably more
| advanced, as it looks amazing, with some 3D-ish effects.
| gr4vityWall wrote:
| >Once I got into the new development workflow it was clear to me
| this was a huge win: I can develop using vscode with the Deno
| extension so the server-portion of the game runs with a full
| debugger, and with Vite I have a live-updating view of the game
| right next to my vscode window. Since the game is stateful on
| every tick I can live reload portions of the code without
| restarting my current game. Watching your changes go live as you
| are playtesting is such a heartwarming feeling could not give up
| now that I've tasted it.
|
| IMO This is the key part of the article. Having live reload
| available shortened the feedback loop drastically.
|
| It makes an even bigger difference for game development than it
| does for web stuff, due to longer compile times. I hope it
| becomes commonplace for more more free game engines.
| lwansbrough wrote:
| Occasionally I've been working on this: https://github.com/rune-
| runtime/rune
|
| The concept is to provide a WASM runtime for games with all the
| functionality you'd need. Graphics, audio, storage, input, UI,
| etc.
|
| It's made in Rust and doesn't use a browser engine at all.
|
| Haven't touched it in a little while but the concept is still
| sound. It's all the benefits that a mature engine would give you,
| without the engine. Eventually there would be a package manager
| where you would be able to find engines built for this runtime.
| thebigshane wrote:
| Why not make this a web/browser game?
|
| I don't feel like the author explained why such focus on being a
| downloadable game. Just nostalgia or because they want it
| included in Steam? With a web ui, why not make this a web game?
|
| I absolutely loved the original SimCity and SC2000. The focus on
| creation, management, and simulation was always more fun to me
| than the graphics.
|
| This game looks like so much fun as well and eager to give it a
| try.
| hoofedear wrote:
| Cool article and game! I've been using Tauri for my three-js game
| so far and it's been great. Glad that there are other good
| options outside of Electron
___________________________________________________________________
(page generated 2025-10-07 23:02 UTC)