A zero-dependency AT Protocol Personal Data Server written in JavaScript
atproto pds
JavaScript 93.3%
Shell 6.7%
53 1 4

Clone this repository

https://tangled.org/chadtmiller.com/pds.js
git@tangled.org:chadtmiller.com/pds.js

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

README.md

pds.js#

A zero-dependency AT Protocol Personal Data Server written in JavaScript, running on Cloudflare Workers with Durable Objects.

鈿狅笍 Work in progress - This is experimental. You probably shouldn't use this yet.

Quick Start#

npm install

# Create local dev config
cp .env.example .dev.vars
# Edit .dev.vars with your values

# Run locally
npm run dev

Configuration#

For local development, create .dev.vars:

PDS_PASSWORD=your-password
JWT_SECRET=your-secret
RELAY_HOST=https://bsky.network  # optional

For production, use Cloudflare secrets:

wrangler secret put PDS_PASSWORD
wrangler secret put JWT_SECRET
wrangler secret put RELAY_HOST  # optional

Testing#

npm test          # Unit tests
npm run test:e2e  # E2E tests (starts local server)

Deploy#

wrangler deploy

Initialize#

After deployment, run the setup script to register with PLC and initialize:

npm run setup -- --pds https://your-pds.workers.dev

This generates keys, registers your DID with the PLC directory, initializes the PDS, and saves credentials. Handle defaults to the worker hostname.