Agate

Simple Gemini server for static files

Agate is a server for the Gemini network protocol, built with the Rust programming language. Agate has very few features, and can only serve static files. It uses async I/O, and should be quite efficient even when running on low-end hardware and serving many concurrent requests.

Learn more

Gemini project

Agate on GitHub

Agate on crates.io

Change log

1.2.2

1.2.1

1.2.0

1.1.0

1.0.1

Installation and setup

1. Download and unpack the pre-compiled binary:

https://github.com/mbrubeck/agate/releases

Or run `cargo install agate` to install agate from crates.io.

Or download the source code and run `cargo build --release` inside the source repository, then find the binary at `target/release/agate`.

2. Generate a self-signed TLS certificate and private key. For example, if you have OpenSSL 1.1 installed, you can use a command like the following. (Replace the hostname with the address of your Gemini server.)

openssl req -x509 -newkey rsa:4096 -keyout key.rsa -out cert.pem \
    -days 3650 -nodes -subj "/CN=example.com"

3. Run the server. The command line arguments are `agate <address:port> <content_dir> <cert_file> <key_file>`. For example, to listen on the standard Gemini port (1965) on all network interfaces:

agate 0.0.0.0:1965 path/to/content/ cert.pem key.rsa

When a client requests the URL `gemini://example.com/foo/bar`, Agate will respond with the file at `path/to/content/foo/bar`. If there is a directory at that path, Agate will look for a file named `index.gmi` inside that directory.