Announcing Agena, a Gemini-to-Gopher proxy
Now that we have settled on sending full URLs instead of just paths in
Gemini requests, we have the power to do protocol-translating-proxies,
which I think is quite an exciting idea.
As a proof of concept, last night I quickly put together a
Gemini-to-Gopher proxy named Agena, in Python. You can find it at
https://tildegit.org/solderpunk/agena. It's not very user-friendly
yet; you need to generate your own key and certificate with filenames
matching what's hard coded in, and it's hard coded to listen only to
IPv4 localhost connections on the standard Gemini port. This stuff
will become more easily configurable over time as I polish it.
If you get the latest version of AV-98, you'll find that it is hard
coded to proxy requests for gopher:// URLs through a proxy running on
local host. Again, this will become more easily configurable in the
But for now, if you're running a local Agena instance and using the
latest AV-98, you'll find that accessing Gopherspace *just works*.
It's remarkably transparent and feels indistinguishable from using
VF-1 to access it natively. Binary files work just fine - Agena uses
file(1) to get the MIME type and includes it in the Gemini response
header, so that AV-98 can launch the appropriate handler program.
I had always figured I would at some point write a client which
supported both Gopher and Gemini, but now I see that thanks to the
requests-are-URLs decision there's little point in this. It's very
low effort to add Gopher proxy support to a Gemini client. The
community can support one or two high-quality proxy programs and
client authors can be forever freed of this burden.
It shouldn't come as a surprise that this works so nicely. The
"Geminimap" format was heavily inspired by Gophermaps, and the fact
that they both have the one-link-per-line structure makes it easy to
map between them. Only in one direction, mind you, turning a
Geminimap into a Gophermap is not straightforward because it's not
clear which item types to use. But in the direction Agena goes it
works wonderfully, and I'm very happy.