(DIR) Home
(DIR) Blog posts
Pushing some Gemini & Gopher code
17 September, 2025
Continuing on this journey I added a Gopher version of this site, & wrote most of a new Gopher server to go along with it.
I'm pleased to share some first drafts of some of the Swift code I've been playing around with to do that. Up now on Codeberg:
(HTM) Codeberg
CODE
ZINE
A static site generator. Write in Gemtext & build sites for Gemini, Gopher & (boo) HTTP. Install it with Homebrew on a Mac.
There were intermediary versions, but this is the first version I've shared since mothballing the Ruby gem of the same name six months ago now. Too long.
Zine builds this site once again.
HOLE
A simple Gopher server with optional TLS. Optional both on starting the server as well as on each request. The server responds to a TLS hello if it receives one & carries on from there, or to an unencrypted request equally happily. AFAIK there's no Gopher client that'll send an encrypted request -- yet! -- but I've got responses via openssl s_client, & even Lagrange by responding with pretend Gemini headers.
CODE
openssl s_client -crlf -connect mikekreuzer.com:70
# once you're in, send the gopher request, eg hit return for the home page
END CODE
I tried to think of a cunning way to get multiple domain tenancy with Gopher, but there's no host information in a Gopher request, so I think that's a no. Short of a work around like a common landing page with links to each site's content, or requiring TLS like Gemini does & using that, no. It's a shame because the box this site's on has a bunch of parked domains that all also get this site's Gopher content now. This IP address & port 70's all a request knows about the host, any domain pointing to that's going to come away with content. Something to keep in mind.
Hole serves the Gopher version of this site.
AGENA
A Swift library to parse Gemtext & translate it into Gophermaps &/or HTML. Powers Hole & Zine. Maybe your next project too!
AND THE SCRIPTING AROUND ALL THAT
Also on Codeberg are the Ruby scripts that generate the Homebrew tap & bottles for installing Zine.
GEMINI & GOPHER...
I found a page with links & summaries for some of the many protocols that launched in Gemini's wake:
(HTM) So many protocols.
For me, Gemini does most of what I need to make things convenient, while Gopher offers the most scope for experimentation. All of the other protocols sit somewhere in between. For me. Gemini & Gopher together make for a comfortable harbour to ride out the AI storm raging out on the (supposedly) open web. Will I go back out there once the AI bubble pops & the scrapers go away? Probably. Maybe. Will I leave the small web when I do? Not sure, but probably not. It's comfortable here.