Where Does a Bluesky PDS Store Data?
A Bluesky PDS keeps repos in /pds/actors, blobs in /pds/blocks, and account state in SQLite files beside them.
Last updated
A Bluesky personal data server is one directory: /pds by default, overridable with the data directory variable but mapped to /pds inside the container regardless. Per user repo databases live in actors, media blobs in blocks, and PDS wide state in account, sequencer, and did cache SQLite files.
Env keys, JWT secret, and PLC rotation key arrive through pds.env, not files. Backups must pair the tree with that env file, since keys outside the data dir decrypt nothing without their mates. Litestream plus WAL checkpointing is the documented route to safe SQLite copies.
Where Bluesky stores this, by platform
/pds
actors per user DBs, blocks media, plus account, sequencer, and did cache sqlite files with WAL sidecars. Back up whole with pds.env.
Frequently asked questions
How do I back up a Bluesky PDS?
Back up the whole /pds tree: actors, blocks, and the sqlite files together. Per user repos plus account state restore as a set; half a tree orphans accounts.
How do I move a PDS to another server?
Copy the data dir to the new host and keep /pds as the container target. Reportedly the tree moves cleanly as long as paths inside stay put.
Signup confirmation mail never arrives. Where is the code?
Query the email_token table in account.sqlite for the code. SMTP misconfig is the usual reason the mail never arrives in the first place.
Notice an outdated path? Let us know.