Gemini, Gemtext and my projects

Created: 2026-06-21T23:16:14Z

The last few days, I've come to like Gemini and Gemtext more and more. One of the things that I noticed is that writing in Gemtext rather than Markdown is much more enjoyable to me. I suspect this is because I can just write text without worrying about formatting. With Markdown, I would always stop to e.g. create inline links. But with Gemtext not supporting inline links, I find myself first writing a paragraph and then thinking about what links to add. This is less disruptive to the flow of writing to me.

Since I noticed that I actually write more this way (on top of enjoying it more), I've migrated the README.md and documentation of many of my projects from Markdown to Gemtext now - and even added documentation to some projects that didn't have any before (such as buildsys). For example, I converted all .md files in ObjFW to Gemtext. This also has the nice side effect that I don't need to maintain everything twice in order to serve it via Gemini. The only downside is that while this does render nicely in my Forgejo instance, it does not on GitHub. Here are some links for comparison:

🌐 ObjFW on Gemini
🌐 ObjFW's README on Forgejo
🌐 ObjFW's README on GitHub
🌐 buildsys on Gemini
🌐 buildsys's README on Forgejo
🌐 buildsys's README on Forgejo

Having my mind on Gemini these days has also lead to some other Gemini-related projects. First, there's Gemtext2HTML. I've already briefly mentioning it before as being the magic that makes Forgejo render Gemtext. However, using more Gemtext in my repositories now, this lead to lots of improvements and stabilization so that I've now had a few releases and the current version as of this writing is 1.1.

🌐 Gemtext2HTML on Gemini
🌐 Gemtext2HTML repository

Then there's SmolServ (formerly ObjGemCap) that I've also mentioned before. This one has also seen some improvements, but it also had a change in direction: This will become a hybrid server that can optionally serve the Gemini content over HTTPS, with automatic translation of Gemtext to HTML. This will make it very easy to host Gemini content without any extra effort to make it available via HTTPS, as the config format is trivial and the intention is to keep it this way. This will probably lead to a change of name, to reflect the new direction.

🌐 SmolServ on Gemini
🌐 SmolServ repository

And last but not least, I added Gemini support to ObjFW and ofhttp. ObjFW now has an OFGeminiClient class to perform Gemini requests, as well as OFGeminiIRIHandler that handles gemini:// IRIs seamlessly in all software using IRI handlers to access files. But that is not enough! The main driver for me adding Gemini support to ObjFW was that I was annoyed that I didn't have a command line utility to download something from Gemini (curl, which boasts to support so many protocols, doesn't support Gemini). So after adding Gemini support to ObjFW, I did what I was actually out to do: Add Gemini support to ofhttp! And since today, ofhttp supports Gemini:

# Download this blog post as a file$ ofhttp gemini://blog.nil.im/84.gmi⇣ gemini://blog.nil.im/84.gmi ➜ 20  Name: 84.gmi  Type: text/gemini  Size: unknown     4.01 KiB    1.08 MiB/s  Done!

Or, you can also use it as a simple viewer:

# Display this blog post$ ofhttp -qo- gemini://blog.nil.im/84.gmi | fmt -s | less

You can even download the latest ObjFW release:

$ ofhttp gemini://objfw.nil.im/downloads/objfw-1.5.5.tar.gz⇣ gemini://objfw.nil.im/downloads/objfw-1.5.5.tar.gz ➜ 20  Name: objfw-1.5.5.tar.gz  Type: application/gzip  Size: unknown  1009.06 KiB    2.65 MiB/s  Done!

So give ofhttp (from main for now, will be in ObjFW 1.6) a try if you want to download a file from Gemini!