#glib #gemini #gio #titan #client

ggemini

Glib/Gio-oriented network API for Gemini protocol

19 breaking releases

Uses new Rust 2024

new 0.20.0 Nov 7, 2025
0.19.0 Jul 26, 2025
0.18.0 Mar 27, 2025
0.13.0 Dec 14, 2024
0.10.0 Nov 16, 2024

#1302 in Network programming


Used in yoda

MIT license

135KB
3K SLoC

ggemini

Build Documentation crates.io

Glib/Gio-oriented network API for Gemini protocol

[!IMPORTANT] Project in development!

GGemini (or G-Gemini) library written as the client extension for Yoda, it also could be useful for other GTK-based applications dependent of glib / gio (2.66+) backend.

Requirements

Debian
sudo apt install libglib2.0-dev
Fedora
sudo dnf install glib2-devel

Install

cargo add ggemini

Usage

Example

use gio::*;
use glib::*;

use ggemini::client::{
    connection::{request::{Mode, Request}, Response},
    Client,
};

fn main() -> ExitCode {
    Client::new().request_async(
        Request::Gemini { // or `Request::Titan`
            uri: Uri::parse("gemini://geminiprotocol.net/", UriFlags::NONE).unwrap(),
            mode: Mode::HeaderOnly // handle content separately (based on MIME)
        },
        Priority::DEFAULT,
        Cancellable::new(),
        None, // optional auth `GTlsCertificate`
        None, // optional TOFU `GTlsCertificate` array
        |result| match result {
            Ok((response, _connection)) => match response {
                Response::Success(success) => match success.mime().unwrap().as_str() {
                    "text/gemini" => todo!(),
                    _ => todo!(),
                },
                _ => todo!(),
            },
            Err(_) => todo!(),
        },
    );
    ExitCode::SUCCESS
}

Other crates

Dependencies

~8–11MB
~245K SLoC