This page details my more popular/important open source projects; for a full listing of everything, see my Github profile.
To see my current overall roadmap, head to the bottom of the page.
If you’re a user of my open source and want to give back, I accept payments/donations/bounties/bribes/etc at the following spots:
- Tidelift, if your company wants to explore subscribing to aid developers of their open source dependencies - most of my projects are on here.
- Github Sponsors - for now, just enabled arbitrary monthly or one-time amounts, no specific tiers or anything.
- Square Cash / cash.me if you prefer that.
- PayPal.me likewise.
- Steam wishlist - sadly our brains don’t work great if we’re coding truly nonstop!
- Amazon wishlist ditto (it’s mostly books).
The major projects
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.
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.
Along with Alabaster, Releases is one of my “meta-projects” that arose simply from having multiple other projects to wrangle. This one is a changelog plugin for Sphinx that lets you write multi-release-branch changelogs as a ‘stream’ of changes, and collates those into release buckets.
It also just nicely formats a changelog and has some helpers for linking to the issues being referenced, which is probably why other folks use it too.
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
spinoffs (how many times do we really need the word
test_function?). I also enjoyed the
“nested” style of test organization found in tools like Ruby’s
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 suit,
and have rewritten Spec – now more powerful and less opinionated by default
– as the pytest-relaxed
This lists what I expect to work on in the short/medium term across all projects, in priority order. ETAs are not available – please don’t ask for them :)
See the page footer for a last-modification date. I expect to update every few weeks, depending on how long each task takes; my OSS days are typically Fridays.
High level / cross-project
- A(nother) Paramiko bugfix and/or feature release focusing on some key/cipher/etc PRs that have piled up.
- Administrivia update/CircleCI migration for Invoke.
- Invoke feature/bugfix release, to let off steam. Grab bag / whatever’s in my ‘next release’ milestone.
- Administrivia update/CircleCI migration for Fabric.
- Fabric is the only project thus far with a serious integration test suite; this used regular background services on Travis’ VM infrastructure so I’ll need to see what Circle offers here - probably docker-compose or maybe just a background job type.
- Fabric (2) feature/bugfix release, whatever’s in high priority milestones.
- Last feature release for Fabric 1.x - merging
fabric3into mainline for Python 3 support.
- This is to ease upgrades for users trying to go from Fabric 1 on Python 2 to Fabric 2 on Python 3.
- Everything: Dropping Python 2. See link for details.
Once that’s done, the general next-steps direction for various projects are below.
- Task-related features like sharing flags and data between tasks & calling tasks programmatically from other tasks, will probably be the next major focus.
- Cryptography/security fixes, depending on how many were tackled in the previous release. Key types, cipher updates, etc.
- The auth functionality (key loading/selection, auth mechanism cascading, error handling regarding keys, etc) has had a “coming soon” massive rewrite for years now and I’d love to sprint on it finally.
- Looking at what we’re missing vs OpenSSH - anything that seems like a major “win” and isn’t a ton of work is worth considering.
- Achieving feature parity with v1 - there’s still plenty of things on its upgrading page listed as “pending”.
- These will all get their CircleCI migration on an as-needed basis.
- Releases (my changelog project) badly needs upgrading to work with modern
Sphinx versions. Given it does a lot of gnarly stuff with innards, this could
take a while.
- This project is also well overdue for some feature changes, especially as my own needs elsewhere (far fewer active release lines at a time) are becoming simpler. It’s not out of the question that a very different-feeling 2.x might arise.
- pytest-relaxed (my kinda-sorta BDD pytest plugin) likely also needs updating for newer Pytest versions, and it also does weird stuff with pytest’s guts, so this is another “looks like a small change but may not be” update.
- Alabaster also needs a checkup & exploring whether the Sphinx team wants to take over maintainership, given it’s the default theme & my own needs for it are reasonably stagnant.