this repo has no description
1# pds.js
2
3A zero-dependency AT Protocol Personal Data Server written in JavaScript, running on Cloudflare Workers with Durable Objects. Let's see how far we can get with just Web APIs.
4
5> ⚠️ **Work in progress** - This is experimental. You probably shouldn't use this yet.
6
7## Status
8
9- [x] Repo operations (createRecord, getRecord, putRecord, deleteRecord, applyWrites, listRecords)
10- [x] Sync endpoints (getRepo, getRecord, subscribeRepos, listRepos, getLatestCommit)
11- [x] Auth (createSession, getSession)
12- [x] Handle resolution (resolveHandle)
13- [x] AppView proxy (app.bsky.* forwarding with service auth)
14- [x] Relay notification (requestCrawl)
15- [x] Single or multi-user (each DID gets isolated storage, no self-service signup yet)
16- [ ] Blob storage (uploadBlob, getBlob, listBlobs)
17- [ ] refreshSession
18- [ ] deleteSession (logout)
19- [ ] updateHandle
20- [ ] importRepo
21- [ ] OAuth
22- [ ] Account management (createAccount, deleteAccount)
23- [ ] Email verification
24- [ ] Invite codes
25- [ ] Admin/moderation
26- [ ] Rate limiting
27
28## Prerequisites
29
30- Node.js 18+
31- [shfmt](https://github.com/mvdan/sh) (optional, for `npm run format`)
32 ```bash
33 brew install shfmt
34 ```
35
36## Quick Start
37
38```bash
39npm install
40
41# Create local dev config
42cp .env.example .dev.vars
43# Edit .dev.vars with your values
44
45# Run locally
46npm run dev
47```
48
49## Configuration
50
51For local development, create `.dev.vars`:
52
53```
54PDS_PASSWORD=your-password
55JWT_SECRET=your-secret
56RELAY_HOST=https://bsky.network # optional
57```
58
59For production, use Cloudflare secrets:
60
61```bash
62wrangler secret put PDS_PASSWORD
63wrangler secret put JWT_SECRET
64wrangler secret put RELAY_HOST # optional
65```
66
67## Testing
68
69```bash
70npm test # Unit tests
71npm run test:e2e # E2E tests (starts local server)
72```
73
74## Deploy
75
76```bash
77wrangler deploy
78```
79
80## Initialize
81
82After deployment, run the setup script to register with PLC and initialize:
83
84```bash
85npm run setup -- --pds https://your-pds.workers.dev
86```
87
88This generates keys, registers your DID with the PLC directory, initializes the PDS, and saves credentials. Handle defaults to the worker hostname.