Welcome!

dnproto is an atproto PDS that I'm writing in C#. I'm going to start posting occasional updates to the project.

The project sources are currently hosted at GitHub -> https://github.com/threddyrex/dnproto

I host my main account using the software. As I encounter bugs (or missing features) I implement them.

Below are some updates from this week. ā¬‡ļø

Update 1: fixed a bug with video

Videos posted to my account were disappearing from the Bluesky CDN after two days.

I discovered that the dnproto firehose events referenced blobs differently than the Bluesky reference PDS. Specifically, posts were using "ref -> $link {}" format in the dag-cbor data, but Bluesky PDS would collapse that to "ref: cid" when sending the firehose events.

I chose the following general approach: in Json it's ok to represent the blob ref using the expanded format, but when converting to dag-cbor bytes, need to collapse that down. And vice-versa when going from dag-cbor back to Json.

I added a commit that points out where the fix was, with comments.

Update 2: new administrative dashboard

I didn't expect to be building an admin dashboard this week, but it just kinda happened.

The admin dashboard has a few pages:

  • Sessions - shows all logged-in sessions, including legacy, oauth, and admin

  • Statistics - shows stats about connections to the PDS

  • Passkeys - registering new passkeys

The stats page is especially useful in identifying who is connecting to the PDS.

Update 3: passkeys

I implemented the first half of passkeys. In the admin dashboard you can register new passkeys for use later.

Soon I'll add the second half - using the passkeys during login flows.

Update 4 (last minute!): fixing blob uploads for Leaflet

I was about to publish this post but then realized that I didn't have a logo set on the Leaflet publication. When I tried uploading a logo - it failed. šŸ˜† I had to slightly change how uploadBlob works.