Below is a selection of my open source work. The full archive of my open source software is available on GitHub.
Jit is a stripped-down but well-developed Git client written in pure Ruby, as presented in my book Building Git. It supports most of the common commands for creating commits, branching and merging, viewing the history, and pushing and fetching content between repositories.
Faye is a realtime messaging product for the web, aiming to make it straightforward for developers to deploy publish/subscribe messaging in their Ruby and Node.js applications. It has been very widely adopted and has spawned a set of WebSocket libraries for both platforms.
websocket-driver (Ruby, Node) implements the complete WebSocket protocol, including historical support for old versions of the protocol that saw deployments in browsers. This library is designed to be combined with many different I/O and server implementations, allowing integration into users’ preferred platform. It is used as the basis of the WebSocket support in Rails and the Webpack dev server, among many others.
faye-websocket (Ruby, Node) provides an implementation of the standard WebSocket API for Ruby and Node, built on top of websocket-driver. In Ruby it uses the EventMachine I/O library and integrates with Passenger, Puma and Thin. In Node it integrates with the standard library HTTP and TCP/TLS modules.
websocket-extensions (Ruby, Node) provides a framework for extending the WebSocket protocol. It defines a set of APIs that parser libraries and extension plugins to implement and facilitates their interoperation, making sure headers are negotiated correctly and messages flow through the extensions in the right order. It is used inside websocket-driver.
permessage-deflate (Ruby, Node) implements support for per-message compression in the WebSocket protocol, as a plugin for websocket-extensions. It can thus be used with websocket-driver, faye-websocket, and Faye itself.
Vault is a password manager, available both online and as a command-line program. It uses HMAC to deterministically generate unique service passwords based on a master passphrase, without the need to necessarily store any secrets. When used on the command-line, it does allow storage of settings in an encrypted format using storeroom, a cross-platform library providing an encrypted filesystem-like key-value store.
Infer is an experimental minimalist logic programming language, designed for the direct expression of logic rules and the automated production of proof diagrams. It provides only a system for logic inference, with little baked-in syntax and no built-in data structures or libraries. It lets the user build up a logic from the smallest possible ingredients to model their problem.
tnt, short for typographic number theory, is an implementation of the formal system of the same name presented in Gödel, Escher, Bach. It provides a tool for working through proofs in this system, making sure that only proofs that follow the rules are accepted.
Fargo is a Lisp-family programming language written
macros, and delimited continuations. It reuses the core library from
Heist, an earlier Scheme-like language I
wrote in Ruby, which supports reusable