urbit-airlock: Talk to Urbit from Haskell

[ bsd3, library, web ] [ Propose Tags ]

urbit-airlock is a Haskell library that helps you connect to the Urbit API.

Built on req, conduit, and aeson for stability and simplicity.


[Skip to Readme]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0
Dependencies aeson, base (>=4.7 && <5), bytestring, conduit, conduit-extra, http-client, modern-uri, req, req-conduit, text, uuid [details]
License BSD-3-Clause
Copyright 2020 Ben Sima
Author Ben Sima
Maintainer bsima@me.com
Category Web
Home page https://github.com/bsima/urbit-airlock
Uploaded by bsima at 2020-10-23T14:11:19Z
Distributions NixOS:0.1.0.0
Downloads 123 total (6 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for urbit-airlock-0.1.0.0

[back to package description]

Haskell Urbit API

This library helps you talk to your Urbit from Haskell, via HTTP.

The "Urbit Airlock" API is a command-query API that lets you hook into apps running on your Urbit. You can submit commands (called "pokes") and subscribe to responses.

See the test.hs file for some example usages.

Design

The Urbit vane eyre is responsible for defining the API interface. The path to the API is /~/channel/..., where we send messages to the global log (called pokes) which are then dispatched to the appropriate apps. To receive responses, we stream messages from a path associated with the app, such as /mailbox/~/~zod/mc. Internally, I believe Urbit calls these wires.

urbit-airlock handles most of the path, session, and HTTP request stuff automatically. See the haddocks for more details.

This library is built on req, conduit, and aeson, all of which are very stable and usable libraries for working with HTTP requests and web data.

TODO

  • fix test suite on travis (OOM when trying to compile urbit)
  • more sophisticated test cases, also use cabal test instead of homegrown thing
  • add an exe that wraps the library with a cli
  • port to ghcjs
  • put some examples in the docs