finds.dev← search

// the find

bookwyrm-social/bookwyrm

★ 2,795 · Python · NOASSERTION · updated Oct 2026

Social reading and reviewing, decentralized with ActivityPub

BookWyrm is a federated, ActivityPub-based alternative to Goodreads: track reading, write reviews, and follow people across independently-run instances that can also interoperate with Mastodon and Pleroma. It's for people who want a small, self-moderated book community instead of a single corporate platform, and for devs interested in a real-world ActivityPub implementation beyond microblogging.

The federation layer is a genuine implementation, not a Mastodon-API shim — it extends ActivityPub with its own book/author/review vocabulary and documents the extensions in FEDERATION.md. It pulls book metadata from multiple external sources (OpenLibrary, Inventaire, Libris, Finna) instead of hardcoding one. The stack is conventional and boring in a good way: Django, Postgres, Celery, Gunicorn, Nginx, all wired up with a documented docker-compose production path. There's a real set of admin management commands for the ugly parts of running a book database — deduping authors, repairing editions, fixing bad ISBNs.

The migrations directory alone has 300+ files with a long tail of merge migrations — a sign of years of schema churn that makes the Django model history hard to read if you're trying to understand the data model from the code. Running it yourself means two separate Redis roles (Celery broker and activity-stream manager) plus Postgres, so the self-hosting footprint is bigger than a typical small Django app. Contributing AI-generated code is explicitly banned by project policy, which is a real constraint for anyone relying on LLM-assisted workflows. Onboarding docs are split across the README, FEDERATION.md, and an external docs site rather than living in one place in the repo.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →