GrainFed

Download

One binary. Nothing to install and no package manager: it runs on any glibc-based Linux (Debian, Ubuntu, Fedora, Arch and the like — not Alpine). Version 0.2.0, built from commit da0d656.

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

Verify what you downloaded

SHA256SUMS holds both, and the earlier 0.1.0 files:

curl -LO https://dl.grainfed.waxquixotic.com/grainfed-0.2.0-linux-amd64.tar.gz
curl -LO https://dl.grainfed.waxquixotic.com/SHA256SUMS
sha256sum --check --ignore-missing SHA256SUMS
FileSHA-256
linux-amd64 f8fc0671b9f2ce6d9d5d47f3f06495f62992038908c803c36ccdbe3df3e9a2a0
linux-arm64 c2ab9d2ae68e138164eab2b69eea9fea9f4ca72532597223e4b8d6fd0738424d
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.2.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 and no node:

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.

The binary is one file, but it is not fully static: it uses the system's C library, which is why Alpine and other musl systems are not supported. For images it uses the system's libwebp, libheif and libavif if they are installed (faster, and lighter on memory) and otherwise falls back to copies built into the binary, so nothing else has to be installed.

0.2.0 is current. It is Pixelfed 0.15.0 compatible and carries everything on what's new: the new Pixelfed mobile app, conversation messages, sign-up protection and the fixes found by running it. It serves 947 of the 950 routes Pixelfed can serve, all 301 that are a hard external contract among them, and it runs one production instance. Take a backup before cutover, and read the reversal path on Migrate before you need it.

0.1.0 is still at its old address for anyone who needs it, but it predates Pixelfed 0.14 support and a number of fixes; use 0.2.0.