Static file server for the gemini protocol
Find a file
Jeena ea8083fe1f Implement dual host configuration: bind_host and hostname
- Replace 'host' config with separate 'bind_host' and 'hostname'
- bind_host: IP/interface for server binding (default 0.0.0.0)
- hostname: Domain for URI validation (required)
- Update all parsing and validation code
- Create dist/ directory with systemd service, config, and install guide
- Add comprehensive INSTALL.md with setup instructions
2026-01-16 12:46:27 +00:00
dist Implement dual host configuration: bind_host and hostname 2026-01-16 12:46:27 +00:00
src Implement dual host configuration: bind_host and hostname 2026-01-16 12:46:27 +00:00
.gitignore Refine repository structure 2026-01-15 08:31:43 +09:00
AGENTS.md Implement rate limiting with 41 responses and comprehensive logging 2026-01-16 06:00:18 +00:00
BACKLOG.md Update BACKLOG.md - all items completed 2026-01-16 11:48:17 +00:00
Cargo.toml Fix logging format: use request path instead of file path, clean timestamp 2026-01-16 11:34:38 +00:00
README.md Fix Gemini protocol status codes and error handling 2026-01-16 00:17:34 +00:00

Pollux - A Simple Gemini Server

Pollux is a lightweight Gemini server for serving static files securely. It supports TLS, hostname validation, and basic directory serving.

Requirements

Rust 1.70+ and Cargo.

Building

Clone or download the source, then run:

cargo build --release

This produces the target/release/pollux binary.

Running

Create a config file at /etc/pollux/config.toml or use --config to specify a path:

root = "/path/to/static/files"
cert = "/path/to/cert.pem"
key = "/path/to/key.pem"
host = "gemini.example.com"
port = 1965
log_level = "info"

Development Setup

Quick Start with Self-Signed Certs

mkdir -p tmp
openssl req -x509 -newkey rsa:2048 \
  -keyout tmp/key.pem \
  -out tmp/cert.pem \
  -days 365 \
  -nodes \
  -subj "/CN=localhost"

Update config.toml:

cert = "tmp/cert.pem"
key = "tmp/key.pem"

Run the server:

./pollux --config /path/to/config.toml

Or specify options directly (overrides config):

./pollux --root /path/to/static/files --cert cert.pem --key key.pem --host yourdomain.com --port 1965

Access with a Gemini client like Lagrange at gemini://yourdomain.com/.

Development Notes

  • These certificates are for local testing only
  • Browsers will show security warnings with self-signed certs
  • Certificates in the dev/ directory are gitignored for security

Options

  • --config: Path to config file (default /etc/pollux/config.toml)
  • --root: Directory to serve files from (required)
  • --cert: Path to certificate file (required)
  • --key: Path to private key file (required)
  • --host: Hostname for validation (required)
  • --port: Port to listen on (default 1965)

Certificate Management

  • Never commit certificate files to version control
  • Use development certificates only for local testing
  • Production certificates should be obtained via Let's Encrypt or your CA

Testing

Run cargo test for unit tests. Fix warnings before commits.