This blog is now (also) a gemlog

Andrew Fontaine <>

That’s right! This blog is now live on the gemini protocol. Using your favourite gemini browser, you can now see all this text in lo-fi glory.

What is gemini?

gemini is a new protocol, first introduced in a 2019, as a stripped down protocol for the transferring of data, similar to that of HTTP, but with a purposely smaller scope. It was inspired by a protocol called Gopher, an older protocol that was competing against HTTP when the web was new.

Gemini also comes with a new markup format, gemtext. Gemtext is similar to markdown, but is also stripped down. There are no bold, italics, or other in-line formatting. Links live on their own line, and there’s no way to embed images. This is by design, leaving any formatting (with a few exceptions) to the client. There are still headers, blockquotes, and a way to display preformatted text, but that’s it.

Why gemini?

Well this blog (or gemlog, in gemini) is entirely text, so it seemed like a good enough reason to be available on a text-first platform. It was also an interesting addition to the elixir application that runs this site. It is still one monolith, there is no separate gemini microservice. It has interesting design constraints as well. As the document is just text, the layout of that text is important, and creating and displaying sections in a coherent manner is a fun challenge that I’m not sure I’ve worked out.

How gemini?

Well phoenix, the web side of this application, doesn’t know how to speak gemini, but after a little digging, I found spaceboy, a “[h]eavily simplified” take on the phoenix framework for gemini.

First I added a new application to my umbrella, with mix new. Trying to install the dependency was met with several dependency conflicts. It turns out phoenix and spaceboy rely on the same dependencies for TLS and TCP (the backbones of sending things on a network), but different versions. cowboy, the HTTP server that phoenix relies on, was set to depend on ranch, the TCP library, version 1.something, whereas spaceboy relied on ranch version 2.0. This looked like a pretty major conflict that I could override, but didn’t look promising.

After a little digging, however, I found an issue that stated that the version of cowboy that I was using actually supports both ranch v1 and v2, so overriding the dependencies was correct here.

The next struggle was with spaceboy‘s (minimal) templating system. phoenix very fancily handles things like layouts and actually compiles the templates into elixir code. spaceboy does not, so when I went to deploy it for the first time, none of my pages worked as the templates were left behind. I reached out for any ideas, but ultimately came up with a solution before the author could respond. It has given me some ideas on how to contribute back to spaceboy though.

Where gemini?

So that’s pretty much the whole story! If you’re interested in seeing this site on gemini, you can grab a gemini client, and start exploring the space. I checked out Lagrange and found it quite lovely for desktop computers, and deedum works great on android. I have some things to touch up on here and there, but for now it is live. Please check it out, and let me know what you think!

Want to discuss this post?

Reach out via email to ~afontaine/, and be sure to follow the mailing list etiquette.

Other posts