- Share bites: Paste anything, share it with a link.
- Built on atproto: Your bites are stored in your own repo as
blue.morsels.biterecords. Anyone can view them with a morsels instance. - OAuth login: Sign in with your Bluesky handle or any atproto account. No passwords stored.
- Replies: Comment on bites. Replies are
blue.morsels.replyrecords in your repo. - Syntax highlighting: Auto-detected via Pygments.
- Self-hostable: One Docker command to run your own instance.
docker run -d -p 8000:8000 -v morsel-data:/data ghcr.io/alyraffauf/morsels:latestOr with Docker Compose:
git clone https://github.com/alyraffauf/morsels.git
cd morsel
docker compose up -dVisit http://localhost:8000. First run auto-generates secrets.
Requires Python 3.14+ and uv.
git clone https://github.com/alyraffauf/morsels.git
cd morsel
uv sync
just devmorsels is a thin client, so it doesn't store your data. Bites and replies live in each user's atproto repo. The server handles:
- OAuth sessions in SQLite (
morsel.db) - App signing key in
secrets.json - In-memory caches for identity resolution, profiles, and the recent bites feed
External services:
- Slingshot — cached record fetching
- Constellation — reply backlink index
- UFOs — recent bites feed
All configuration is automatic. On first run, morsels generates:
secrets.json— app secret key and OAuth client signing keymorsel.db— SQLite database for OAuth sessions
Set MORSEL_DATA_DIR to control where these files are stored (default: current directory, /data in Docker).