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:
- Checks that
DATABASE_URL,BETTER_AUTH_URLandBETTER_AUTH_SECRETare set. - Syncs the database schema to match the new version.
- 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:
- Back up the database.
- Add
INKSPACE_ALLOW_SCHEMA_DATA_LOSS: "true"to theappservice environment. - Run
docker compose up -dand wait for the app to start. - Remove the variable again and run
docker compose up -donce more, so future upgrades stay protected.
Choosing a channel
latestfollows the stablemasterbranch and is right for most installs.nightlyfollows the development branch and gets features first. It’s supported on a best-effort basis.- Pin
X.Y.Zif 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.