Gemini (protocol)

Last updated
Gemini
Developed bySolderpunk et al.
IntroducedJune 2019 (2019-06)
Website geminiprotocol.net
Gemtext
Filename extension
.gmi, .gmni, .gemini
Internet media type text/gemini (unofficial)
Type code TEXT
Developed bySolderpunk et al.
Latest release
0.24.1
28 August 2024;3 months ago (2024-08-28)
Type of format Markup language
Open format?Yes
Website geminiprotocol.net/docs/specification.gmi

Gemini is an application-layer internet communication protocol for accessing remote documents, similar to HTTP and Gopher. It comes with a special document format, commonly referred to as "gemtext", which allows linking to other documents. Started by a pseudonymous person known as Solderpunk, the protocol is being finalized collaboratively and as of October 2022, has not been submitted to the IETF organization for standardization.

Contents

History

The Gemini project was started in June 2019 by Solderpunk. Additional work has been done by an informal community of users. According to Solderpunk's FAQ, Gemini is not intended to replace Gopher or HTTP, but to co-exist with them. [1] Much of the development happened on the Gemini mailing list until the list disappeared at the end of 2021 due to a hardware issue. [2] The creation of the Usenet newsgroup comp.infosystems.gemini in October 2021 was the first new newsgroup in the Big Eight hierarchy in eight years. [3]

Design

The Gemini specification defines both the Gemini protocol and a native file format for that protocol, analogous to HTML for HTTP, known as "gemtext". The design is inspired by Gopher, but with modernisation such as mandatory use of Transport Layer Security (TLS) for connections and a hypertext format as native content type. [4]

The design is deliberately not easily extensible, in order to meet a project goal of simplicity. [5]

Protocol

Gemini is designed within the framework of the Internet protocol suite. Like HTTP/S, Gemini functions as a request–response protocol in the client–server computing model. A Gemini server should listen on TCP port 1965. A Gemini browser, for example, may be the client and an application running on a computer hosting a Gemini site may be the server. The client sends a Gemini request message to the server, and the server sends back a response message. Gemini uses a separate connection to the same server for every resource request. [6]

Gemini mandates the use of TLS with privacy-related features and trust on first use (TOFU) verification being strongly suggested. [7]

Browsing Gemini through Amfora - cli client

Gemini resources are identified and located on the network by Uniform Resource Locators (URLs), using the URI scheme gemini://. A Gemini request consists only of such a URL, terminated by CRLF; the header of a Gemini response consists of a two-digit status code, a space, and a "meta" field, also terminated by CRLF. If the server is successful in finding the requested file, the "meta" field is the MIME type of the returned file and after the header follows the file data.

Example session
Client
gemini://example.com/
Server
20 text/gemini # Example Title Welcome to my Gemini capsule. * Example list item => gemini://link.to/another/resource Link text

Gemtext format

Gemtext format is line-oriented and the first three characters of a line determine its type. The syntax includes markup for headlines, flat list items, pre-formatted text, quotes and link lines. As with HTTP hypertext, URIs are encoded as hyperlinks to form interlinked hypertext documents in the Gemini "web", which users refer to as Geminispace. [1]

Geminispace

"Geminispace" denotes the whole of the public resources that are published on the Internet by the Gemini community via the Gemini protocol. Thus, Gemini spans an alternative communication web, with hypertext documents, including hyperlinks to other resources easily accessible to the user. [1]

As of July 2024, Geminispace consists of around 3900 online known Gemini appearances ("capsules") identified by crawling over 600,000 URIs. [8]

Software

Amfora - Gemini client Screenshot of Amfora.png
Amfora - Gemini client
AmiGemini - Gemini client AmiGemini.png
AmiGemini - Gemini client
Gemini clients include:
NamePlatformClient TypeLicenseWritten in
Amfora BSD, Linux, macOS, WindowsTerminal (TUI)GPL 3.0 Go
AmiGemini AmigaOSGUI (Intuition)MIT C, Intuition
ereandel Bourne shellTerminal (TUI)MIT Shell script
asuka Terminal (TUI)MIT Rust, ncurses
AV-98 Terminal (CLI)2 Clause BSD Python
Bollux TerminalMIT Bash
Bombadillo TerminalGPL 3.0 Go
Buran AndroidMobile AppGPL 3.0 Kotlin
Castor GUI (GTK)MIT Rust, GTK
Castor9 Plan 9GUI C
Deedum Android and iOSMobile AppGPL 3.0 Flutter, Dart
Diohsc Terminal (CLI)GPL 3.0 Haskell
dillo-gemini BSD, Linux, macOSPlugin (Dillo) FSFAP Shell
Elaho (gemini-ios) iOSMobile AppMPL 2.0 Swift
Elpher GUI (Emacs)GPL 3.0 Emacs Lisp
Eva GUI (GTK)MIT Rust, GTK
Fafi GUIMIT Racket
GemiNaut WindowsGUIGPL 3.0 C# for Microsoft Windows
gemini.filter.dpi Plugin (Dillo)MIT Go
Geopard GUI (GTK)GPL 3.0 Rust, GTK
gmni Terminal (CLI)GPL 3.0 C
gplaces LinuxTerminal (CLI)GPL 3.0 or later C
Jimmy macOSAppMIT Swift
Kristall GUI (Qt)GPL 2.0 C++, Qt
Lagrange Windows, macOS, Linux, iOSGUI2 Clause BSD C, SDL
Moonlander LinuxGUI (GTK)MIT Rust, GTK
Offpunk Terminal (CLI)2 Clause BSD Python
Rocketeer iOS, macOSApp Swift
Rosy Crow AndroidMobile AppMIT C#, MAUI
Seren AndroidMobile App Kotlin
Starfish elementary OS/LinuxGUIGPL 3.0 Vala, GTK
Tinmop Terminal (TUI) or GUIGPL 3.0+ Common lisp
Telescope BSD, Linux, macOSTerminal (TUI)ISC C
Twin Peaks WindowsGUIGPL 3.0 C#
VIRGIL99 TI-99Terminal Assembly language

The Gemini software list covers client, server, libraries, and tools. [9]
Gemini-to-HTTP proxy server gateways such as Mozz.us can be used by web browsers lacking Gemini support. [10]

Reception

Gemini is praised for its simplicity but criticized for "excluding people who use ordinary web browsers". [11] Gemini's usefulness has been said to be "dependent on the kinds of content available on Gemini and whether it appeals or not". [5] Stéphane Bortzmeyer has said Gemini is retro but with modern features. [12]

See also

Related Research Articles

The Gopher protocol is a communication protocol designed for distributing, searching, and retrieving documents in Internet Protocol networks. The design of the Gopher protocol and user interface is menu-driven, and presented an alternative to the World Wide Web in its early stages, but ultimately fell into disfavor, yielding to Hypertext Transfer Protocol (HTTP). The Gopher ecosystem is often regarded as the effective predecessor of the World Wide Web.

<span class="mw-page-title-main">HTTP</span> Application protocol for distributed, collaborative, hypermedia information systems

HTTP is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web, where hypertext documents include hyperlinks to other resources that the user can easily access, for example by a mouse click or by tapping the screen in a web browser.

<span class="mw-page-title-main">HTTPS</span> Extension of the HTTP communications protocol to support TLS encryption

Hypertext Transfer Protocol Secure (HTTPS) is an extension of the Hypertext Transfer Protocol (HTTP). It uses encryption for secure communication over a computer network, and is widely used on the Internet. In HTTPS, the communication protocol is encrypted using Transport Layer Security (TLS) or, formerly, Secure Sockets Layer (SSL). The protocol is therefore also referred to as HTTP over TLS, or HTTP over SSL.

The Session Initiation Protocol (SIP) is a signaling protocol used for initiating, maintaining, and terminating communication sessions that include voice, video and messaging applications. SIP is used in Internet telephony, in private IP telephone systems, as well as mobile phone calling over LTE (VoLTE).

<span class="mw-page-title-main">World Wide Web</span> Linked hypertext system on the Internet

The World Wide Web is an information system that enables content sharing over the Internet through user-friendly ways meant to appeal to users beyond IT specialists and hobbyists. It allows documents and other web resources to be accessed over the Internet according to specific rules of the Hypertext Transfer Protocol (HTTP).

Transport Layer Security (TLS) is a cryptographic protocol designed to provide communications security over a computer network, such as the Internet. The protocol is widely used in applications such as email, instant messaging, and voice over IP, but its use in securing HTTPS remains the most publicly visible.

<span class="mw-page-title-main">Squid (software)</span> Caching and forwarding HTTP web proxy

Squid is a caching and forwarding HTTP web proxy. It has a wide variety of uses, including speeding up a web server by caching repeated requests, caching World Wide Web (WWW), Domain Name System (DNS), and other network lookups for a group of people sharing network resources, and aiding security by filtering traffic. Although used for mainly HTTP and File Transfer Protocol (FTP), Squid includes limited support for several other protocols including Internet Gopher, Secure Sockets Layer (SSL), Transport Layer Security (TLS), and Hypertext Transfer Protocol Secure (HTTPS). Squid does not support the SOCKS protocol, unlike Privoxy, with which Squid can be used in order to provide SOCKS support.

<span class="mw-page-title-main">Basic access authentication</span> Access control method for the HTTP network communication protocol

In the context of an HTTP transaction, basic access authentication is a method for an HTTP user agent to provide a user name and password when making a request. In basic HTTP authentication, a request contains a header field in the form of Authorization: Basic <credentials>, where <credentials> is the Base64 encoding of ID and password joined by a single colon :.

<span class="mw-page-title-main">HTTP pipelining</span> Computer communication technique

HTTP pipelining is a feature of HTTP/1.1, which allows multiple HTTP requests to be sent over a single TCP connection without waiting for the corresponding responses. HTTP/1.1 requires servers to respond to pipelined requests correctly, with non-pipelined but valid responses even if server does not support HTTP pipelining. Despite this requirement, many legacy HTTP/1.1 servers do not support pipelining correctly, forcing most HTTP clients to not use HTTP pipelining.

<span class="mw-page-title-main">Secure Hypertext Transfer Protocol</span> Web encryption method similar to HTTPS

Secure Hypertext Transfer Protocol (S-HTTP) is an obsolete alternative to the HTTPS protocol for encrypting web communications carried over the Internet. It was developed by Eric Rescorla and Allan M. Schiffman at EIT in 1994 and published in 1999 as RFC 2660 Netscape's dominance of the browser market led to HTTPS becoming the de facto method for securing web communications.

Comet is a web application model in which a long-held HTTPS request allows a web server to push data to a browser, without the browser explicitly requesting it. Comet is an umbrella term, encompassing multiple techniques for achieving this interaction. All these methods rely on features included by default in browsers, such as JavaScript, rather than on non-default plugins. The Comet approach differs from the original model of the web, in which a browser requests a complete web page at a time.

<span class="mw-page-title-main">HTTP compression</span> Capability that can be built into web servers and web clients

HTTP compression is a capability that can be built into web servers and web clients to improve transfer speed and bandwidth utilization.

<span class="mw-page-title-main">HTTP referer</span> HTTP header field

In HTTP, "Referer" is an optional HTTP header field that identifies the address of the web page from which the resource has been requested. By checking the referrer, the server providing the new web page can see where the request originated.

<span class="mw-page-title-main">HTTP persistent connection</span> Using a single TCP connection to send and receive multiple HTTP requests/responses

HTTP persistent connection, also called HTTP keep-alive, or HTTP connection reuse, is the idea of using a single TCP connection to send and receive multiple HTTP requests/responses, as opposed to opening a new connection for every single request/response pair. The newer HTTP/2 protocol uses the same idea and takes it further to allow multiple concurrent requests/responses to be multiplexed over a single connection.

<span class="mw-page-title-main">POST (HTTP)</span> Request method in the HTTP protocol

In computing, POST is a request method supported by HTTP used by the World Wide Web. By design, the POST request method requests that a web server accepts the data enclosed in the body of the request message, most likely for storing it. It is often used when uploading a file or when submitting a completed web form.

<span class="mw-page-title-main">WebSocket</span> Computer network protocol

WebSocket is a computer communications protocol, providing a simultaneous two-way communication channel over a single Transmission Control Protocol (TCP) connection. The WebSocket protocol was standardized by the IETF as RFC 6455 in 2011. The current specification allowing web applications to use this protocol is known as WebSockets. It is a living standard maintained by the WHATWG and a successor to The WebSocket API from the W3C.

<span class="mw-page-title-main">HTTP/1.1 Upgrade header</span> HTTP header field introduced in HTTP/1.1

The Upgrade header field is an HTTP header field introduced in HTTP/1.1. In the exchange, the client begins by making a cleartext request, which is later upgraded to a newer HTTP protocol version or switched to a different protocol. A connection upgrade must be requested by the client; if the server wants to enforce an upgrade it may send a 426 Upgrade Required response. The client can then send a new request with the appropriate upgrade headers while keeping the connection open.

HTTP/2 is a major revision of the HTTP network protocol used by the World Wide Web. It was derived from the earlier experimental SPDY protocol, originally developed by Google. HTTP/2 was developed by the HTTP Working Group of the Internet Engineering Task Force (IETF). HTTP/2 is the first new version of HTTP since HTTP/1.1, which was standardized in RFC 2068 in 1997. The Working Group presented HTTP/2 to the Internet Engineering Steering Group (IESG) for consideration as a Proposed Standard in December 2014, and IESG approved it to publish as Proposed Standard on February 17, 2015. The initial HTTP/2 specification was published as on May 14, 2015.

References

  1. 1 2 3 "Project Gemini FAQ". Archived from the original on 27 September 2023. Retrieved 27 September 2023.
  2. "Gemini Info Page". Archived from the original on 2021-10-20. Retrieved 2021-10-20.
  3. "Gemini Usenet Newsgroup". Archived from the original on 2021-10-26. Retrieved 2021-10-26.
  4. "Project Gemini Speculative Specification v0.16.1". gemini.circumlunar.space. 2023-03-23. 5 The text/gemini media type. Response bodies of type "text/gemini" are a kind of lightweight hypertext format, which takes inspiration from gophermaps and from Markdown.
  5. 1 2 Edge, Jake (2021-02-10). "Visiting another world". lwn.net. Retrieved 2021-02-19.
  6. "Project Gemini Speculative Specification v0.16.1". gemini.circumlunar.space. 2023-03-23. 1 Overview. Connections are closed at the end of a single transaction and cannot be reused.
  7. "Project Gemini Speculative Specification". gemini.circumlunar.space. 2020-11-29. Archived from the original on 2021-05-12. Retrieved 2021-06-25. 4.2 Server certificate validation. Clients can validate TLS connections however they like (including not at all) but the strongly recommended approach is to implement a lightweight "TOFU" certificate-pinning system which treats self-signed certificates as first-class citizens.
  8. "Statistics on the Gemini space" Archived 2021-02-11 at the Wayback Machine . Proxied gemini://gemini.bortzmeyer.org/software/lupa/stats.gmi
  9. "Gemini software".
  10. "About Mozz.us".
  11. Proven, Liam (27 Jan 2022). "Toaster-friendly alternative web protocol Gemini attracts criticism for becoming exclusive clique". The Register .
  12. "Gemini, a modern protocol that looks retro". archive.fosdem.org. Retrieved 2022-10-30.