A collection of awesome things regarding the gemini protocol ecosystem.
Please contribute to this list to link to all the awesome gemini projects out there.
What is Gemini
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.
Contents
Clients
Terminal
- Amfora (Go) - a "fancy" terminal client.
- Asuka (Rust) - an NCurses-based Gemini client.
- AV-98 (Python) - a Gemini client derived from the popular VF-1 Gopher client.
- bollux (Bash) - a bash Gemini client.
- bombadillo (Go) - a combined Gopher, Gemini, Finger, and File client with vim-inspired key mappings.
- diohsc (Haskell) - a simple line-based command-response terminal user interface with ANSI colour.
- Elpher (Emacs) - a combined Gopher and Gemini client for the popular text editor / operating system.
- gemini-demo-1 (Python) - a minimal but usable interactive Gemini client in < 100 LOC of Python 3.
- gemini-demo-2 (Lua) - a minimal but usable interactive Gemini client in < 100 LOC of Lua.
- gemini-demo-3 (Go) - a minimal but usable interactive Gemini client in not quite < 100 LOC of Go.
- gemini-fetch (Node.js) - a cURL-like CLI for loading content from Gemini URLs.
- gmni (C) - a CLI utility (like curl) and a line-mode browser.
- min (Go) - supports advanced features like input and client certificate generation.
Graphical
Cross-platform
- Agregore - (Electron.js) - a peer to peer web browser with support for loading Gemini pages.
- Alrisha (QML) - QML-based Gemini client.
- Castor (Rust) - a graphical Gemini client using GTK.
- Fafi (Racket) - a graphical Gemini browser written in Racket.
- Lagrange (C) - a desktop GUI client with inline image viewing, multiple tabs, bookmarks and more.
- Moonlander (Rust) - the fanciest Gemini client in the entire solar system.
- Kristall (C++) - a graphical Gopher and Gemini client using QT.
- spacewar (Electron.js) - a Gemini browser running on Electron.
Mobile
- Ariane (Kotlin/Java) - a Gemini protocol client for Android based OS.
- Deedum (Dart) - an Android and iOS client made with Flutter.
- Gemini Browser (Swift) - iOS native browser.
- Xenia (Java) - a Gemini proxy for Android.
Windows
- GemiNaut (C#) - a user friendly graphical Gemini client for MS Windows.
Programming
- gemclient (Nim) - a rich client library for the Gemini Protocol.
- gemini (Node.js) - a server & client lib.
- a-h/gemini (Go) - Applications and libraries for building applications on Gemini.
- go-gemini (Go) - a library that provides an easy interface to create client and servers.
- go-gemini (Go) - a more recent fork of the library above.
- gig (Go) - a Gemini framework.
- ruby-net-text (Ruby) - Gemini support in Net::* and URI::* stack.
- ignition (Python) - a Gemini client transport/request library for python3.
Resources
- Gemini Specification - the Gemini protocol specification.
- gemini.circumlunar.space/software - a list of Gemini software.
- transjovian.org/gemini - a wiki space dedicated to Gemini communities and software.
Servers
- Agate (Rust) - a simple Gemini server for static files.
- a-h/gemini (Go) - Server for Linux, Mac, Raspberry Pi. Supports SNI for multiple domains on the same server, has Docker image.
- blizanci (Erlang) - a server designed primarily for robustness and security.
- Denoscuri (Typescript) - a simple Gemini server written using Deno and Typescript.
- Dʒɛmɪni (Racket) - a server with features like SNI and CGI.
- Diamant (Ruby) - a simple Gemini server for static files.
- Duckling proxy 🦆 (Go) - a scheme-specific filtering proxy for Gemini clients to access the web.
- Earl Server (Kotlin) - a Gemini fileserver for the JVM.
- GeGoBi (Python) - a server to facilitate easy Gemini-Gopher bi-hosting.
- Gemeaux (Python) - a Server using only the Python standard library.
- gemini-server (Haskell) - a lightweight server for the Gemini protocol.
- geminid (C) - a Gemini Server in C.
- geminid (Scheme) - a Gemini Server in CHICKEN Scheme.
- gemini-php (PHP) - a simple Gemini server in PHP.
- geminim (Nim) - an async lightweight Gemini server made in Nim.
- gmnisrv (C) - a high-performance Gemini server for POSIX systems.
- Gemserv (Rust) - a server with features like vhosts, CGI, SCGI, reverse-proxying and more.
- Germinal (Common Lisp) - serves any type of document with an appropriate mime type.
- GLV-1.12556 (Lua) - the first Gemini protocol server with a lot of features.
- Jetforce (Python) - a built-in static file server with support for gemini directories and CGI scripts.
- Lupa Pona (Perl) - a simple single directory Gemini server.
- Marami (Prolog) - a server written in Prolog.
- Molly Brown (Go) - a full-featured Gemini server implemented in Go.
- net-gemini (Go) - a gemini server inspired by Molly Brown.
- northstar (Rust) - a gemini server implementation.
- Orbit (PHP) - a Gemini server implemented in PHP.
- pollux (Rust) - a simple server that will only serve one
index.gemini
file. - Satellite (Go) - a small Gemini server for serving static files.
- Shavit (Go) - a configurable Gemini server for UNIX operating systems.
- Space-Age (Clojure) - a Gemini server written in Clojure.
- Titan (Rust) - a simple TOML-configured Gemini server and an Express-like Gemini server framework.
- twins (Go) - a YAML-configured Gemini server supporting vhosts, FastCGI and reverse-proxying.
Services
- gemini://drewdevault.com:1965/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).
- gemini://glv.one - a free platform as a service (PaaS) that runs any Gemini server (packaged as a Docker image) in the cloud.
- gemini://gus.guru/ - Gemini Universal Search (repo).
- gemini://tictactoe.lanterne.chilliet.eu - a Tic Tac Toe game (repo).
- gemini://ur.gs/ - translate from en->es and es->en (repo).
- gemini://rawtext.club:1965/~sloum/geminews/ - Daily news feeds proxied to gemini.
- gemini://rawtext.club:1965/~sloum/cgi/othello/ - Play othello/reversi against a computer opponent over gemini.
- gemini://rawtext.club:1965/~sloum/cgi/weather - US weather reports by zip code.
- gemlog.blue - Gemini hosting from a web frontend.
Tools
- gemini-pandoc-lua-filter (Lua) - a lua filter for pandoc to output Gemini text.
- gemini-to-html (Node.js) - a JavaScript library for parsing Gemini pages, and for rendering them to HTML.
- geminize - a Firefox addon that redirects gemini:// URLs and links to a customizable HTTP-to-Gemini proxy.
- gem.git (Python) - git frontend CGI script.
- gloggery (Go) - basic static site generator for blogs in Gemini.
- gmitohtml (Go) - a proxy that renders Gemini pages using HTML.
- gmnhg (Go) - renders a Hugo site to a Gemini site.
- kiln (Go) - a simple static site generator for Gemini sites.
- md2gmn (Go) - renders Markdown text to Gemini pages.
- spacewalk (Go) - Page-hash based feed aggregator for gemini.
- CAPCOM (Python) - Atom feed aggregator for gemini.
Syntax Highlighting
- gemini-vim-syntax - text/gemini syntax highlighting for vim.
- gemini.el - text/gemini syntax highlighting for emacs.
- gemini.kak - text/gemini syntax highlighting for kakoune.
- gemini.nanorc - text/gemini syntax highlighting for nano.