Sula: A Gemini protocol server written in Scryer Prolog

An ultra-niche web server just got a surprise fan-club moment

TLDR: Sula is a new Gemini server built in Prolog, and the big deal is that it pushes an unusual old-school language into running a real internet service. Commenters were surprisingly hyped, with the main debate shifting from “this needs custom patches” to “most of those fixes are already on their way in.”

A tiny corner of the internet just had a very wholesome mini-meltdown. Sula is a server for Gemini — a stripped-down, old-school alternative to the modern web — and it’s written in Prolog, a programming language most people treat like a museum piece. That combo alone was enough to make onlookers do a double take. But the real spark came from the comments, where the mood was less “why would anyone build this?” and more “wait, this is actually impressive.”

The loudest reaction came from triska, who basically kicked off the applause train: awesome work, thank you, and a big nod to the behind-the-scenes improvements that made the project possible. That matters because Sula doesn’t just run out of the box on the usual version of Scryer Prolog — it currently leans on a patched version with a pile of fixes so it can serve files, handle encrypted connections, and even shut down cleanly when you hit Ctrl+C. In plain English: this is not a toy tossed together over lunch.

And that’s where the tiny bit of drama sneaks in: the project is cool, but it also depends on custom fixes, which can make some readers nervous. The comforting twist? Commenters were quick to point out that most of those changes are already filed for inclusion upstream, turning what could’ve been a “messy hack” narrative into a “look, this might become legit” storyline. It’s less flame war, more niche-dev victory lap — with a side of “Prolog lives!” energy that feels like a meme all by itself.

Key Points

  • Sula is a Gemini protocol server implemented in Scryer Prolog and requires a patched Scryer Prolog branch to run.
  • The required Scryer patches add binary stream copying, EOF handling fixes, interrupt-aware socket acceptance, rustls support, and optional client certificate handling.
  • The server uses openssl at startup to verify that the certificate common name matches the configured hostname.
  • Sula provides CLI options for bind address, hostname, content directory, and certificate directory, and supports clean shutdown on Ctrl+C.
  • Its documented features include TLS via rustls, MIME-based content negotiation, native binary streaming, per-connection error handling, and a modular file layout with several planned future features.

Hottest takes

"Awesome work, thank you a lot Javier" — triska
"the Scryer Prolog improvements that make this possible" — triska
"almost all of the changes mentioned on the page are in fact already filed for inclusion" — triska
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.