Ground Control

Ground Control is a programmable Project Gemini server for Linux.

Download v0.2 alpha

or

Ground Control is configured by writing request handlers in the Wren scripting language, or using built-in handlers to serve static files.

The Wren Scripting Language

Ground Control is also a general purpose Wren runtime and system library that is well suited for programs that handle I/O from many concurrent connections.

Ground Control trades POSIX compatibility for modern operating system features. All I/O is dispatched through io_uring, and TLS (after the initial handshake) is transparently handled by the kernel via ktls.

Ground Control depends on the following external libraries:

All external dependencies are common system libraries that can be installed through your preferred package manager. Ground Control is tested on Debian 13 Trixie. It will not run on previous versions of Debian.

Building & Installing

Ensure that all dependent libraries are installed, then run

Copy the file "ground-control" to "/usr/local/bin" or to another directory from which it can be executed.

Ensure that the Kernel TLS module is loaded.

Hosting a Static Capsule

Create a directory to hold your capsule configuration. In this directory, generate an RSA key and self signed certificate. For example, using this openssl command

Create a directory called "public_gemini" in your capsule configuration directory. This directory will contain static files for ground control to serve. If you have some already, put them there now.

Create a file called "main.wren" in your capsule configuration directory and put this text in it:

now run

Files

.gitignore

COPYING

Makefile

README.gmi

bencode.c

bencode.h

coroutine.h

dns.wren

docs

fd.c

fd.h

fd.wren

gemini.wren

header.py

http.wren

lock.wren

main.c

main.wren

process.c

process.h

process.wren

regex.c

regex.h

regex.wren

sched.wren

scheduler.c

scheduler.h

serial.wren

std

time.c

time.h

time.wren

tls.c

tls.h

tls.wren

wren

wren_binding.c

wren_binding.h