···11+# pds.js
22+33+A zero-dependency AT Protocol Personal Data Server written in JavaScript, running on Cloudflare Workers with Durable Objects.
44+55+> ⚠️ **Work in progress** - This is experimental. You probably shouldn't use this yet.
66+77+## Quick Start
88+99+```bash
1010+npm install
1111+1212+# Create local dev config
1313+cp .env.example .dev.vars
1414+# Edit .dev.vars with your values
1515+1616+# Run locally
1717+npm run dev
1818+```
1919+2020+## Configuration
2121+2222+For local development, create `.dev.vars`:
2323+2424+```
2525+PDS_PASSWORD=your-password
2626+JWT_SECRET=your-secret
2727+RELAY_HOST=https://bsky.network # optional
2828+```
2929+3030+For production, use Cloudflare secrets:
3131+3232+```bash
3333+wrangler secret put PDS_PASSWORD
3434+wrangler secret put JWT_SECRET
3535+wrangler secret put RELAY_HOST # optional
3636+```
3737+3838+## Testing
3939+4040+```bash
4141+npm test # Unit tests
4242+npm run test:e2e # E2E tests (starts local server)
4343+```
4444+4545+## Deploy
4646+4747+```bash
4848+wrangler deploy
4949+```
5050+5151+## Initialize
5252+5353+After deployment, run the setup script to register with PLC and initialize:
5454+5555+```bash
5656+npm run setup -- --pds https://your-pds.workers.dev
5757+```
5858+5959+This generates keys, registers your DID with the PLC directory, initializes the PDS, and saves credentials. Handle defaults to the worker hostname.