Awesome Gemini
A collection of awesome things regarding the
ecosystem.
Please contribute to this list to link to all the awesome gemini projects out there.
Repo mirrors:
What is Gemini
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
Contents
- Clients * Terminal * Graphical * Cross-platform * Mobile * Windows
- Programming
- Related Specifications
- Resources
- Servers
- Services
- Tools
- Web proxies
- Bots
Clients
Terminal
*
(Go) - "fancy" terminal client.
*
(Rust) - an NCurses-based Gemini client.
*
(Python) - Gemini client derived from the popular VF-1 Gopher client.
*
(Bash) - bash Gemini client.
*
(Go) - combined Gopher, Gemini, Finger, and File client with vim-inspired key mappings.
*
(C) - colorful gemini line-mode client, fork of gmni.
*
(Haskell) - simple line-based command-response terminal user interface with ANSI colour.
*
(Emacs) - combined Gopher and Gemini client for the popular text editor / operating system.
*
(Awk) - minimal but usable interactive Gemini client in < 250 LOC of Awk.
*
(Go) - gemini client using
.
*
(Python) - minimal but usable interactive Gemini client in < 100 LOC of Python 3.
*
(Lua) - minimal but usable interactive Gemini client in < 100 LOC of Lua.
*
(Go) - minimal but usable interactive Gemini client in not quite < 100 LOC of Go.
*
(Node.js) - cURL-like CLI for loading content from Gemini URLs.
*
(C) - CLI utility (like curl) and line-mode browser.
*
(Rust) - TUI for browsing Gemini space
*
(Go) - supports advanced features like input and client certificate generation.
*
(Rust) - gopher and gemini client for the modern internet.
*
(Common Lisp) - opinionated Mastodon and Gemini client
Graphical
# Cross-platform
*
- (Electron.js) - peer to peer web browser with support for loading Gemini pages.
*
(QML) - QML-based Gemini client.
*
(Rust) - graphical Gemini client using GTK.
*
(Racket) - graphical Gemini browser written in Racket.
*
(Vala) - GTK3 Gemini browser written in Vala for desktop and mobile.
*
(C) - desktop GUI client with inline image viewing, multiple tabs, bookmarks and more.
*
(Rust) - the fanciest Gemini client in the entire solar system.
*
(C++) - graphical Gopher and Gemini client using QT.
*
(Electron.js) - Gemini browser running on Electron.
# Mobile
*
(Kotlin/Java) - Gemini protocol client for Android based OS.
*
(Dart) - an Android and iOS client made with Flutter.
*
(Swift) - full featured Gemini protocol browser for iOS.
*
(Python) - Gemini client for Ubuntu Touch.
*
(Java) - Gemini proxy for Android.
*
(Java) - Gemini client for Android supporting even very old ones; author recommends using Ariana if a current Android is at hand.
# Windows
*
(C#) - user friendly graphical Gemini client for MS Windows.
Programming
*
(Nim) - rich client library for the Gemini Protocol.
*
(Node.js) - server & client lib.
*
(Go) - Applications and libraries for building applications on Gemini.
*
(C#) - Simple yet flexible framework for Gemini protocol server.
*
(Go) - library that provides an easy interface to create client and servers.
*
(Go) - more recent fork of the library above.
*
(Go) - Gemini framework.
*
(Python) - Gemini client transport/request library for python3.
*
(Python) - Gemini library to write clients. Includes IRI support, gemtext parsing and CLI tool.
*
(Deno/TypeScript) - middleware library for building server applications.
*
(Ruby) - Gemini support in Net::* and URI::* stack.
*
(Java) - reactive gemini-client, part of jemini-project
Related Specifications
*
- Gempub, the Gemini e-book (and capsule archive) container specification.
Resources
*
- the Gemini protocol specification.
*
- list of Gemini software.
*
- wiki space dedicated to Gemini communities and software.
Servers
*
(Rust) - simple Gemini server for static files.
*
(Kotlin) - Gemini server written in Kotlin for the JVM.
*
(Go) - Server for Linux, Mac, Raspberry Pi. Supports SNI for multiple domains on the same server, has Docker image.
*
(Erlang) - server designed primarily for robustness and security.
*
(Typescript) - simple Gemini server written using Deno and Typescript.
*
(Racket) - server with features like SNI and CGI.
*
(Ruby) - simple Gemini server for static files.
*
(Java) - single-JAR Gemini server with CGI, authentication, and Atom feed support.
*
(Go) - scheme-specific filtering proxy for Gemini clients to access the web.
*
(Kotlin) - Gemini fileserver for the JVM.
*
(PHP) - light Gemini server able to host several capsules with different cerificates.
*
(Python) - server to facilitate easy Gemini-Gopher bi-hosting.
*
(Python) - server using only the Python standard library.
*
(Go) - an IPFS Gateway that makes IPFS content available over the Gemini protocol.
*
(Haskell) - lightweight server for the Gemini protocol.
*
(C) - Gemini Server in C.
*
(Scheme) - Gemini Server in CHICKEN Scheme.
*
(PHP) - simple Gemini server in PHP.
*
(PHP) - fork of gemini-php with support of dynamic pages.
*
(Nim) - an async lightweight Gemini server made in Nim.
*
(C) - simple and secure Gemini server.
*
(C) - high-performance Gemini server for POSIX systems.
*
(Rust) - server with features like vhosts, CGI, SCGI, reverse-proxying and more.
*
(Common Lisp) - serves any type of document with an appropriate mime type.
*
(Lua) - the first Gemini protocol server with a lot of features.
*
(Rust) - discussion forum application for Gemini.
*
(Python) - built-in static file server with support for gemini directories and CGI scripts.
*
(Java) - dual gemini/http server on top of jetty with spring-boot integration
*
(Perl) - simple single directory Gemini server.
*
(Prolog) - server written in Prolog.
*
(Go) - full-featured Gemini server implemented in Go.
*
(C) - gemini server with inline Lua scripting for dynamic content generation.
*
(Go) - gemini server inspired by Molly Brown.
*
(Rust) - gemini server implementation.
*
(PHP) - Gemini server implemented in PHP.
*
(Perl) - Gemini/web wiki.
*
(Rust) - simple server that will only serve one `index.gemini` file.
*
(Shell) - simple Gemini server written in rc (for plan9 operating systems).
*
(Go) - small Gemini server for serving static files.
*
(Go) - configurable Gemini server for UNIX operating systems.
*
(Clojure) - Gemini server written in Clojure.
*
(Rust) - A Concurrent Gemini Server.
*
(Rust) - simple TOML-configured Gemini server and an Express-like Gemini server framework.
*
(Go) - YAML-configured Gemini server supporting vhosts, FastCGI and reverse-proxying.
*
(C) - Gemini server written in C used with inetd.
Services
- **gemini://drewdevault.com/cgi-bin/man.sh** - look up a POSIX man page.
- **gemini://flounder.online** (
) - host small Gemini web pages over https and Gemini (
).
- **gemini://geminispace.info** - public search provider for Gemini (
).
- **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://gus.guru/** - Gemini Universal Search (
).
- **gemini://gemini.omarpolo.com/cgi/gempkg/** - interface for the OpenBSD ports collection.
- **gemini://tictactoe.lanterne.chilliet.eu** - Tic Tac Toe game (
).
- **gemini://ur.gs/** - translate from en->es and es->en (
).
- **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.
*
- Gemini hosting from a web frontend.
- **gemini://houston.gmi.bacardi55.io** - A simple tool to check if a capsule is up or not
Tools
*
(Python) - Atom feed aggregator for gemini.
*
(Python) - Generate TOFU TLS certificates for gemini servers.
*
(Common-Lisp) - Static site generator producing gemini, gopher and html.
*
(C) - A feed aggregator for gemini supporting many formats and protocols.
*
(Lua) - lua filter for pandoc to output Gemini text.
*
(Node.js) - JavaScript library for parsing Gemini pages, and for rendering them to HTML.
*
- Firefox addon that redirects gemini:// URLs and links to a customizable HTTP-to-Gemini proxy.
*
(Bash) - Utility for writing and managing gemini logs (gemlogs) and atom feeds (simple gemini static site generator/framework).
*
(Python) - git frontend CGI script.
*
(Go) - simple tool for viewing gemini files that are placed on a http server.
*
(Go) - social news aggregation and web content rating website for the gemini protocol.
*
(Bash) - Site generator and blog engine for Gemini. Generates Atom and Gemfeeds , and also does Gemtext to HTML and Markdown conversion.
*
(Go) - basic static site generator for blogs in Gemini.
*
(Go) - proxy that renders Gemini pages using HTML.
*
(Zig) - tiny gemtext to HTML converter with a focus on performance.
*
(Sed) - sed script to convert text/gemini to html.
*
(JS) - generate *semantic* HTML styled for readability and mobile-friendliness.
*
(Go) - renders a Hugo site to a Gemini site.
*
(Go) - simple gemini static site generator. Generates pages, index and atom feeds.
*
(Python) - Converts Html sites to Gemini sites using markdownify and md2gemini.
*
(Go) - simple static site generator for Gemini sites.
*
- crawler to explore the geminispace and make statistics (you can see them at __gemini://gemini.bortzmeyer.org/software/lupa/stats.gmi ).
*
- Nagios (and compatible, such as Icinga) plugin to monitor Gemini servers.
*
(Go) - renders Markdown text to Gemini pages.
*
(Python) - converter from Markdown to the Gemini text format.
*
(Go) - Page-hash based feed aggregator for gemini.
*
(Go) - Mastodon proxy for Gemini.
*
(Python) - A Hugo theme to convert a Hugo site to Gemini or Gopher.
*
(Python) - Terminal client (without network connectivity) to navigate a folder structure containing a Gemini capsule or Gopher hole.
Syntax Highlighting
*
- text/gemini syntax highlighting for vim.
*
- text/gemini syntax highlighting for emacs.
*
- text/gemini syntax highlighting for kakoune.
*
- text/gemini syntax highlighting for nano.
*
- text/gemini syntax highlighting for bat (and maybe Sublime Text).
*
- text/gemini syntax highlighting for micro.
Web proxies
*
*
*
*
Bots
*
- Generates a fortune gmi file, gemlog/index.gmi, and atom.xml every time the bot is executed
--------------------------------------------------------------------------------