What happens when you want out

The first honest question about a self-hosted tool from a small vendor is what happens when the vendor stops. So here is the exit, and it is one command.

Download the bundle Deployment guide

Every self-hosted tool asks you to bet that it will still exist in three years. Most of them answer that by saying nothing. This page is the answer.

The command#

npm run export:readable -- ./data --out ./readable-export

./data is the volume your compose file mounts — the SQLite database and the blobs. The bundle also ships export-readable.sh if you would rather not have Node on the host.

What comes out#

An ordinary Markdown vault that opens in plain Obsidian, with no plugin installed:

Nothing is silently dropped. Deleted items and version history go to _history/, and any field the exporter does not recognise is written under its own heading rather than discarded — with _export-report.md listing what happened.

There are flags for the obvious wishes: --no-history for a clean copy, --content-only for just tasks and documents, --links relative if you would rather not have [[wikilinks]], and --lang pl for Polish headings.

Why this is not a feature#

It is a consequence of how the thing is built, which is why it can be promised.

The server is content-agnostic. It stores files as bytes plus metadata and never parses what is inside them. There is no proprietary representation to convert from, because your notes were already Markdown on disk the whole time. The exporter's job is to lay out a directory tree, not to rescue data from a format.

Which also means the export is not the only way out. The files under the workspace root in your vault are already plain Markdown. You could delete the server, keep the folder and carry on with a USB stick.

The one limit, stated plainly#

The export is one-way. It produces a vault for reading, not an archive to re-import — Not re-importable is what the code itself says. If you want a round-trip backup, take the data directory: that is the whole state, and restoring it is a copy.

So: keep backup.sh running for restores, and use the readable export for leaving, for archiving, or for handing a vault to somebody who has never heard of any of this.