diohsc: Gemini client

[ browser, gpl, program ] [ Propose Tags ]

Line-based command-oriented interactive client for the gemini protocol.

[Skip to Readme]
Versions [faq] 0.1.1, 0.1.2
Change log CHANGELOG.md
Dependencies asn1-types (<0.4), base (>=4.3 && <5), bytestring (<0.11), containers (<0.7), cryptonite (<0.28), data-default-class (<0.2), data-hash (<0.3), directory (==1.3.*), drunken-bishop (<0.2), exceptions (<0.11), filepath (<1.5), haskeline (==0.8.*), hourglass (<0.3), iconv (<0.5), mime (<0.5), mtl (<2.3), network (<3.2), network-uri (<2.8), parsec (<3.2), pem (<0.3), process (<1.7), regex-compat (<0.96), safe (<0.4), temporary (<1.4), terminal-size (<0.4), text (<1.3), tls (<1.6), transformers (<0.6), unix (<2.8), x509 (<1.8), x509-store (<1.7), x509-validation (<1.7) [details]
License GPL-3.0-only
Author Martin Bays
Maintainer mbays@sdf.org
Category Browser
Home page https://mbays.sdf.org/diohsc
Source repo head: git clone https://repo.or.cz/diohsc.git
Uploaded by mbays at 2020-09-12T17:21:11Z
Executables diohsc
Downloads 72 total (72 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs pending
Build status unknown [no reports yet]



On windows: use libiconv for charset conversion (iconv is always used on POSIX systems, with no need for this flag)


Use libmagic to determine mimetypes of local files


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainer's Corner

For package maintainers and hackage trustees

Readme for diohsc-0.1.2

[back to package description]

Diohsc: Denotationally Intricate Obedient Haskell Smallnet Client

diohsc [URI]


  • Simple line-based command-response terminal user interface with ANSI colour.
  • Terse but combinatorially expressive command language.
  • Navigational aids: history, marks, queue.
  • Facilities to invoke external commands and use per-scheme proxies.
  • Responses streamed to pager or external command.
  • Certificate checking with TOFU and/or explicitly trusted CAs.
  • Support for TLS resuming, 0RTT, and client certificates.
  • All configuration and certificates stored as user-manipulable files.
  • Extensive help.


Install the haskell package manager cabal; e.g. on a debian system:

$ sudo apt-get install cabal-install

Then in the diohsc directory, run

$ cabal update && cabal install

The resulting binary will be installed as ~/.cabal/bin/diohsc.

Compile-time options

libmagic can be used to detect mimetypes of local files; try: cabal install -f Magic

Trusting server certificates

First, a disclaimer: do not trust this software to keep you secure. Although everything seems to be working as intended, and though the libraries it depends on seem solid, this is "very alpha" software and should not be relied on.

diohsc uses "Trust On First Use": if a host provides a certificate chain you do not currently trust, the client will ask for confirmation then add the certificate for the host to a collection stored in ~/.diohsc/known_hosts/ if there isn't already one stored; if there is one already stored, it will give some details and ask if you want to overwrite it with the newly provided one.

You can also trust Certificate Authorities by putting their certificates in ~/.diohsc/trusted_certs/. For example, if you want to trust all the certificates installed on your system,

$ ln -s /etc/ssl/certs/* ~/.diohsc/trusted_certs/

or if you just want to trust Let's Encrypt:

$ mkdir ~/.diohsc/trusted_certs
$ wget -O ~/.diohsc/trusted_certs/lets-encrypt-x3-cross-signed.pem https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem
$ sha256sum ~/.diohsc/trusted_certs/lets-encrypt-x3-cross-signed.pem
e446c5e9dbef9d09ac9f7027c034602492437a05ff6c40011d7235fca639c79a /home/me/.diohsc/trusted_certs/lets-encrypt-x3-cross-signed.pem


See diohscrc.sample for ideas for configuration options, in particular indicating how to make use of third-party software to allow diohsc to access gopher, and parse markdown and html, and provide ascii-art previews of image files. Copy the file to ~/.diohsc/diohscrc and uncomment lines as appropriate.

Multiple instances

Multiple simultaneous diohsc instances may share ~/.diohsc without serious conflict. However, command history is written only on exit, so the last instance to exit will determine that history. The log is appended to continuously, but read only on startup, so logs from simultaneous instances will be interleaved. Uris in ~/.diohsc/queue are taken by an instance on startup and whenever it processes a command, and leftover queue items are written there on exit.

To ensure that an instance won't interfere with other running instances: either use "--datadir" to specify an alternative directory to ~/.diohsc, or use the "--ghost" option (which also acts as a "private browsing" mode).

Running under Windows

It is apparently possible to compile and run diohsc on Windows. However, it requires a terminal with ANSI and unicode support, which it seems is not the default situation in even the most recent versions of Windows. On Windows 10, following the instructions of this link has been reported to work: https://akr.am/blog/posts/using-utf-8-in-the-windows-terminal