Skip to content

caranatar/denoscuri

Repository files navigation

Denoscuri

A simple Gemini server written using Deno and Typescript.

Features:

  • Virtual host support
  • Static file serving
    • Visiting a directory serves index.gmi or index.gemini if it exists
    • Returns a gemtext listing of the directory if no index file exists
  • Request, response, and error logging

Planned features:

  • Redirect/"Gone" support
  • Psuedo-CGI using dynamic import of typescript files
  • Input/query support
  • Breakout into libraries

Unsupported features (likely won't implement):

  • Proxying
  • Rate limiting
  • Client certificates - subject to change, pending Deno support for them

Configuration

Create a configuration with one or more server blocks:

{
  "servers": [
    {
      "hostname": "host_one",
      "port": 5555,
      "certFile": "/var/gemini/certs/host_one_cert.pem",
      "keyFile": "/var/gemini/certs/host_one_key.pem",
      "documentRoot": "/var/gemini/host_one",
      "logFile": "/var/gemini/logs/host_one.log"
    },
    {
      "hostname": "host_two",
      "certFile": "/var/gemini/certs/host_two_cert.pem",
      "keyFile": "/var/gemini/certs/host_two_key.pem",
      "documentRoot": "/var/gemini/host_two",
      "logFile": "/var/gemini/logs/host_two.log",
      "requireCRLF": false
    }
  ]
}

port, requireCRLF, and logFile are optional configuration items, which will default to 1965, true, and ./<hostname>.log, respectively, if they are not present. All other options are required.

Running

Requires installation of Deno.

Using local copy

Clone the repository, then run the following commands, substituting appropriate values for the allow-read and allow-write parameters and passing the path to your config file:

deno run --allow-net --allow-read=/var/gemini --allow-write=/var/gemini/logs denoscuri.ts /var/gemini/config.json

Using an auto-fetched copy

To fetch the latest version from master and run it:

deno run --allow-net --allow-read=/var/gemini --allow-write=/var/gemini/logs https://raw.githubusercontent.com/caranatar/denoscuri/master/denoscuri.ts /var/gemini/config.json

To fetch a tagged version (such as the current one):

deno run --allow-net --allow-read=/var/gemini --allow-write=/var/gemini/logs https://raw.githubusercontent.com/caranatar/denoscuri/v0.1.0/denoscuri.ts /var/gemini/config.json

Trivia

"Denoscuri" is a portmanteau of Deno and Dioscuri - the Greek name for the twins Castor and Pollux, who became the constellation Gemini

About

A Gemini server using Deno and Typescript

Resources

License

Stars

Watchers

Forks

Packages

No packages published