approachabe & frugal & composable

Petite Abeille petite.abeille at
Tue Jun 2 02:14:39 BST 2020

As it stands, Gemini [1] -and especially Mercury [2]- is refreshingly approachable and  frugal.

A -very minimal- one-liner Gemini client:

# openssl s_client -quiet -crlf -connect <<< gemini:// 2>/dev/null
20 text/gemini
Welcome to Conman Laboraties Gemini Server!

And that is that. The whole Gemini protocol in 3 lines.

But what 3 lines!

A request is a single line containing a fully specified URL.
A successful response is a single line containing the numeric response code, a space, and a content-type.
The canonical content, text/gemini, consists of two core line types: text and link. 
All UTF-8 encoded. Over TLS.

And that is that.

Quite spartan at first glance.

But also, possibly, quite universal.

Fancy jumping the shark over Zawinski's law [3] from the onset?

Combine RFC5092 [4] for the request and RFC2045 [5] for the response:

imap://;uid=20 <imap://;uid=20>
20 message/rfc822
Mime-Version: 1.0 

Fancy supporting multiple protocols at once?

Look at conman's nifty sigil script [6], which supports HTTP, GEMINI, and GOPHER for good measure. From one CGI script.

In other words, because a Gemini request is a full-fledged URL, it can support any number of protocols, as long as such protocol can be expressed as an URL [7].

Ditto for the response, which can be any media type [8] a Gemini server cares to generate. 

In short, a Gemini URL request combined with a Gemini media type response is quite universal indeed. 

Ditto for the rather unassuming text/gemini content type.

While at its core it only sports 2 line types, the presence of the link line, which is an URL, open the door to infinite composition.

Fancy an atom feed? Add a feed URI [9] in your text/gemini:

=> feed://

Would you like to anchor your text/gemini in a point in time? Perhaps the tag URI can help:


Indicate a location? A geo URI may help:

=> geo:37.786971,-122.399677

etc, etc, the possibilities are endless.

Quite a lot of firepower for a two lines protocol, with a two line content type :)


[1] <>
[2] <>
[3] <>
[4] <>
[5] <>
[6] <>
[7] <>
[8] <>
[9] <>
[10] <>
[11] <>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Gemini mailing list