Scarlet Devil Mansion

RemiGemini

RemiGemini is an extremely small and lightweight library for interfacing with the Gemini Protocol using the Crystal programming language. It includes classes that aid in the implementation of clients and servers.

Source Code Repository

Example Usage

A simple client:

require "./src/remigemini"

RemiGemini::Client.get(ARGV[0], noVerify: true) do |resp|
  puts "Response Status: #{resp.status}"
  puts "Response message: #{resp.meta}"
  puts resp.body
end

A very simple server:

require "./src/remigemini"

if ARGV.size != 2
  abort("Usage: #{File.basename(PROGRAM_NAME)}  ")
end

server = RemiGemini::Server.new do |request|
  if request.uri.path == "" || request.uri.path == "/"
    resp = RemiGemini::Client::Response.new("Hello, world!")
    resp.to_io(request.sock)
  else
    resp = RemiGemini::Client::Response.new(RemiGemini::StatusCode::NotFound, "Nothing yet :(")
    resp.to_io(request.sock)
  end
end

address = server.bind("localhost", ARGV[0], ARGV[1], port: 8069)
puts "Listening on gemini://#{address}"
server.listen