Awesome Gemini [image: Awesome]
[image: Awesome]
Awesome
A collection of awesome things regarding the gemini protocol ecosystem.
gemini protocol
Please contribute to this list to link to all the awesome gemini projects out there.
Repo mirrors:
- https://git.sr.ht/~kr1sp1n/awesome-gemini
- https://github.com/kr1sp1n/awesome-gemini/
What is Gemini
Excerpt from gemini.circumlunar.space:
Excerpt from gemini.circumlunar.space
Gemini is a client-server protocol featuring request-response transactions, broadly similar to gopher or HTTP. Connections are closed at the end of a single transaction and cannot be reused. When Gemini is served over TCP/IP, servers should listen on port 1965 (the first manned Gemini mission, Gemini 3, flew in March'65). This is an unprivileged port, so it's very easy to run a server as a "nobody" user, even if e.g. the server is written in Go and so can't drop privileges in the traditional fashion.
Gemini Specification
Official specification
- protocol spec discussion and development
protocol spec discussion and development
- gemini-text spec discussion and development
gemini-text spec discussion and development
Contents
Clients
Terminal
Graphical
Cross-platform
Mobile
Windows
MacOS
Programming
Related Specifications
Resources
Servers
Services
Tools
Gemtext converters
Web proxies
Bots
Clients
Terminal
- Amfora (Go) - "fancy" terminal client.
Amfora
- astro (Shell) - terminal client using less written in POSIX shell script.
astro
- Asuka (Rust) - an NCurses-based Gemini client.
Asuka
- AV-98 (Python) - Gemini client derived from the popular VF-1 Gopher client.
AV-98
- AV-98-fork - A fork of AV-98.
AV-98-fork
- bollux (Bash) - bash Gemini client.
bollux
- bombadillo (Go) - combined Gopher, Gemini, Finger, and File client with vim-inspired key mappings.
bombadillo
- cgmnlm (C) - colorful gemini line-mode client, fork of gmni.
cgmnlm
- diohsc (Haskell) - simple line-based command-response terminal user interface with ANSI colour.
diohsc
- Elpher (Emacs) - combined Gopher and Gemini client for the popular text editor / operating system.
Elpher
- gem.awk (Awk) - minimal but usable interactive Gemini client in < 250 LOC of Awk.
gem.awk
- gembro (Go) - gemini client using Bubble Tea.
gembro
Bubble Tea
- Gemcurses (C) - A Gemini client, written in C using ncurses.
Gemcurses
- gemini-demo-1 (Python) - minimal but usable interactive Gemini client in < 100 LOC of Python 3.
gemini-demo-1
- gemini-demo-2 (Lua) - minimal but usable interactive Gemini client in < 100 LOC of Lua.
gemini-demo-2
- gemini-demo-3 (Go) - minimal but usable interactive Gemini client in not quite < 100 LOC of Go.
gemini-demo-3
- gemini-fetch (Node.js) - cURL-like CLI for loading content from Gemini URLs.
gemini-fetch
- gmni (C) - CLI utility (like curl) and line-mode browser.
gmni
- Gremlin (Rust) - TUI for browsing Gemini space
Gremlin
- leo (Python) - lightweight, prompt-driven Gemini client.
leo
- min (Go) - supports advanced features like input and client certificate generation.
min
- ncgopher (Rust) - gopher and gemini client for the modern internet.
ncgopher
- Offpunk (Python) - Gemini, gopher, spartan and http/html offline-first browser.
Offpunk
- Romulus (C#) - interactive TUI client with menus and mouse support
Romulus
- Telescope (C) - w3m-inspired, multi-protocol client that supports Gemini, Gopher and Finger
Telescope
- tinmop (Common Lisp) - opinionated Mastodon and Gemini client
tinmop
- gplaces (C) - command-driven, terminal based Gemini client in ~1K LOC of C.
gplaces
- tgmi (python) - full-featured CLI terminal-based Gemini client
tgmi
Graphical
Cross-platform
- Agregore - (Electron.js) - peer to peer web browser with support for loading Gemini pages.
Agregore
- Alrisha (QML) - QML-based Gemini client.
Alrisha
- Castor (Rust) - graphical Gemini client using GTK.
Castor
- Fafi (Racket) - graphical Gemini browser written in Racket.
Fafi
- Fossil (Vala) - GTK3 Gemini browser written in Vala for desktop and mobile.
Fossil
- Galacteek (Python) - Browser for the distributed web, with support for the Gemini protocol
Galacteek
- Gerbil (Python) - Gemini and Spartan browser written in python with GTK and LibHandy for desktop and mobile
Gerbil
- Lagrange (C) - desktop GUI client with inline image viewing, multiple tabs, bookmarks and more.
Lagrange
- Molasses (Racket) - full-featured graphical Gopher and Gemini client with tabs.
Molasses
- Moonlander (Rust) - the fanciest Gemini client in the entire solar system.
Moonlander
- Kristall (C++) - graphical Gopher and Gemini client using QT.
Kristall
- spacewar (Electron.js) - EXPERIMENTAL and UNSTABLE Gemini browser running on Electron.
spacewar
- Geopard (Rust) - A colorful, adaptive gemini browser.
Geopard
Mobile
- Buran (Kotlin/Java) - Gemini browser for Android, fork of Ariane.
Buran
- Deedum (Dart) - an Android and iOS client made with Flutter.
Deedum
- Elaho (Swift) - full featured Gemini protocol browser for iOS.
Elaho
- Gem (Python) - Gemini client for Ubuntu Touch.
Gem
- Xenia (Java) - Gemini proxy for Android.
Xenia
- Phaedra (Java) - Gemini client for Android supporting even very old ones; author recommends using Ariana if a current Android is at hand.
Phaedra
Windows
- GemiNaut (C#) - user friendly graphical Gemini client for MS Windows.
GemiNaut
MacOS
- Jimmy (SwiftUI) - a lightweight native Gemini client for MacOS
Jimmy
Programming
- gemclient (Nim) - rich client library for the Gemini Protocol.
gemclient
- derhuerst/gemini (Node.js) - server & client lib.
derhuerst/gemini
- a-h/gemini (Go) - Applications and libraries for building applications on Gemini.
a-h/gemini
- cuipod (C#) - Simple yet flexible framework for Gemini protocol server.
cuipod
- go-gemini (Go) - library that provides an easy interface to create client and servers.
go-gemini
- go-gemini (Go) - more recent fork of the library above.
go-gemini
- gemini (Go) - Server side Gemini protocol + Titan protocol implementation that matches standard GO http API.
gemini
- gig (Go) - Gemini framework.
gig
- html2gemini (Go) - package library to convert HTML to Gemini (see also html2gmi for command line application)
html2gemini
- ignition (Python) - Gemini client transport/request library for python3.
ignition
- Agunua (Python) - Gemini library to write clients. Includes IRI support, gemtext parsing and CLI tool.
Agunua
- kaksik (Deno/TypeScript) - middleware library for building server applications.
kaksik
- ruby-net-text (Ruby) - Gemini support in Net::* and URI::* stack.
ruby-net-text
- SmolNetSharp (C#) - cross platform .NET (core/framework) client library for building Gemini and Gopher clients
SmolNetSharp
- warmuuh/jemini(Java) - reactive gemini-client, part of jemini-project
warmuuh/jemini
- geminic (Erlang) - An Erlang library for building Gemini protocol clients.
geminic
- dremini (C++) - Highly concurrent C++ Gemini server and client library
dremini
- Opal (C#) - Gemini client library for .NET 6. Built-in support for TOFU and client certificates.
Opal
Related Specifications
- GemPub Specification - Gempub, the Gemini e-book (and capsule archive) container specification.
GemPub Specification
- Gemini TinyLog Specification - A Tinylog is a simple file with all "microblog" style entries to share small contents and interact with other geminauts' tinylog.
Gemini TinyLog Specification
- Adding Emoji Favicons to Gemini - Optional extension by Michael Lazar to the Gemini Protocol, with the goal to set a Unicode emoji as favicon for a site.
Adding Emoji Favicons to Gemini
Resources
- Gemini Specification - the Gemini protocol specification.
Gemini Specification
- gemini.circumlunar.space/software - list of Gemini software.
gemini.circumlunar.space/software
- transjovian.org/gemini - wiki space dedicated to Gemini communities and software.
transjovian.org/gemini
Servers
- Agate (Rust) - simple Gemini server for static files.
Agate
- aiogemini (Python) - minimalist Python 3 `asyncio` server.
aiogemini
- Apogee (Kotlin) - Gemini server written in Kotlin for the JVM.
Apogee
- atlas (C#) - .NET7 Gemini/Titan/Spartan server w/ vhost and cgi support.
atlas
- a-h/gemini (Go) - Server for Linux, Mac, Raspberry Pi. Supports SNI for multiple domains on the same server, has Docker image.
a-h/gemini
- blizanci (Erlang) - server designed primarily for robustness and security.
blizanci
- Denoscuri (Typescript) - simple Gemini server written using Deno and Typescript.
Denoscuri
- Dʒɛmɪni (Racket) - server with features like SNI and CGI.
Dʒɛmɪni
- Diamant (Ruby) - simple Gemini server for static files.
Diamant
- Doppio (Java) - single-JAR Gemini server with CGI, authentication, and Atom feed support.
Doppio
- Duckling proxy 🦆 (Go) - scheme-specific filtering proxy for Gemini clients to access the web.
Duckling proxy 🦆
- Earl Server (Kotlin) - Gemini fileserver for the JVM.
Earl Server
- Enceladus (F#) - A simple Gemini protocol server implementation in .NET Core and F#.
Enceladus
- Ergol (PHP) - light Gemini server able to host several capsules with different cerificates.
Ergol
- GeGoBi (Python) - server to facilitate easy Gemini-Gopher bi-hosting.
GeGoBi
- Gemeaux (Python) - server using only the Python standard library.
Gemeaux
- gemini-ipfs-gateway (Go) - an IPFS Gateway that makes IPFS content available over the Gemini protocol.
gemini-ipfs-gateway
- gemini-server (Haskell) - lightweight server for the Gemini protocol.
gemini-server
- geminid (C) - Gemini Server in C.
geminid
- geminid (Scheme) - Gemini Server in CHICKEN Scheme.
geminid
- gemini-php (PHP) - simple Gemini server in PHP.
gemini-php
- JAGS-php (PHP) - fork of gemini-php with support of dynamic pages.
JAGS-php
- jsonresume-gemini (PHP) - single purpose server implementation of the Gemini protocol to serve up your JSON Resume.
jsonresume-gemini
- geminim (Nim) - an async lightweight Gemini server made in Nim.
geminim
- gmid (C) - simple and secure Gemini server.
gmid
- gmifs (Go) - Gemini file server with auto indexing support, caching and auto TLS key pair creation.
gmifs
- gmnd (Python) - packaged Gemini server with support for CGI and indexing
gmnd
- gmnisrv (C) - high-performance Gemini server for POSIX systems.
gmnisrv
- Gemserv (Rust) - server with features like vhosts, CGI, SCGI, reverse-proxying and more.
Gemserv
- Germinal (Common Lisp) - serves any type of document with an appropriate mime type.
Germinal
- GLV-1.12556 (Lua) - the first Gemini protocol server with a lot of features.
GLV-1.12556
- Hydepark (Rust) - discussion forum application for Gemini.
Hydepark
- Jetforce (Python) - built-in static file server with support for gemini directories and CGI scripts.
Jetforce
- warmuuh/jemini(Java) - dual gemini/http server on top of jetty with spring-boot integration
warmuuh/jemini
- levior (Python) - HTTP to Gemini gateway, allowing you to browse regular websites with any Gemini client
levior
- Loxy (C#) - Gemini to HTTP proxy, exposes any capsule to the web as stylable HTML (based on the Opal library).
Loxy
- Lupa Pona (Perl) - simple single directory Gemini server.
Lupa Pona
- Marami (Prolog) - server written in Prolog.
Marami
- Molly Brown (Go) - full-featured Gemini server implemented in Go.
Molly Brown
- MoonGem (C) - gemini server with inline Lua scripting for dynamic content generation.
MoonGem
- net-gemini (Go) - gemini server inspired by Molly Brown.
net-gemini
- northstar (Rust) - gemini server implementation.
northstar
- Orbit (PHP) - Gemini server implemented in PHP.
Orbit
- Phoebe (Perl) - Gemini/web wiki.
Phoebe
- pollux (Rust) - simple server that will only serve one `index.gemini` file.
pollux
- rc-gemd (Shell) - simple Gemini server written in rc (for plan9 operating systems).
rc-gemd
- Satellite (Go) - small Gemini server for serving static files.
Satellite
- Shavit (Go) - configurable Gemini server for UNIX operating systems.
Shavit
- Smolver (Swift) - a small Gemini server.
Smolver
- Space-Age (Clojure) - Gemini server written in Clojure.
Space-Age
- Taurus(Rust) - A Concurrent Gemini Server.
Taurus
- Titan (Rust) - simple TOML-configured Gemini server and an Express-like Gemini server framework.
Titan
- twins (Go) - YAML-configured Gemini server supporting vhosts, FastCGI and reverse-proxying.
twins
- vger (C) - Gemini server written in C used with inetd.
vger
- Windmark (Rust) - An elegant and highly performant async Gemini server framework
Windmark
- StaticGeminiServer (Codeberg) (Ruby) - a simple more or less stable gemini server for static files
StaticGeminiServer
Codeberg
- kepler - simple gemini server in rust
kepler
Services
- **gemini://warmedal.se/~antenna/** - Geminispace aggregator
- **gemini://drewdevault.com/cgi-bin/man.sh** - look up a POSIX man page.
- **gemini://flounder.online** (https version) - host small Gemini web pages over https and Gemini (repo).
https version
repo
- **gemini://geminispace.info** - public search provider for Gemini (repo).
repo
- **gemini://geddit.glv.one** - interactive link service (with comments).
- **gemini://glv.one** - free platform as a service (PaaS) that runs any Gemini server (packaged as a Docker image) in the cloud.
- **gemini://gemini.omarpolo.com/cgi/gempkg/** - interface for the OpenBSD ports collection.
- **gemini://tictactoe.lanterne.chilliet.eu** - Tic Tac Toe game (repo).
repo
- **gemini://ur.gs/** - translate from en->es and es->en (repo).
repo
- **gemini://rawtext.club/~sloum/geminews/** - Daily news feeds proxied to gemini.
- **gemini://rawtext.club/~sloum/cgi/othello/** - Play othello/reversi against a computer opponent over gemini.
- **gemini://rawtext.club/~sloum/cgi/weather** - US weather reports by zip code.
- gemlog.blue - Gemini hosting from a web frontend.
gemlog.blue
- **gemini://houston.gmi.bacardi55.io** - A simple tool to check if a capsule is up or not
- **gemini://tlgs.one** - (http version) Another public search provider for Gemini(repo).
http version
repo
Tools
- CAPCOM (Python) - Atom feed aggregator for gemini.
CAPCOM
- certified (Python) - Generate TOFU TLS certificates for gemini servers.
certified
- cl-yag (Common-Lisp) - Static site generator producing gemini, gopher and html.
cl-yag
- comitium (C) - A feed aggregator for gemini supporting many formats and protocols.
comitium
- gemini-antenna (Python) - A feed-aggregator for Gemini, triggered by submissions.
gemini-antenna
- geminize - Firefox addon that redirects gemini:// URLs and links to a customizable HTTP-to-Gemini proxy.
geminize
- gemlog.sh (Bash) - Utility for writing and managing gemini logs (gemlogs) and atom feeds (simple gemini static site generator/framework).
gemlog.sh
- gem.git (Python) - git frontend CGI script.
gem.git
- gemini_http (Go) - simple tool for viewing gemini files that are placed on a http server.
gemini_http
- gemmit (Go) - social news aggregation and web content rating website for the gemini protocol.
gemmit
- GemPress (C) - Yet another Gemini publishing framework with HTML and Atom support, written in Bash and Sugar-C.
GemPress
- gemtexter (Bash) - Site generator and blog engine for Gemini. Generates Atom and Gemfeeds , and also does Gemtext to HTML and Markdown conversion.
gemtexter
- gloggery (Go) - basic static site generator for blogs in Gemini.
gloggery
- gmitohtml (Go) - proxy that renders Gemini pages using HTML.
gmitohtml
- gmnigit (Go) - static git gemini viewer.
gmnigit
- gssg (Go) - simple gemini static site generator. Generates pages, index and atom feeds.
gssg
- kiln (Go) - simple static site generator for Gemini sites.
kiln
- Lupa - crawler to explore the geminispace and make statistics (you can see them at __gemini://gemini.bortzmeyer.org/software/lupa/stats.gmi ).
Lupa
- Manisha - Nagios (and compatible, such as Icinga) plugin to monitor Gemini servers.
Manisha
- spacewalk (Go) - Page-hash based feed aggregator for gemini.
spacewalk
- MastoGem (Go) - Mastodon proxy for Gemini.
MastoGem
- Hugo-2-Gopher-and-Gemini (Python) - A Hugo theme to convert a Hugo site to Gemini or Gopher.
Hugo-2-Gopher-and-Gemini
- Gopher-and-Gemini-Walker (Python) - Terminal client (without network connectivity) to navigate a folder structure containing a Gemini capsule or Gopher hole.
Gopher-and-Gemini-Walker
- Gemini Diagnostics - A torture test for gemini servers
Gemini Diagnostics
Gemtext converters
- gemgen (Go) - A Markdown to Gemtext generator.
gemgen
- gemini-pandoc-lua-filter (Lua) - lua filter for pandoc to output Gemini text.
gemini-pandoc-lua-filter
- gemini-to-html (Node.js) - JavaScript library for parsing Gemini pages, and for rendering them to HTML.
gemini-to-html
- gemtext2latex - tool for converting Gemtext to reasonable LaTeX and thence PDF
gemtext2latex
- gemtext2md - tool for converting Gemtext to Markdown
gemtext2md
- gemtexter (Bash) - Site generator and blog engine for Gemini. Generates Atom and Gemfeeds , and also does Gemtext to HTML and Markdown conversion.
gemtexter
- gmi2html (Zig) - tiny gemtext to HTML converter with a focus on performance.
gmi2html
- gmi2html (Sed) - sed script to convert text/gemini to html.
gmi2html
- gmi-web (JS) - generate _semantic_ HTML styled for readability and mobile-friendliness.
gmi-web
- gmnhg (Go) - renders a Hugo site to a Gemini site.
gmnhg
- Html2GeminiPy (Python) - Converts Html sites to Gemini sites using markdownify and md2gemini.
Html2GeminiPy
- html2gmi (Go) - command line utility to convert HTML to gemtext
html2gmi
- md2gmn (Go) - renders Markdown text to Gemini pages.
md2gmn
- md2gemini (Python) - converter from Markdown to the Gemini text format.
md2gemini
- Hugo-2-Gopher-and-Gemini (Python) - A Hugo theme to convert a Hugo site to Gemini or Gopher.
Hugo-2-Gopher-and-Gemini
Syntax Highlighting
- gemini-vim-syntax - text/gemini syntax highlighting for vim.
gemini-vim-syntax
- gemini.el - text/gemini syntax highlighting for emacs.
gemini.el
- gemini.kak - text/gemini syntax highlighting for kakoune.
gemini.kak
- gemini.nanorc - text/gemini syntax highlighting for nano.
gemini.nanorc
- gemini.sublime-syntax - text/gemini syntax highlighting for bat (and maybe Sublime Text).
gemini.sublime-syntax
- gemini.yml - text/gemini syntax highlighting for micro.
gemini.yml
- language_gmi - gemtext syntax highlighting for lite-xl
language_gmi
Web proxies
Mozz.us portal
Soweli Lukin
Vulpes proxy
koyu.space GemProxy
Wobbly
Bots
- Fortune Teller Bot - Generates a fortune gmi file, gemlog/index.gmi, and atom.xml every time the bot is executed
Fortune Teller Bot
-----