A zero-dependency AT Protocol Personal Data Server written in JavaScript
atproto
pds
Changelog#
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
[Unreleased]#
Changed#
- BREAKING: Normalized SQL schema to snake_case convention
- Tables:
blob→blobs,record_blob→record_blobs - Columns:
mimeType→mime_type,createdAt→created_at,blobCid→blob_cid,recordUri→record_uri - Existing Durable Objects require storage reset
- Tables:
[0.1.0] - 2025-01-07#
Initial experimental release.
Added#
- Repo operations: createRecord, getRecord, putRecord, deleteRecord, applyWrites, listRecords
- Sync endpoints: getRepo (CAR export), subscribeRepos (WebSocket firehose), getLatestCommit
- Authentication: createSession, getSession, refreshSession with JWT tokens
- Blob storage: uploadBlob, getBlob, listBlobs with R2 backend
- MIME type sniffing (JPEG, PNG, GIF, WebP, MP4, AVIF, HEIC)
- Automatic orphaned blob cleanup via DO alarms
- Blob-record association tracking
- Identity: Handle resolution, PLC directory registration
- Federation: Relay notification (requestCrawl), AppView proxy for app.bsky.* endpoints
- Infrastructure:
- Merkle Search Tree (MST) for repo structure
- DAG-CBOR encoding with CID generation
- P-256 ECDSA signing via Web Crypto
- TypeScript checking via JSDoc annotations
- Setup script for key generation and PLC registration