On Leaving GitHub
Those who know me remember how I used to be in love with GitHub. The idea was genuinely interesting: Git is a decentralised system, which is great, but discovering repositories and projects was hard, and GitHub solved that under the premise – or promise? – of “Social Coding”.
But Vito, everyone moved to GitHub, that broke the “decentralised” part!
It may have. But Git, per se, is still decentralised; one may maintain copies in multiple places. The option to keep everything in one place was a choice people made freely, for convenience or visibility, and that’s fine. Git was Git. GitHub was GitHub.
For a long time, they earned the position. Here’s the shape of what they built:
- April 2008: GitHub launches.
- July 2009: 100,000 users.
- July 2010: 1 million hosted repositories. 60% codebases, 40% Gists.
- April 2011: 2 million repositories. 33 employees.
- September 2013: 7 million repositories, 4 million users, 234 employees.
- March 2015: 21 million repositories, 9 million users, 330 employees.
330 people carrying 21 million repositories: the ratio alone is worth sitting with. And yet, the platform was stable, the product made sense, and the surrounding ecosystem was alive in the way that healthy ecosystems are: every service did one thing and did it well. Want automated tests? Travis CI. Static analysis? Codacy. Coverage? Coveralls. GitHub was Git hosting with a social layer on top. The Unix-shaped approach worked – and no surprises there.
I treated my GitHub feed as a homepage for years. The signal from starred-by-people-I-respect was worth the visit on its own. That company was a place I wanted to be part of: large-scale systems, helping people all around the world, contributing back to the community.
June 4, 2018
Microsoft announces the acquisition. The developer community is caught off guard, and although everyone knows very well how Microsoft operates, nobody is quite sure what to expect. The first months are quiet, quieter than expected. Then the displacing begins:
- May 2019: Dependabot is acquired. Third-party dependency scanners lose their reason to exist on the platform.
- September 2019: Semmle is acquired to become CodeQL, which becomes the engine of GitHub Advanced Security. Same playbook.
- November 2019: GitHub Actions launches, scrapped from Azure Pipelines. Travis CI, the de facto standard for open-source CI, is sold to Idera that same year and guts itself within two years.
- March 2020: npm is acquired. It has been visibly under-maintained since.
- 2021 onward: Copilot ships, trained on the public corpus its own users uploaded under licenses that did not contemplate this use. The lawsuit (Doe v. GitHub) is still working through the courts.
The pattern is Microsoft’s EEE playbook with a fourth E bolted on. Embrace the ecosystem. Extend it with first-party equivalents. Extinguish the third parties that depended on integration access. Then enshittify what remains.
What the numbers look like
Pre-acquisition: a flat line at effectively four nines. Post-acquisition: a noisy descent that has never recovered. The worst drops – dipping below 99.6% – cluster in 2020, 2022, and 2023. There has not been a clean year since 2019, and the most recent data point, January 2026, is among the worst in the entire dataset.
This is not subtle, and it does not recover.
What’s left
The product I log into now is slow, the UI nags about Copilot in places where you’re reading issues, reviewing PRs, managing settings. Outages that used to be quarterly are now a weekly occurrence, and the chart above is what that looks like in aggregate, stripped of any individual incident’s ability to be explained away.
I don’t think this is recoverable from inside the company, and I don’t see incentives pointing that way.
What I’m doing
All my projects now live on Forgejo instances I run myself. Maintenance is minimal: it’s a Go binary and a database. The server does what I need and stops there. No feed, no notifications about features I didn’t ask for, and the uptime is whatever I make it — and it’s higher than GitHub’s.
For anyone who doesn’t want to self-host, Codeberg is doing serious work, and Forgejo is building federation so instances can communicate without a central host.
I’ll keep a presence on GitHub for work that requires it. Nothing new goes there.
git remote set-url origin was a two-second command, but the decision to run
it took way longer than the migration.