A collection of awesome things regarding the gemini protocol ecosystem.
Go to file
Brian Mayer 360df5334d Add astro client 2021-07-28 12:43:29 +02:00
LICENSE add CC0 license 2020-08-21 10:11:45 +02:00
README.md Add astro client 2021-07-28 12:43:29 +02:00
contributing.md Create contributing.md 2020-08-21 10:14:07 +02:00

README.md

Awesome Gemini Awesome

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.

Repo mirrors:

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.

Gemini Specification

Contents

Clients

Terminal

  • Amfora (Go) - "fancy" terminal client.
  • astro (Shell) - terminal client using less written in POSIX shell script.
  • Asuka (Rust) - an NCurses-based Gemini client.
  • AV-98 (Python) - Gemini client derived from the popular VF-1 Gopher client.
  • bollux (Bash) - bash Gemini client.
  • bombadillo (Go) - combined Gopher, Gemini, Finger, and File client with vim-inspired key mappings.
  • cgmnlm (C) - colorful gemini line-mode client, fork of gmni.
  • diohsc (Haskell) - simple line-based command-response terminal user interface with ANSI colour.
  • Elpher (Emacs) - combined Gopher and Gemini client for the popular text editor / operating system.
  • gem.awk (Awk) - minimal but usable interactive Gemini client in < 250 LOC of Awk.
  • gembro (Go) - gemini client using Bubble Tea.
  • gemini-demo-1 (Python) - minimal but usable interactive Gemini client in < 100 LOC of Python 3.
  • gemini-demo-2 (Lua) - minimal but usable interactive Gemini client in < 100 LOC of Lua.
  • gemini-demo-3 (Go) - minimal but usable interactive Gemini client in not quite < 100 LOC of Go.
  • gemini-fetch (Node.js) - cURL-like CLI for loading content from Gemini URLs.
  • gmni (C) - CLI utility (like curl) and line-mode browser.
  • Gremlin (Rust) - TUI for browsing Gemini space
  • leo (Python) - lightweight, prompt-driven Gemini client.
  • min (Go) - supports advanced features like input and client certificate generation.
  • ncgopher (Rust) - gopher and gemini client for the modern internet.
  • tinmop (Common Lisp) - opinionated Mastodon and Gemini client

Graphical

Cross-platform

  • Agregore - (Electron.js) - peer to peer web browser with support for loading Gemini pages.
  • Alrisha (QML) - QML-based Gemini client.
  • Castor (Rust) - graphical Gemini client using GTK.
  • Fafi (Racket) - graphical Gemini browser written in Racket.
  • Fossil (Vala) - GTK3 Gemini browser written in Vala for desktop and mobile.
  • Lagrange (C) - 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++) - graphical Gopher and Gemini client using QT.
  • spacewar (Electron.js) - Gemini browser running on Electron.

Mobile

  • Ariane (Kotlin/Java) - Gemini protocol client for Android based OS.
  • Deedum (Dart) - an Android and iOS client made with Flutter.
  • Elaho (Swift) - full featured Gemini protocol browser for iOS.
  • Gem (Python) - Gemini client for Ubuntu Touch.
  • Xenia (Java) - Gemini proxy for Android.
  • Phaedra (Java) - Gemini client for Android supporting even very old ones; author recommends using Ariana if a current Android is at hand.

Windows

  • GemiNaut (C#) - user friendly graphical Gemini client for MS Windows.

Programming

  • gemclient (Nim) - rich client library for the Gemini Protocol.
  • derhuerst/gemini (Node.js) - server & client lib.
  • a-h/gemini (Go) - Applications and libraries for building applications on Gemini.
  • cuipod (C#) - Simple yet flexible framework for Gemini protocol server.
  • go-gemini (Go) - library that provides an easy interface to create client and servers.
  • go-gemini (Go) - more recent fork of the library above.
  • gig (Go) - Gemini framework.
  • ignition (Python) - Gemini client transport/request library for python3.
  • Agunua (Python) - Gemini library to write clients. Includes IRI support, gemtext parsing and CLI tool.
  • kaksik (Deno/TypeScript) - middleware library for building server applications.
  • ruby-net-text (Ruby) - Gemini support in Net::* and URI::* stack.
  • warmuuh/jemini(Java) - reactive gemini-client, part of jemini-project
  • GemPub Specification - Gempub, the Gemini e-book (and capsule archive) container 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.

Resources

Servers

  • Agate (Rust) - simple Gemini server for static files.
  • Apogee (Kotlin) - Gemini server written in Kotlin for the JVM.
  • a-h/gemini (Go) - Server for Linux, Mac, Raspberry Pi. Supports SNI for multiple domains on the same server, has Docker image.
  • blizanci (Erlang) - server designed primarily for robustness and security.
  • Denoscuri (Typescript) - simple Gemini server written using Deno and Typescript.
  • Dʒɛmɪni (Racket) - server with features like SNI and CGI.
  • Diamant (Ruby) - simple Gemini server for static files.
  • Doppio (Java) - single-JAR Gemini server with CGI, authentication, and Atom feed support.
  • Duckling proxy 🦆 (Go) - scheme-specific filtering proxy for Gemini clients to access the web.
  • Earl Server (Kotlin) - Gemini fileserver for the JVM.
  • Ergol (PHP) - light Gemini server able to host several capsules with different cerificates.
  • GeGoBi (Python) - server to facilitate easy Gemini-Gopher bi-hosting.
  • Gemeaux (Python) - server using only the Python standard library.
  • gemini-ipfs-gateway (Go) - an IPFS Gateway that makes IPFS content available over the Gemini protocol.
  • gemini-server (Haskell) - lightweight server for the Gemini protocol.
  • geminid (C) - Gemini Server in C.
  • geminid (Scheme) - Gemini Server in CHICKEN Scheme.
  • gemini-php (PHP) - simple Gemini server in PHP.
  • JAGS-php (PHP) - fork of gemini-php with support of dynamic pages.
  • geminim (Nim) - an async lightweight Gemini server made in Nim.
  • gmid (C) - simple and secure Gemini server.
  • gmifs (Go) - Gemini file server with auto indexing support, caching and auto TLS key pair creation.
  • gmnisrv (C) - high-performance Gemini server for POSIX systems.
  • Gemserv (Rust) - 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.
  • Hydepark (Rust) - discussion forum application for Gemini.
  • Jetforce (Python) - built-in static file server with support for gemini directories and CGI scripts.
  • warmuuh/jemini(Java) - dual gemini/http server on top of jetty with spring-boot integration
  • Lupa Pona (Perl) - simple single directory Gemini server.
  • Marami (Prolog) - server written in Prolog.
  • Molly Brown (Go) - full-featured Gemini server implemented in Go.
  • MoonGem (C) - gemini server with inline Lua scripting for dynamic content generation.
  • net-gemini (Go) - gemini server inspired by Molly Brown.
  • northstar (Rust) - gemini server implementation.
  • Orbit (PHP) - Gemini server implemented in PHP.
  • Phoebe (Perl) - Gemini/web wiki.
  • pollux (Rust) - simple server that will only serve one index.gemini file.
  • rc-gemd (Shell) - simple Gemini server written in rc (for plan9 operating systems).
  • Satellite (Go) - small Gemini server for serving static files.
  • Shavit (Go) - configurable Gemini server for UNIX operating systems.
  • Space-Age (Clojure) - Gemini server written in Clojure.
  • Taurus(Rust) - A Concurrent Gemini Server.
  • Titan (Rust) - simple TOML-configured Gemini server and an Express-like Gemini server framework.
  • twins (Go) - YAML-configured Gemini server supporting vhosts, FastCGI and reverse-proxying.
  • vger (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 (https version) - host small Gemini web pages over https and Gemini (repo).
  • gemini://geminispace.info - public search provider for Gemini (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://gus.guru/ - Gemini Universal Search (repo).
  • gemini://gemini.omarpolo.com/cgi/gempkg/ - interface for the OpenBSD ports collection.
  • gemini://tictactoe.lanterne.chilliet.eu - Tic Tac Toe game (repo).
  • gemini://ur.gs/ - translate from en->es and es->en (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.
  • gemini://houston.gmi.bacardi55.io - A simple tool to check if a capsule is up or not

Tools

  • CAPCOM (Python) - Atom feed aggregator for gemini.
  • certified (Python) - Generate TOFU TLS certificates for gemini servers.
  • cl-yag (Common-Lisp) - Static site generator producing gemini, gopher and html.
  • comitium (C) - A feed aggregator for gemini supporting many formats and protocols.
  • gemini-pandoc-lua-filter (Lua) - lua filter for pandoc to output Gemini text.
  • gemini-to-html (Node.js) - JavaScript library for parsing Gemini pages, and for rendering them to HTML.
  • geminize - Firefox addon that redirects gemini:// URLs and links to a customizable HTTP-to-Gemini proxy.
  • gemlog.sh (Bash) - Utility for writing and managing gemini logs (gemlogs) and atom feeds (simple gemini static site generator/framework).
  • gem.git (Python) - git frontend CGI script.
  • gemini_http (Go) - simple tool for viewing gemini files that are placed on a http server.
  • gemmit (Go) - social news aggregation and web content rating website for the gemini protocol.
  • gemtexter (Bash) - Site generator and blog engine for Gemini. Generates Atom and Gemfeeds , and also does Gemtext to HTML and Markdown conversion.
  • gloggery (Go) - basic static site generator for blogs in Gemini.
  • gmitohtml (Go) - proxy that renders Gemini pages using HTML.
  • gmi2html (Zig) - tiny gemtext to HTML converter with a focus on performance.
  • gmi2html (Sed) - sed script to convert text/gemini to html.
  • gmi-web (JS) - generate semantic HTML styled for readability and mobile-friendliness.
  • gmnhg (Go) - renders a Hugo site to a Gemini site.
  • gssg (Go) - simple gemini static site generator. Generates pages, index and atom feeds.
  • Html2GeminiPy (Python) - Converts Html sites to Gemini sites using markdownify and md2gemini.
  • kiln (Go) - simple static site generator for Gemini sites.
  • Lupa - crawler to explore the geminispace and make statistics (you can see them at __gemini://gemini.bortzmeyer.org/software/lupa/stats.gmi ).
  • Manisha - Nagios (and compatible, such as Icinga) plugin to monitor Gemini servers.
  • md2gmn (Go) - renders Markdown text to Gemini pages.
  • md2gemini (Python) - converter from Markdown to the Gemini text format.
  • spacewalk (Go) - Page-hash based feed aggregator for gemini.
  • MastoGem (Go) - Mastodon proxy for Gemini.
  • Hugo-2-Gopher-and-Gemini (Python) - A Hugo theme to convert a Hugo site to Gemini or Gopher.
  • Gopher-and-Gemini-Walker (Python) - Terminal client (without network connectivity) to navigate a folder structure containing a Gemini capsule or Gopher hole.

Syntax Highlighting

Web proxies

Bots

  • Fortune Teller Bot - Generates a fortune gmi file, gemlog/index.gmi, and atom.xml every time the bot is executed