[ANN] Release of Mehari 0.1

@artichaut and I are very pleased to announce the first release of Mehari.

Mehari was created with the aim of offering a cross-platform framework to create Gemini applications.

Gemini is a lightweight alternative protocol to HTTP and Gopher, which runs on top of TLS.

On the “Geminispace”, there are mainly static content like blogs and other applications like games, BBS, etc.

Mehari API’s is largely inspired by Dream: it consists of a single module, and is pretty similar, there are handlers, routes, middlewares, etc.

Among the features, there are:

  • Cross-platform: the library provides many IO modules (Lwt, Mirage, Eio)

  • MIME type inference (using experimental Conan support)

  • Rate limit : it is easy to rate limit access to a route or to the whole server

  • Virtual hosting : hostname verification with SNI or request URL

  • Proxy: Ability to act as a proxy

  • CGI support with environment variables

  • Long-running TCP connection : incremental building of response body

Examples of use are available on the GitHub repository.

Documentation is available online with a short tutorial explaining the basics.

Currently, the library is in its infancy, the API is subject to change, so we are open to feedback and contribution, especially in terms of security.

Mehari is our first MirageOS-compatible library, so the creation of unikernels is experimental, and we’d love to get feedback on it.