Drew DeVault’s Sourcehut is a shoestring-budget competitor to the odious but wildly popular Github. This site is a Hugo-generated static site built from a Sourcehut-hosted repository using Sourcehut’s build system. Some notes on the Sourcehut experience are below.

Squiggles in URLs

Sourcehut follows very old convention in using ~ as a prefix to indicate a username. Despite being an old and correct convention, this runs up against widespread ignorance of what characters are actually valid in a URL - e.g., DeVault had to get the Go language developers to permit ~ as a valid module name character (Go module names are repository URLs). Mailing list names are even “worse” - they contain / as well as ~. The forthcoming organizational support will introduce the + character. None of this is wrong, but users should be prepared to encounter other services which react poorly to these characters.

Repository hosting

Repository hosting is straightforward and uncluttered by social misfeatures or inaccurately-named “forks” and “pull requests”. Repositories are readable via HTTPS, and writable via SSH. The repository view is straightforward, and instead of an ill-conceived social-media “follow” feature, RSS feeds are generated for repository branches (providing this site’s only RSS feed).

Users are encouraged to contribute patches to open source projects via email, as per the original design of Git (and open source practice predating Git). The equivalent site feature to Github’s “pull request” is ultimately a patch to email gateway that is equivalent to locally using git send-email.

Build service

Sourcehut’s build service takes simple YAML manifests and runs build tasks specified therein. A variety of Linuxes and BSDs are supported as build VMs. Sourcehut has a secret storage facility to enable the inclusion of e.g. deployment keys in a build. The presence of a .build.yml file in a pushed ref triggers the build specified therein automatically (only for the tip of the reference, not any intermediate commits, which is reasonable default behavior).

There does not seem to be a way to avoid triggering builds on certain branches (short of, perhaps, checking the current branch with git inside the build task in order to abort), which may be problematic if the build manifest contains a deployment step. Manually editing .build.yml within topic branches to remove deployments would work, but is prone to human error.


Sourcehut publishes quarterly financial reports to its mailing list. Despite outdoing its bloated billion-dollar “unicorn” competitors, Sourcehut is a small business with approximately $4,649 in monthly revenue in Q1 2020. As of the same report, Sourcehut had 13,418 users, of which 1,553 were paying users. (Payment does not yet purchase any more services than a free account; DeVault says that the intent is for a paid account to be required to own resources in the future.)