Gemini is both a simple, new protocol to serve HyperText, and a simple, new markup language. It has it’s own site, Project Gemini. That’s where you can find the specification, as well as clients and servers.
It was born out of various needs:
The last item, for example, led to the decision to not use the typical “headers” for requests and responses of the Gemini protocol. You know the ones, from both mails and HTTP. It does have status codes (but fewer than the web), but it doesn’t have methods such as GET, PUT or POST. It has MIME-types, but it doesn’t have content negotiation.
The Gemini format (also known as GemText) is particular in that it is line-oriented.
A line of text is a paragraph, to be wrapped by the client. It is is independent from the lines coming before or after it.
A list item starts with an asterisk and a space. Again, the rest of the line is the line item, to be wrapped by the client.
A link is never an inline link like it is for HTML: it’s simply a line starting with an equal-sign and a greater-than sign: “⇒”, a space, an URL, and some text.
It’s weird, it’s small, and it’s different.
What I’d argue, though, is that Gemini’s “uselessness” is its killer feature, and one that distinguishes it from other attempts at creating a “new web.”
While everything I have seen served via Gemini is friendly and sociable, the technical barriers of what-is-a-command-line and how-do-I-use-one are a fence put up that keep out the riffraff. Certainly, you can walk around the corner and go through the gate, but ultimately the geminiverse is lovely because it is underpopulated, slower-paced, and literate. It is difficult enough to access that those who can use it can be welcoming without worrying its smallness will be compromised.
A simple Gemini-based MUSH.