Self-hosting

Upgrading

Pull new images safely and understand the automatic schema sync.

Upgrade in two commands

From the folder that holds your Compose file:

docker compose pull
docker compose up -d

Your database volume and uploads folder are reused as-is. Check the result with:

docker compose logs -f app

Back up first. Take a database and uploads backup before every upgrade — see Backups & restore. It takes a minute and makes any upgrade reversible.

What happens on startup

Every time the app container starts it:

  1. Checks that DATABASE_URL, BETTER_AUTH_URL and BETTER_AUTH_SECRET are set.
  2. Syncs the database schema to match the new version.
  3. Starts the server only if the sync succeeded.

The sync is fail-safe. The container refuses to start when:

  • the sync reports an error, or
  • the new schema would drop tables or columns that hold data.

In both cases you’ll see [startup] Database schema sync failed. Refusing to start app. and your data is left untouched.

Allowing a destructive schema change

Occasionally a release removes a table or column on purpose. The log will name exactly what would be deleted:

Schema sync would delete data in: <table or column>. Back up the database,
then set INKSPACE_ALLOW_SCHEMA_DATA_LOSS=true to proceed.

To accept it:

  1. Back up the database.
  2. Add INKSPACE_ALLOW_SCHEMA_DATA_LOSS: "true" to the app service environment.
  3. Run docker compose up -d and wait for the app to start.
  4. Remove the variable again and run docker compose up -d once more, so future upgrades stay protected.

Choosing a channel

  • latest follows the stable master branch and is right for most installs.
  • nightly follows the development branch and gets features first. It’s supported on a best-effort basis.
  • Pin X.Y.Z if you want to upgrade only when you decide to.

Release notes for every version are in the Changelog and inside the app under Settings → Inkspace → Updates.