Upgrading from 1.0.x
The new image goes on top of the same volume: data, tokens and issued links are kept. But a few things change for those running 1.0.x.
What stays the same
- The volume — the same
/var/lib/s5wpath and the same layout inside. - PostgreSQL — the same major version 18, no
pg_upgradeneeded. - The database schema — unchanged, no new migrations.
WINTER_KEY— read from the same.runtime_secrets, temporary links keep working.- Tokens — the hash is computed the same way, issued tokens keep working.
- The client API and delivery — the
/v1,/o,/p,/tcontracts did not change.
What changes
The panel is on its own port
The old panel at :9090/admin is removed; the new one runs on 9091. Publish the port
(-p 9091:9091) or set up a separate domain for it on the proxy. The old address answers
404.
After the upgrade you need to sign in to the panel again: it lives at another address, and the old cookie does not reach it.
The admin API is local by default
Previously /admin/… on 9090 was reachable from outside. Now, with the panel on, it answers
404 from outside. If scripts call it from outside, bring back the old behaviour:
-e ADMIN_API=publicThe code is in /app
The application code in the container now lives in /app, not in /var/www/html. This only
matters to those who mount the source tree: ./:/var/www/html/ → ./:/app/. The ready-made
image is not affected.
Time in responses is RFC 3339
Every timestamp now has one format: 2026-11-08T17:10:44+00:00. There used to be three —
2026-11-08 17:10:44 +00:00 for freshly created objects and 2026-11-08 17:10:44+00
(sometimes with fractions of a second) for those read back from the database. If a client
parsed time with its own pattern for the format with a space, it needs fixing; standard date
parsing functions (new Date(), DateTimeImmutable, datetime.fromisoformat) understand the
new format by themselves.
Smaller changes
TRUSTED_PROXIESdefaults toprivate. Behind a proxy in a private network, the login lockout after failed attempts is now counted by the real client address, not by the proxy’s address.sha256together with image processing options. PreviouslyPOST /v1/uploadswith a hash found the source in the bucket and created the file without processing. Now such an upload goes the normal way and returns the processed file.