Go to file
Omar Polo 7b1d979032 reject non-gemini protocols with 53 2021-01-11 14:45:57 +00:00
.gitignore s/uri/iri since we accept IRIs 2021-01-11 13:08:00 +00:00
ChangeLog reject non-gemini protocols with 53 2021-01-11 14:45:57 +00:00
INSTALL.gmi extend installation notes 2020-10-03 14:13:55 +02:00
LICENSE added license 2020-10-02 19:54:59 +02:00
Makefile s/uri/iri since we accept IRIs 2021-01-11 13:08:00 +00:00
README.md new README + wording in manpage 2021-01-11 12:51:25 +00:00
gmid.1 new README + wording in manpage 2021-01-11 12:51:25 +00:00
gmid.c reject non-gemini protocols with 53 2021-01-11 14:45:57 +00:00
gmid.h reject non-gemini protocols with 53 2021-01-11 14:45:57 +00:00
iri.c remove infinite loop 2021-01-11 14:26:43 +00:00
iri_test.c remove infinite loop 2021-01-11 14:26:43 +00:00
utf8.c s/uri/iri since we accept IRIs 2021-01-11 13:08:00 +00:00

README.md

gmid

dead simple, zero configuration Gemini server

gmid is a simple and minimal Gemini server. It requires no configuration whatsoever so it's well suited for local development machines.

Care has been taken to assure that gmid doesn't serve files outside the given directory, and it won't follow symlinks. Furthermore, on OpenBSD, gmid is also pledge(2)ed and unveil(2)ed: the set of pledges are stdio rpath inet, with the addition of proc exec if CGI scripts are enabled, while the given directory is unveiled with rx.

Features

  • IRI support (RFC RFC3987)
  • dual stack: can serve over both IPv4 and IPv6
  • CGI scripts
  • (very) low memory footprint
  • small codebase, easily hackable

Planned features

  • virtual hosts

Drawbacks

  • not suited for very busy hosts. If you receive an high number of connection per-second you'd probably want to run multiple gmid instances behind relayd/haproxy or a different server.

Building

gmid depends a POSIX libc and libtls. It can probably be linked against libretls, but I've never tried.

See INSTALL.gmi for more info, but the build is as simple as

make

The Makefile isn't able to produce a statically linked executable (yet), so for that you have to execute by hand

make
cc -static *.o /usr/lib/lib{crypto,tls,ssl}.a -o gmid
strip gmid

to enjoy your ~2.3M statically-linked gmid.