gmi 0.2.1

A rust library to use the gemini protocol with an aim to be lightweight
Documentation
  • Coverage
  • 100%
    68 out of 68 items documented15 out of 25 items with examples
  • Size
  • Source code size: 91.09 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 2.7 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 21s Average build duration of successful builds.
  • all releases: 21s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Repository
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • Noodlez1232

gmi

gmi (pronounced as "Jee Mee" or however you'd like) is a simple to use, lightweight Rust library for interfacing with the Gemini protocol as a client. It was created out of frustration with exsisting libraries bringing in multiple other dependencies that I personally saw as unnecessary. It is NOT meant to be used as a library to run as a server.

This library is split into three main parts:

  • gemtext: A Gemtext parser
  • protocol: A collection of the various data structures that are used by the gemini protocol.
  • request: A module for actually making requests to gemini servers. This can be disabled by disabling the feature flag net.
  • url: A simple implementation of a subset of the URL RFC implementing only what is needed by Gemini.

Focuses

  • Lightweight
  • Small external dependencies
  • Simple interface

Features:

  • Gemini TLS support
  • Gemini Response parsing
  • Gemtext parsing
  • Client certificates
  • Trust On First Use (TOFU)
  • Mercury support

Simple Example:

use gmi::url::Url;
use gmi::request;
fn main() {
    let url = Url::from_str("gemini://gemini.circumlunar.space").unwrap();
    let resp = request::make_request(&url).unwrap();
    println!("{}", string::from_utf8_lossy(&resp.data));
}

Alternatives

gemini is a bit of a heavier, but more feature complete library for interfacing with the Gemini protocol. It can be used for both a server and a client, unlike gmi which can only be used as a client (for now (; )