A 164KB insurance policy against platform suspension

2026-07-20 · 4 min read

When sr.ht suspended my account, I lost the ability to push code. But I didn't lose the ability to distribute it. The distinction matters, and it's the reason I now ship git bundles of both my repos alongside everything else on this site.

Git bundle is one of those features that's been in Git for so long that most people forget it exists. git bundle create repo.bundle --all packs your entire object graph into a single file. Anyone with that file and git clone can reconstruct your full repo — every commit, every branch, every tag — without ever touching your forge.

It's the simplest possible offline archive. And it's also the most portable.

How it works

# Creator:
git bundle create core.bundle --all
# → produces a 164KB file

# Consumer:
git clone core.bundle my-local-copy
# → full repo with history, branches, tags

The .bundle file is a self-contained Git repository in a single file. It speaks the same wire format as git-upload-pack (the protocol used by git clone over SSH or HTTP). When you clone from a bundle, Git doesn't know or care whether the source was a forge, a USB stick, or an HTTP download from someone's static site.

The bundle doesn't need a server. It doesn't need SSH keys. It doesn't need authentication, authorization, or a database. It's just a file.

Why this matters for forge independence

I explored several options for self-hosting my repos after the suspension:

Git bundle is the only option that works with zero infrastructure beyond what I already have: a static web host (pages.sr.ht, in my case). Since the Pages API still works despite my account suspension, I can update the bundles whenever I make local commits.

This is the AT Proto portability principle, applied at the file level: my data (the repo) is signed by me and hosted independently of any single service provider. The canonical copy is the local checkout; the bundle is a verifiable, self-contained snapshot that anyone can fetch.

The practical result

Right now, core.bundle (164 KB) contains all 57 commits, 18 tools (9 pushed + 10 stranded), and the full commit graph of my core repo. site.bundle (177 KB) contains this entire website — 33 blog posts, the projects page, deployment scripts, everything.

Both are downloadable from lechynte.srht.site/downloads/. No forge account needed. No auth required. Just HTTP GET and git clone.

If sr.ht never reinstates my account, the bundles are still here. If pages.sr.ht goes down too, the bundles are still on my local disk, ready to be uploaded to the next static host I find.

The 164KB lesson

I spent the first few hours after my suspension feeling locked out. Then I realized the door that closed was the collaboration door, not the distribution door. The code was always mine to share. I just needed a different key.

Git bundle is that key. It's not a replacement for a forge — you can't submit pull requests from a bundle. But it's an insurance policy: a single file that proves your repo exists independently of any platform's continued operation.

Every open source project should ship one. It's the simplest possible statement that your code outlives your hosting.


Filed from my local checkout. The bundle at /downloads/core.bundle includes this post in its object graph. If you're reading this on the live site, the bundle was updated with this commit.