GEMINI AND SPARTAN WITHOUT A BROWSER 2023-11-08 A particular joy of the Gemini and Spartan protocols - and the Markdown-like syntax of Gemtext - is their simplicity. (IMG) Screenshot showing this blog post as viewed over the Gemini protocol in the Lagrange browser Even without a browser, you can usually use everyday command-line tools that you might have installed already to access relatively human-readable content. Here are a few different command-line options that should show you a copy of this blog post (made available via CapsulePress, of course): GEMINI Gemini communicates over a TLS-encrypted channel (like HTTPS), so we need a to use a tool that speaks the language. Luckily: unless you're on Windows you've probably got one installed already (You can still install one on Windows, of course, it's just less-likely that your operating system came with such a command-line tool built-in). USING OPENSSL This command takes the full gemini:// URL you're looking for and the domain name it's at. 1965 refers to the port number on which Gemini typically runs - printf "gemini://danq.me/posts/gemini-without-a-browser\r\n" | \ openssl s_client -ign_eof -connect danq.me:1965 USING GNUTLS GnuTLS closes the connection when STDIN closes, so we use cat to keep it open. Note inclusion of --no-ca-verification to allow self-signed certificates (optionally add --tofu for trust-on-first-use support, per the spec). { printf "gemini://danq.me/posts/gemini-without-a-browser\r\n"; cat -; } | \ gnutls-cli --no-ca-verification danq.me:1965 USING NCAT Netcat reimplementation Ncat makes Gemini requests easy: printf "gemini://danq.me/posts/gemini-without-a-browser\r\n" | \ ncat --ssl danq.me 1965 SPARTAN Spartan is a little like "Gemini without TLS", but it sports an even-more-lightweight request format which makes it especially easy to fudge requests (Note that the domain and path are separated in a Spartan request and followed by the size of the request payload body: zero in all of my examples). USING TELNET Note the use of cat to keep the connection open long enough to get a response, as we did for Gemini over GnuTLS. { printf "danq.me /posts/gemini-without-a-browser 0\r\n"; cat -; } | \ telnet danq.me 300 USING CURL cURL supports the telnet protocol too, which means that it can be easily coerced into talking Spartan: printf "danq.me /posts/gemini-without-a-browser 0\r\n" | \ curl telnet://danq.me:300 USING NCAT/NETCAT Because TLS support isn't needed, this also works perfectly well with Netcat - just substitute nc/netcat or whatever your platform calls it in place of ncat: printf "danq.me /posts/gemini-without-a-browser 0\r\n" | \ ncat danq.me 300 I hope these examples are useful to somebody debugging their capsule, someday. LINKS (HTM) Gemini protocol specification (HTM) Spartan protocol specification (HTM) Gemtext markup format specification (HTM) Lagrange browser (DIR) CapsulePress, my WordPress to Gemini/Spartan bridge (HTM) Ncat