Where Does Self-Hosted CryptPad Store Data?
CryptPad reads config/config.js and persists pads across blob, block, data, and datastore mounts. Back up the whole compose dir.
Last updated
CryptPad splits config from content. The config/config.js file (copied from the example) holds domains, ports, admin keys, and storage toggles. Document contents shard across data mounts: blob, block, data, and datastore (files), plus customize for branding and OnlyOffice dirs when enabled. Every mount in the compose file matters.
Backups mean the whole project folder zipped with the stack down. Single-mount copies look complete and restore broken because shards reference each other. Permissions bite too: container processes run as UID 4001, so host folders need that ownership. Check the logs for the install URL after first boot; admin setup completes there, not in the file.
Where CryptPad stores this, by platform
config/config.js (compose dir)
Domains, admin keys, storage toggles; CPAD_CONF env points at it. Copy from the example and set domains before first boot. Mount read-write; UID 4001 must own host paths.
./data/* (Docker volumes)
Pads sharded as blob/block/data/datastore plus customize branding. Zip the compose dir whole with the stack down. Partial restores corrupt documents; permissions must allow UID 4001.
Frequently asked questions
how do i back up cryptpad
Stop the stack and copy the entire compose directory (config.js, customize, data/*, onlyoffice dirs). Pads shard across blob/block/data/datastore, so partial copies corrupt documents. Zip the folder as one unit.
how do i create the cryptpad config file
Copy config/config.example.js to config/config.js and set domains first; everything else has defaults. Docker passes CPAD_MAIN_DOMAIN, CPAD_SANDBOX_DOMAIN, and CPAD_CONF as env. Run as UID 4001-writable paths or the container cannot write its volumes.
Notice an outdated path? Let us know.