Gemini

In Information technology Gemini refers to concepts around the Gemini protocol. The Gemini community publishes mostly textual content via this protocol. The default content type text/gemini, usually called gemtext, only offers a limited set of line types to structure the content and link to other resources.

Content in text/gemini can be structured by three levels of headings, items in list, preformatted text blocks with denoting its kind for accessibility reasons, quotations, and links.

Discussion around Gemini takes place via its official mailing list, an inofficial IRC channel, and also for example via so called gemlogs.

## Introduction

[edit | edit source]

Gemini as a new internet protocol (suggested in 2019) that is heavier than gopher but lighter than the web aims not to replace either, but to take user privacy seriously,[1] e. g. by encrypting requests and contents during transfer, and by massively reducing tracking possibilities of users as compared to the current bloated web.[2]

### Nomenclature

[edit | edit source]

Analogous to the Web as a whole all of the available information served via Gemini makes the Geminispace. One's content published in Gemini is referred to one's capsule, analogous to website. A personal journal in Geminispace usually is called gemlog, analogous to weblog/blog or (Gopher) phlog. A convention is in place to name gemlog entries with dates, such that clients can subscribe to the overview pages and notify the user about new gemlog entries.

Typical analogies/comparisons  Gopher | Gemini | WWW (HTTP/S)

|
|

Gopherspace | Geminispace | The Web
Gopherhole | Capsule | website
resource/item | page | web page
phlog | gemlog | weblog, blog
plaintext | gemtext | (X)HTML
port 70 | 1965 | 80/433

Most gemtext resources are stored as files with the .gmi extension.

### Software

[edit | edit source]

To serve and access the content Gemini servers and clients are available. Text-based Gemini browsers to be used in a terminal are popular in the community. Graphical browsers for desktop and mobile are available, too.

As of 2021 popular clients are for instance Amfora (TUI), Ariane (Android), Eloha (iOS), and Lagrange (GUI).

### Standardization

[edit | edit source]

The protocol mandates transport encryption via TLS, but without chaining certificates to any authority. As of 2021, the protocol is not a standard registered to the IETF, to be addressed via issues in a GitLab repository.

### Community

[edit | edit source]

In March 2021 the mailing list got some moderation announced. The use of specific names within topics ([users], [tech], [spec]) is encouraged; [announce] is reserved for admins of the list, although [ann] got used heavily to promote community software or one's capsule.

Additionally to the mailing list there are IRC channels, an XMPP room, and as end of 2021 also a newsgroup.

* IRC #gemini at tilde.chat
* IRC #gemini at libera.chat
* XMPP geminauts at chat.kwiecien.us
* News comp.infosystems.gemini

## Getting started

[edit | edit source]

* Gemini/Howto

## Details

[edit | edit source]

### Gemtext

[edit | edit source]

The following gemtext example illustrates basically all available constructs (except for a third-level heading).

# Welcome
Hello to my capsule
> To be or not ...
## Verse's Gemlog
Daily posts
=> first-post.gmi 2021-03-06 Editing
Some code
```python
print("Bye")
```

Authoring content in gemtext can seem restricting. Suggestions to extend the format may arise, for example asking to support inline emphasis (like *strong*, /italic/, or _underline_). As preformatted blocks get used for tabular representations, variants for tables were discussed.

Transport of metadata about the text within the text is a topic, that also took interest, for instance suggesting that a preformatted block introduced as metadata could carry mime-like "key: value" pairs, for example to formalize stating of the author, date, and license, or to specify relation to other content/resources in the capsule for direct navigation support in clients (e. g. like previous/next item in series, in addition to parent or home).

Generally though, the community seems happy to stick to the conventions layed out in the "speculative specification", maybe leaning towards reducing than extending possibilities.[3]

### Exemplary client request and server response

[edit | edit source]

Exemplary protocol session, where a client requests a resource which then is served accordingly.

Client: gemini://example.org/
Server: 20 text/gemini
Server: # Welcome
Server: Hello to my capsule
Server: ...

### Transport security

[edit | edit source]

In March 2021 it was suggested to try to avoid expiration of certificates.[4] As certificates are to be trusted on first use/encouter, cf. TOFU, updated/changed certificates open new questions about its trust-worthiness. A proposol is that cautious users may be given the possibility to manually check the fingerprint of certifcates, and clients indicate the trust level visually.[5]

Since Gemini mandates TLS, a protocol variant proposal (referred to as mercury) does not mandate transport encryption but keeps it open to the user to take care of encryption or not, thus allowing for any kind of security concerning their threat vector. This proposal also motivates a simpler text format comprising only of plain text lines and links.

The majority of known capsules use TLS 1.3.[6]

### User session/identification and authentification

[edit | edit source]

Unlike in the Web where usually usernames and passwords are used to identify and authorize users on a website, Gemini also uses TLS to establish user sessions with a server/capsule. Some Gemini browsers allow via their user interface to manage various user certificates to be used for specific capsules. A user certificate may contain a username. As clients allow multiple user certificates Gemini users can identify themselves with different usernames across Geminispace. Note there is status code 11 to be able to submit sensitive information to the server that should never be visible in the URL.[7]

## External Links

[edit | edit source]

* gemini://gemini.circumlunar.space
* gemini://gemini.circumlunar.space/docs/specification.gmi
* https://lists.orbitalfox.eu/listinfo/gemini
* https://gitlab.com/gemini-specification

## References

[edit | edit source]

1. ↑ gemini://gemini.circumlunar.space/
2. ↑ https://danluu.com/web-bloat/
3. ↑ https://lists.orbitalfox.eu/archives/gemini/2021/004718.html
4. ↑ https://lists.orbitalfox.eu/archives/gemini/2021/005904.html
5. ↑ https://lists.orbitalfox.eu/archives/gemini/2021/006010.html
6. ↑ https://gitlab.com/gemini-specification/protocol/-/issues/12#note_526014413
7. ↑ https://lists.orbitalfox.eu/archives/gemini/2021/006094.html