Posted October 27, 2023 by jaredkrinke
I used Autumn Lisp Game Jam 2023 as an opportunity to explore whether or not it was possible to create an arcade-style game in the browser without a single line of JavaScript (or WebAssembly).
Here is the tech stack I landed on:
The last bullet deserves a little explanation: despite its ubiquity, I've soured on Quicklisp due to security concerns (it downloads source packages unencrypted, over regular HTTP; and it even pulls upstream source code unencrypted). Instead, I'm using Git submodules and ensuring that everything I pull from uses encryption.
I described the architecture in more detail elsewhere, but to summarize: I stream HTML and CSS over a single HTTP request (using chunked transfer encoding) and use an iframe with plain old HTML forms for input.
Having all input incur the overhead of an HTTP post is definitely not a great idea for a snake game that requires precise timing (in fact, the game is pretty much unplayable over my phone's 4G connection), but it does technically work. It was a fun experiment, but not a model for future development.
As far as hosting, I (once again) ended up needing to spin up a VPS. I had originally hoped to use ngrok's free tier, but its interstitial warning page requires JavaScript, which kind of defeats the entire purpose of my experiment.
I mentioned it in the article linked above, but sadly my game, despite not using any JavaScript, does not work under Dillo (an old, pre-JavaScript browser). So sad...
I managed to finish early this time, mostly because I was rushing to get something working, since I was afraid of hitting "unknown unknowns".