nooks
GitHubInstall
Operations

Back up

The export is the database, so there is nothing to restore from — only a file to copy back.

nooks does not invent a backup format. On SQLite the export is the database, copied while the instance keeps running.

That matters more than it sounds. A hand-written exporter is a second description of the schema, and the way it fails is quiet: one table gets added, nobody adds it to the exporter, and the backups are incomplete for months before anybody finds out.

Taking one

Settings → About → Export everything, as an admin. What downloads is a real SQLite file, named for the day you took it.

An access token cannot do this, even one cut by an admin. A token is that admin's access deliberately narrowed — to some lists, to reading only — and a file holding every list and every password hash is the one thing no narrowing survives. The export is an admin signed in through a browser, and nothing else.

For a backup on a timer, take it on the machine itself. This is the same copy the export makes, and it is safe to run while the instance is using the database:

sqlite3 /var/lib/nooks/nooks.db "VACUUM INTO '/backups/nooks-$(date +%F).db'"

Copying nooks.db with cp while the instance is running is not the same thing and can give you a file that will not open.

Putting one back

Stop the instance. Put the file in the directory --data points at — ./data unless you changed it — named nooks.db, replacing what is there. Start it again.

The name matters more than it looks. The file you downloaded is called something like nooks-2026-03-14.db, and an instance that does not find nooks.db does not complain: it creates an empty one and shows you first-run setup, with your backup sitting beside it untouched.

There is no importer because nothing was ever converted.

On postgres

Use pg_dump. nooks does not wrap it — it is better than anything we would write, and it is already on the machine running your database.

pg_dump --format=custom --file=nooks-backup.dump "$NOOKS_DSN"

On this page