How usv compares

Geminispace already has good servers. This page says honestly where usv fits among them, and where it does not. If your needs match one of the "choose the others" cases below, you will be happier running that server instead. The full version of this comparison, with a feature table and sourcing, lives in COMPARISON.md in the source repository.

The four servers, briefly

Agate (Rust)

The minimalist's minimalist: "Agate can only serve static files," full stop, by long-standing explicit policy: no CGI, no scripting, no rewriting. Its certificate lifecycle is the best in the field (auto-generated per hostname, effectively never expires, zero setup), and usv's own identity design is a direct descendant of it. What Agate does not do is exactly what usv adds: an HTML mirror, Titan, and packaging beyond a bare binary.

gmid (C)

The maximalist, and the most actively developed server in the field: FastCGI, reverse proxying, real vhost/location config blocks, a four-process privilege-separation architecture that is a genuine security high-water mark for C. It does not implement Titan natively: it delegates Titan requests to a FastCGI backend, and has no HTML surface.

Molly Brown (Go)

Written by Gemini's own creator, for pubnix and shared hosting: per-user capsules, CGI and SCGI, and certificate zones: path-scoped fingerprint allowlists, "analogous to SSH's authorized_keys." usv's own certificate-zone design descends from this. Virtual hosting is a long-documented gap.

GmCapsule (Python)

The extensibility flagship and the reference Titan implementation. Its real strength is a native Python module API: Bubble, Geminispace's most successful interaction platform, runs as a GmCapsule extension rather than a separate service.

When the others are the better choice

Where usv actually differs

Write-time rendering, not request-time: the whole content tree renders to a static output tree on every change, and both the Gemini and HTML surfaces come from that same pass: no per-request conversion, and the output tree is portable on its own. Titan lives on the same listener as Gemini from day one, not delegated to a backend. And the packaging surface is the actual point of usv existing: none of the other four servers ship a Cloudron package, and the niche has sat open on the Cloudron forum since 2021.

usv is pre-release. Agate and gmid both have years of production hardening usv does not have yet: if uptime-critical serving is the goal today, that maturity gap is real and worth weighing.

Back to the front page