A social pastebin built on atproto.
6
fork

Configure Feed

Select the types of activity you want to include in your feed.

Python 67.0%
HTML 30.8%
Dockerfile 1.4%
Just 0.6%
CSS 0.2%
Other 0.1%
25 1 0

Clone this repository

https://tangled.org/aly.codes/morsels https://tangled.org/did:plc:zntngpowgd6rorjt3haywj36/morsels
git@tangled.org:aly.codes/morsels git@tangled.org:did:plc:zntngpowgd6rorjt3haywj36/morsels

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

Build License: AGPL v3 Ko-fi

morsels

Small bites, big ideas.

A social pastebin on the Atmosphere.

Features#

  • Share bites: Paste anything, share it with a link.
  • Built on atproto: Your bites are stored in your own repo as blue.morsels.bite records. 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.reply records in your repo.
  • Syntax highlighting: Auto-detected via Pygments.
  • Self-hostable: One Docker command to run your own instance.

Quick start#

docker run -d -p 8000:8000 -v morsel-data:/data ghcr.io/alyraffauf/morsels:latest

Or with Docker Compose:

git clone https://github.com/alyraffauf/morsels.git
cd morsel
docker compose up -d

Visit http://localhost:8000. First run auto-generates secrets.

From source#

Requires Python 3.14+ and uv.

git clone https://github.com/alyraffauf/morsels.git
cd morsel
uv sync
uv run flask --app main run --debug

Architecture#

morsels 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:

Configuration#

All configuration is automatic. On first run, morsels generates:

  • secrets.json — Flask secret key and OAuth client signing key
  • morsel.db — SQLite database for OAuth sessions

Set MORSEL_DATA_DIR to control where these files are stored (default: current directory, /data in Docker).

License#

AGPL-3.0