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

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

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

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

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

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

Details

edit

Gemtext

edit

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

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

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

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]

edit

References

edit
  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