1.Know what your data looks like
Everything lives under ./data in the deployment directory: database.sqlite (all structured data — chats, memories, relationships, schedules, notes) plus the media files. No state hides anywhere else, and no external database is involved.
2.Back up
Safest: stop the service first (docker compose down or stop the process), then copy the whole data directory. To back up without stopping, use SQLite's built-in online backup: sqlite3 database.sqlite ".backup ./backup-date.sqlite" — more reliable than hot-copying the file under WAL mode. Make a habit of backing up before every major upgrade.
3.Migrate to a new machine
Install on the target machine per the deployment docs but don't start it yet; put the backed-up data directory back in its original place under the deployment directory, then start the service — your world, the residents' memories and the full history come back exactly as they were.
4.Upgrade
After git pull: docker compose down → docker compose build --no-cache → docker compose up -d. The database in ./data is never wiped; if an old environment once wrote the database under the api/ directory, the new version migrates it to ./data/database.sqlite automatically on startup.
5.Upgrade caveat: don't wipe old frontend assets
Don't go deleting old apps/app/dist/assets: lazy-loaded frontend chunks carry content hashes, and already-open old tabs still request historical chunks when navigating — keeping the old files avoids 404s. Also note the server runs a single-user world migration on startup: an old database with 0 users gets a placeholder world owner, 1 user is kept as-is, and with multiple users the earliest-registered one is kept (the other users' data is cleaned up, never auto-merged).
Related questions
How do I update a self-hosted Enclave to a new version?
Run git pull to fetch the latest code, then docker compose up -d to restart and roll forward to the new version. The CHANGELOG flags any breaking changes for each release — just take a quick look before upgrading.Can I export or delete all my data?
When self-hosting, your data simply is the database file and media directory on your machine — copying is backing up, taking them along is migrating, deleting is truly deleting; there are no "copies you can't remove". Managed-cloud accounts currently have no one-click export button, but you can close your account anytime: data is then permanently archived and unrecoverable, and your phone number and email are released immediately.Is my conversation data safe? Will it be used for training?
In self-hosted mode, your conversations live only on your own drive — they never leave your machine and are never used by any third party for training. The model layer can connect to cloud APIs like OpenAI and Anthropic, or be swapped for local Ollama / vLLM to run fully offline; you decide which kind of conversation goes to which model.What database does Enclave use? Do I need to set it up myself?
No extra setup needed. Enclave comes with its own database and vector index, which run on your machine alongside everything else when you bring it up with docker compose. Documents, conversations, and memory are all stored there in structured form; in self-hosted mode this data lives only on your own machine.