Database

CryptPad takes an unusual approach to storing documents on the server. User data is simply stored on the file system rather than a database.

Key points

  • Each CryptPad document has information stored on the server in a location determined by a channel id

  • The content of each document is encrypted using the encryption key, so that the server cannot read it

  • Clients send the channel id to the server to:

    • get the latest information about a document

    • subscribe to ongoing updates while they are connected

    • modify the contents of the document

  • each channel is stored within its own file on the server

  • each change to the document is encoded on a single line of that file

Understanding document URLs

Everything that a client needs in order to interact with a CryptPad document is stored in its URL.

Let's look at an example:

https://cryptpad.fr/code/#/2/code/edit/plpAeHfQ4YO49fczV5erSCgd/

Browsers do not send the information after the # symbol to the server when loading a page, so it is safe to encode private information there.

The information before # tells the browser which server to connect to, and what resources to download.

This part of the URL https://cryptpad.fr/code/ tells the server to load the code editor.

The remaining information #/2/code/edit/plpAeHfQ4YO49fczV5erSCgd/ is handled with Javascript by the browser.

There are several pieces of information there, separated by slashes.

URL encoding version: 2
editor mode: edit
Encryption seed: plpAeHfQ4YO49fczV5erSCgd

Finding a document

It is possible to run code provided by the CryptPad server in your browser console. To extract the channel id of a document you have open:

  • File > Properties > Document identifier

  • Alternatively you can run this snippet:

require([
    "/common/common-hash.js"
], function (Hash) {
    var url = window.location.href;
    var password = "";
    var parsed = Hash.parsePadUrl(url);
    var secret = Hash.getSecrets(parsed.type, parsed.hash, password);
    console.log(secret.channel);
});

Either method will give a channel id that looks similar to bb1edc4cb7648605284db30dfcd2eebf.

The corresponding file would be stored on the server, in your CryptPad instance's directory, at cryptpad/datastore/bb/bb1edc4cb7648605284db30dfcd2eebf.ndjson.

For more information on administering the database including backups, migration, and more, please see Database administration in the administrator guide.