Gemini Ink Server: Play choice text adventures over the gemini protocol!

Published on 2020-11-14 by DistractedMOSFET

Yesterday I spent a few hours creating a nodejs server that you can use to play Ink games over the Gemini protocol. Combining two somewhat obscure technologies meaning that both groups don't really know what this entails!

Image of Gemini Ink Demo Server in AV-98

Gemini Protocol

The Gemini Protocol is sort of like a modern day BBS. A text-only internet alternative to the web, made pretty much by and for computer weirdos. These days it appears to mostly be an internet underground of text blogs.

Tech-wise it's experiment in "how simple of a protocol could you make and still be useful". It uses TCP connections, a markdown-like document format (but even simpler, there's no in-line links for example), TLS for encryption and authorization, and simple URIs for all the requests. It's simple enough to understand that I could write a gemini server in a few hours having known nothing before hand.

Ink

Ink is the best scripting language for narrative games — choice-driven ones at least — that you can find. Made by Inkle and used in a number of their own games and more. I'd recommend checking out the amazing Heaven's Vault from inkle.

Ink is text-centric but the intent is that it's a text-engine that is easily driven by other systems. So games like Heaven's Vault aren't pure text; it's a Unity game driving the text engine under the hood. This design makes it very easy to integrate with pre-existing engines, and in this case it makes it very easy to write into a Gemini server.

My demo server is just playing the Incercept — a demo game made by Inkle — but it can hypothetically be used to create your own new games from scratch, and would be very easy to do so!

The demo server

You can check this out live at gemini://gemini.ink.mosfetarium.com/ [UPDATE: I've taken it down for now. But the code lives in if someone else wants this :)] but you'll need a gemini client. And you'll need to set up a client certificate for that client. GemiNaut looks pretty normie-friendly. But I don't know how easy that makes generating your own certificate. AV-98 can handle the certificate generation for you with the cert command, but using that might be a time for most windows users. But let's be real. If you're even considering using this you're a hopeless tech nerd anyway and you should be able to figure this out. I'm trusting you.

The code

You can get the code for this here. If you do end up doing something with this, please tell me!

Why?

shrug Why not? I find gemini kinda cute and wanted to contribute to the space in some way. I briefly considered trying to get Z-machine games running on it but ink was a much simpler task.