GrainFed

Download

One static binary. No runtime, no shared libraries, no package manager — the distribution does not matter. Version 0.1.0, built from commit 625ce96.

PlatformFileSize
Linux x86-64
amd64 — most servers and VPSes
grainfed-0.1.0-linux-amd64.tar.gz 12.8 MiB
Linux ARM64
aarch64 — Raspberry Pi 4/5, Ampere, Graviton
grainfed-0.1.0-linux-arm64.tar.gz 11.6 MiB

Verify what you downloaded

SHA256SUMS holds both:

curl -LO https://dl.grainfed.waxquixotic.com/grainfed-0.1.0-linux-amd64.tar.gz
curl -LO https://dl.grainfed.waxquixotic.com/SHA256SUMS
sha256sum --check --ignore-missing SHA256SUMS
FileSHA-256
linux-amd64 6716356c5e5965d0f8b63d5beae2bf029416ea110dd6b03a0e699c40e74d45d0
linux-arm64 98b092519558d2b16598cacd36243926eacd6a1e55c743162bac0bfc4a6cf6f4
These checksums are served from the same host as the files, so they prove the download was not corrupted in transit — not that the host is honest. If that distinction matters to you, build from source; the builds are reproducible with -trimpath given the same Go toolchain.

Install

tar xzf grainfed-0.1.0-linux-amd64.tar.gz
sudo install -m755 grainfed /usr/local/bin/grainfed
grainfed version

Full instructions are on Install. If you are replacing a running Pixelfed instance, start at Migrate instead.

Build it yourself

Go 1.26 or later, and nothing else — no C toolchain, no node, no system libraries:

git clone https://git.ntg.co/Quixotic/grainfed
cd grainfed
CGO_ENABLED=0 go build -trimpath -o grainfed ./cmd/grainfed

Cross-compiling is the same command with two variables, which is how the ARM64 build above is made:

CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -o grainfed ./cmd/grainfed

What is not here

Only Linux, and only these two architectures. GrainFed is a server: it is built to sit behind a reverse proxy on a machine that stays on. Go will cross-compile it for macOS, BSD or 32-bit ARM from the command above if you have a reason to, but those builds are not tested and are not published.

0.1.0 is a first numbered release. It serves every route Pixelfed can serve and is verified against a real database, a real browser and real remote servers — and it runs one production instance. Take a backup before cutover, and read the reversal path on Migrate before you need it.