This page details my more popular/important open source projects; for a full listing of everything, see my Github profile.


Fabric is a high level Python task runner & SSH toolkit. It’s the first major OSS project I undertook, adapting the original author’s one-module Capistrano clone into a larger, more Unix-y package.

Ownership transferred to me in 2008 and Fabric’s codebase & popularity as a task runner & deploy tool have grown in leaps & bounds since then. It’s easily the most popular option for Python web developers & is also used by a number of system administrators and operations toolkits.

While Fabric sees most of its use in private codebases (being an end-user tool), there are a number of projects on Github and PyPI which depend on it, such as TimelineJS, Flocker, NPR’s app template, Cuisine, Littlechef, w3af, and more.


The lower-level SSH functionality that Fabric uses is contained in Paramiko, created by Robey Pointer in 2003; it’s arguably been the default choice for SSH-via-Python since that time.

My stewardship of Fabric meant I worked closely with Paramiko for quite a while, and in 2012 I was given full ownership of the project.

Paramiko is depended upon by countless projects and services, including Ansible, Boto, OpenStack, StackStorm, Open edX, Review Board, DataDog, NSQ, Bees With Machine Guns, Deis, and many more.


Around 2011 it became clear Fabric needed rearchitecting, and as part of that process I created Invoke. Invoke is a ground-up, test-driven, Python 2+3 compatible rewrite of all functionality within Fabric that isn’t SSH specific: task management, local command execution, and so forth.

Despite not being well publicized prior to its 1.0 release & Fabric’s matching 2.0, it’s already gathered a number of users and contributors, as well as some dependent projects: PyCA Cryptography, Komodo Edit, TextBlob, Mopidy, Marshmallow, etc.


Born out of my thoughts surrounding proper project website management, the Alabaster Sphinx theme is a lightweight theme (based on popular existing Python doc sites) with a strong emphasis on customizability via configuration options.

I’m pretty sure I am the only one using it in dual-site setups, but it’s drawn a number of users regardless, and it now ships with Sphinx (as of 1.3) as the default theme.

Spec / pytest-relaxed

Despite my verbosity, I value the ability to type as little as necessary, and was fed up with the JUnit style of test organization in Python’s unittest and spinoffs (how many times do we really need the word test in tests/ -> TestClass -> test_function?). I also enjoyed the “nested” style of test organization found in tools like Ruby’s rspec.

Combining these things, I wrote a nosetests plugin & CLI tool allowing for non-repetitious, nested test organization & easy-to-scan color output: spec.

In the years since Spec’s conception, nosetests has fallen out of favor, with all the mindshare (and ideas about how to write nontrivial test suites, and fun plugins, etc) going to pytest. I’m now following suite, and have rewritten Spec – now more powerful and less opinionated by default – as the pytest-relaxed plugin.