pds.js

An AT Protocol Personal Data Server written in JavaScript. It hosts one account, and it runs on Node.js, Deno, or Cloudflare Workers.

Work in progress. This is experimental. You probably should not use it yet.

Why pds.js

The official atproto PDS is the reference server, and it is the right choice for most people. Pick pds.js when one of these matters to you.

pds.js federates with the live network. It signs commits with a did:plc identity, serves the firehose over subscribeRepos, and proxies app.bsky.* to an AppView with service auth.

Try it

git clone https://tangled.org/chadtmiller.com/pds.js
cd pds.js && pnpm install
just dev

The workspace uses the workspace:* protocol, so install with pnpm. just dev starts a local PLC, relay, and Caddy, runs the PDS, and registers a mock account with a few records. Open localhost:2471/account and sign in with the printed credentials.

Deploy

Dockerdeploy-docker.md
Node.jsdeploy-node.md
Cloudflare Workersdeploy-cloudflare.md
Denodeploy-deno.md

Every deployment needs TLS in front of it, a public hostname, and one run of npm run setup to register the DID with the PLC directory.

Documentation

ConfigurationEvery environment variable
Building an appSites, manifests, installs, and how to update one
ArchitecturePorts, adapters, packages, library usage
Permissioned dataProposal 0016, spaces, the run club example
EndpointsCoverage against the official atproto PDS
ScopesOAuth scopes against the reference implementation

Source at tangled.org/chadtmiller.com/pds.js. Packages are on npm under @pdsjs. MIT licensed.