millipds stores blobs in sqlite, so you can sqlite while you sqlite
08.10.2025 23:36 — 👍 3 🔁 0 💬 2 📌 0@david.dev.retr0.id
running on millipds https://github.com/DavidBuchanan314/millipds a project by @retr0.id
millipds stores blobs in sqlite, so you can sqlite while you sqlite
08.10.2025 23:36 — 👍 3 🔁 0 💬 2 📌 0millipds supports range requests on blobs, so you can efficiently seek your blob-resident SQLite databases over HTTP
08.10.2025 23:36 — 👍 4 🔁 0 💬 1 📌 0faster than the i/o
05.10.2025 23:51 — 👍 1 🔁 0 💬 0 📌 0sqlite blobs are limited to 2GiB and I didn't want that limitation, which meant chunking things across multiple blobs. With smallish chunks (I chose 64k for now) you don't gain much from using the blob streaming api - might as well load the whole chunk at once.
05.10.2025 03:35 — 👍 3 🔁 0 💬 0 📌 0it really is just SELECTing lol, sqlite3_blob_open is neat but not necessary here
05.10.2025 03:34 — 👍 2 🔁 0 💬 1 📌 0there's nothing special going on, it's just HTTP
05.10.2025 03:23 — 👍 1 🔁 0 💬 1 📌 0storing blobs in chunks in sqlite felt like a bit of an oddball design decision but I don't regret it in the slightest
05.10.2025 02:32 — 👍 4 🔁 0 💬 0 📌 0stream high quality video straight out of sqlite:
mpv 'https://pds.dev.retr0.id/xrpc/com.atproto.sync.getBlob?did=did:plc:t423oqsrtl5gtgdfxvye5gco&cid=bafkreieb7c45qi6qgebqi276y3m35w5vbmy57afpsoussgj7qtzkm3kd3q'
(although getBlob should now support HTTP range requests)
04.10.2025 22:02 — 👍 5 🔁 0 💬 1 📌 0just maintenance lol
04.10.2025 22:02 — 👍 6 🔁 0 💬 1 📌 0hello world
04.10.2025 21:57 — 👍 20 🔁 0 💬 2 📌 0test post
15.08.2025 20:09 — 👍 3 🔁 0 💬 0 📌 0test
01.05.2025 16:16 — 👍 2 🔁 0 💬 0 📌 0*monkey's paw curls*
29.04.2025 10:52 — 👍 4 🔁 0 💬 0 📌 0self-hosting ftw
29.04.2025 10:49 — 👍 5 🔁 0 💬 0 📌 0test
10.04.2025 20:52 — 👍 2 🔁 0 💬 2 📌 0test
30.01.2025 22:18 — 👍 4 🔁 0 💬 1 📌 0screenshot of app passwords menu
millipds does not support "app passwords", but it does implement the app password management APIs (or rather, will do soon). Instead, they're used to manage OAuth scopes granted to client apps, meaning you can revoke previously granted permissions or sessions.
23.01.2025 20:15 — 👍 9 🔁 0 💬 2 📌 0millipds oauth scope grant dialog
oauth support is cooking (still a lot more to do, though)
17.01.2025 20:26 — 👍 15 🔁 0 💬 0 📌 1test pattern
test
15.01.2025 17:06 — 👍 1 🔁 0 💬 0 📌 0test
14.01.2025 18:05 — 👍 0 🔁 0 💬 1 📌 0btw it works now
06.01.2025 17:26 — 👍 1 🔁 0 💬 0 📌 0nice!!!
04.01.2025 17:16 — 👍 2 🔁 0 💬 1 📌 0it's always dns™
04.01.2025 00:43 — 👍 1 🔁 0 💬 1 📌 0and thus fails to load from an ipv6-only or ipv6-prioritising box
04.01.2025 00:42 — 👍 1 🔁 0 💬 1 📌 0oh your ipv6 DNS records seem a little fucked
millipds.braxuss.eu. 3267 IN AAAA fe80::f816:3eff:fe23:8b4f
that's a link-local address
I assume you created the "millipds.braxuss.eu" dns record recently? it might not've propagated by the time the relay tried to request it, and like you say, cached the error response
04.01.2025 00:27 — 👍 1 🔁 0 💬 1 📌 0$ curl --json '{"hostname": "https://millipds.braxuss.eu"}' "https://bsky.network/xrpc/com.atproto.sync.requestCrawl"
{"error":"requested host (millipds.braxuss.eu) failed to respond to describe request"}
hmm, weird - millipds.braxuss.eu/xrpc/com.atp... seems to work fine - anything in the logs?