







Sparked by nothing in particular, I want to emphasise that it is actually quite important to verify the CID of a blob you're serving if you're acting as a proxy for the content, I'd rather not have a PDS start maliciously modifying blobs and have that proxied to me by the app I'm using
Sep 12, 2026 at 10:04 PM
Blooym/porxie
[Mirror] A correct and efficient ATProto blob proxy for secure content delivery.
blooym.dev/porxie
[MIRROR ONLY] A correct and efficient ATProto blob proxy for secure content delivery.
Tibo on Twitter / X
Today we’re previewing Private Safety Processing, designed to let us keep offering Zero Data Retention while improving our safeguards. Even when benefiting from frontier intelligence, customers shouldn’t have to give up control of sensitive data.For ZDR deployments, content… https://t.co/W6Ls8W7x2l— Tibo (@thsottiaux) August 19, 2026
Tiles: take a blob's mimeType from what uploadBlob returns #11
The tiles appendix recommends `application/octet-stream` as the `mimeType` of every blob reference. On some PDS implementations that recommendation makes a tile unpublishable as soon as it contains a file whose type can be recognised from its bytes. The reference implementation (bluesky-social/atproto, packages/pds, actor-`store/blob/transactor.ts`) does two things that together cause it: - On `com.atproto.repo.uploadBlob` it sniffs the bytes and stores the blob under the type it recognises (`image/png`, `audio/wav`, `font/woff2`, ...). The type the upload declared is used only when nothing is recognised, which is the case for HTML, CSS, JavaScript and JSON. - When a record that references a newly uploaded blob is written, it compares the reference's `mimeType` with the stored type and refuses the whole write if they differ: "Referenced Mimetype does not match stored blob. Expected: image/png". So a publisher that follows the appendix and writes `application/octet-stream` everywhere succeeds for a tile made only of text, and fails at the `com.atproto.repo.putRecord` of the tile's record for any tile with an image, a sound or a font in it. appmosphe.re's publish page does exactly this and fails that way, for example with "Expected: audio/wav" for a tile carrying a WAV sample. `atile publish` does not fail, because it sniffs each file itself with the same file-type library and writes what it finds; that only works as long as its sniffing agrees with that of the implementation it publishes to. `uploadBlob` already answers with the complete blob reference, `mimeType` included. Using that reference as the resource's src is correct on every implementation: one that sniffs reports the type it stored, and one that does not reports the declared `application/octet-stream`, which is what the appendix recommended before. The content-type the tile is served with stays separate and unaffected.
Privacy-filtered exports
Redact sensitive trace content before saving locally or uploading to Hugging Face.

Hey, I'm imgproxy!
Hey, I'm imgproxy—a fast and secure server for processing images!
haileyok/cocoon
An ATProtocol PDS (Personal Data Server) written in Go with a SQLite block and blob store
Is this a thing? Something about private data on AT Proto, where a person could purchase content and have a copy of said content injected into their Private Data, so it could not be removed without their consent? I’m thinking “I’ve bought a copy of a book, and now the book blob lives in my PDS”
An ATProto-aware blob proxy! What a sensational idea. github.com/Blooym/porxie
GitHub - Blooym/porxie: [Mirror] A correct and efficient ATProto blob proxy for secure content delivery.
github.comLyna
I'm now running a public instance of Porxie for anyone to use for within their application for evaluation purposes or as a replacement for Bluesky's CDN in the event of downtime or otherwise. 🦋 Bluesky CDN Compatible: porxie-bsky.dollware.net 🔗 General Purpose: porxie.dollware.net
at this point for each day that goes i hate the atproto blob type more and more. like. not blobs themselves at all. but the damn data model representation of a blob reference. why does it have the mime type there ... arguably even the size. could technically even just be a plain CID link but cant
Been thinking about how we could support access-controlled blobs in ATProtocol. Right now, all blobs are public - anyone can fetch them with a CID. But what if we could gate them? #atproto #atdev 🧵
private_blobs.md
gist.github.comAn underappreciated #atproto feature is that whenever apps want to update your data: 1. they ask your PDS for permission, 2. your PDS asks you, 3. you can say no, + 4. your PDS enforces your wishes As of today, the @tranquil.farm PDS UX lets you give "partial no" answers to question 3. Bravo!
Trezy
This is awesome. I made a PR last week to add better support and display for permission-sets to the OAuth consent screen for @tranquil.farm. Now every time I log in to my Atmosphere account, I can actually see my fingerprints on Tranquil. 😍 #atproto
when proxying requests to feedgens the client will add an x-bsky-topics header to the request with the users selected topics of interest and it expects the PDS to forward that header on to the feedgen this also plays into a larger issue of what exactly service proxying entails being very ambiguous
Hey @dholms.at, do you have plans for blobs in spaces? We're chatting about it on @iame.li's stream. The proposal says blobs are uploaded to space host, right? That makes sense when the space host is a PDS because it has `com.atproto.repo.uploadBlob`, but not if the space host is something else.