Hello, Gemini

Published 2021-04-04

I first heard about Project Gemini[1] a few months ago, and thought it was neat, but never went any further than that. Since then, the "modern web" has worn me down. I'm sick of bloated[2][3] websites loading megabyte upon megabyte of code and purposeless images just to render a few paragraphs of text. I'm fed up of being intrusively tracked[4][5] for the privilege of wasting bandwidth and CPU-seconds to read some crappy article.

[1] - Project Gemini

[2] - The Website Obesity Crisis

[3] - James Mickens: To Wash it All Away

[4] - What Do You Actually Agree To When You Accept All Cookies

[5] - The truth about cookies

cdaniels.net is now Gemini-first, this site is best viewed without JavaScript, please read carefully because my privacy policy has been updated: please don't send me your data, I do not want it.

Gemini is the Web that I want. Heavy on content, light on bloat. Of course it's possible to accomplish this with HTTP, HTML, CSS, and maybe a dash of JS. There are some examples of this, such as 10 KB Club[6] and 250KB Club[7]. There are even some mainstream sites that have lighter-weight options, like CNN[8] and NPR[9]. But the overwhelming preponderance of evidence would seem to suggest that given the option, people choose to create bloated sites; I'm not going to analyze their motives here - others have already done that.

[6] - 10 KB Club

[7] - 250KB Club

[8] - The "lite" version of CNN

[9] - Text-only NPR

What is Gemini And How Do I Use It?

Some of my readers may not be familiar with Gemini. [1] explains it well, but my own short explanation is below.

HTTP (Hyper Text Transfer Protocol), possibly with an 'S' on the end (meaning "Secure"), is a protocol for transferring data (usually web pages) from one computer to another. This is the "http://" that you have probably typed in front of a URL before. There are many possible protocols that can be used here - what you're actually typing is an IETF RFC3986 URI[10]. In today's world though, most of them except for "http" (and "https") have gone away. Gemini (the protocol) replaces HTTP. To visit a Gemini site, you will enter a URI beginning with "gemini://". The point of the Gemini protocol is to be extremely simple - HTTP(S) is an old protocol with many years of additions and extensions tacked on over the years.

[10] - Uniform Resource Identifier (URI): Generic Syntax

HTML (Hyper Text Markup Language) is a format for data (usually web pages) that describes the content of a document. CSS is often used to change how the document looks visually, and JavaScript is often used to add interactivity (or more often track you and serve advertisements). Gemini (the project) includes a specification for a new format, Gemtext, which is much, much simpler than HTML. It also intentionally precludes interactivity, and is designed so that the browser (and hence the end user) has complete control over how content appears visually.

Obviously Gemini and Gemtext aren't going to replace HTTP and HTML. They aren't intended to. However, they are a fun way to move against the grain.

So how does one use Gemini? Many programs[11] have been written to both serve and access Gemini content. Personally, I like Lagrange[12], and would recommend it as a good place to start. If you don't want to bother downloading a program, there are also web proxies, such as [13] available; you may have noticed that Gemini links in the HTTP version of this site are proxied through [13] automatically.

[11] - Gemini Software

[12] - Lagrange

[13] - Gemini Portal

Changes to cdaniels.net

I have rewritten the entire site to be Gemini-first. All of the pages are now written in Gemtext. The HTTP/HTML version of the site is mirrored from the Gemtext version. Nevertheless, users of the HTTP/HTML version of the site will notice several improvements:

[14] - highlight.js

The site is still hosted using OpenBSD Amsterdam [15]. relayd(8)[16] is used to handle incoming HTTP, HTTPS, and Gemini traffic, and to SSL (via letsencrypt). I used a combination of [17] and [18] to set this up. Web traffic is still served using httpd(8)[19], and Gemini traffic is served using vger[20]. Gemtext is converted to HTML, and feeds are generated using my own new project, gemdown[21]. The site is built using a simple TCL script[22].

[15] - OpenBSD Amsterdam

[16] - relayd(8)

[17] - Let's Encrypt on OpenBSD 6.7

[18] - OpenBSD webserver with httpd, relayd and TLS

[19] - httpd(8)

[20] - vger

[21] - gemdown

[22] - cdaniels.net build script

A few old pages that weren't indexed directly have been deleted. Content from those pages is still available in the source repo[23]. The last commit hash before the rewrite was 02b5ded5e9878cebb864665a13f89e8f0dd91944.

[23] - cdaniels.net source repo

Copyright 2021 Charles Daniels.

This work is licensed under CC-BY-SA 4.0