Upgrade from 0.x to 1.0
Every breaking change and upgrade step from 0.4.x to 1.0.0, one release at a time.
1.0.0-rc.1 is out on the rc tag and needs no code change or SQL from 0.7.0. 1.0.0 is planned for early December 2026 and is planned to need none either.
Read the sections in order from the version you run. Each one lists the breaking changes and the steps for that release. Follow the rollout order whenever a step needs SQL.
0.4.x to 0.5.0
0.5.0 is a breaking minor that moves the schema to version 6. Changelog.
Breaking changes:
check()refuses schema 5.- A pause resets the delivery's retry window (ADR 0015). Paused deliveries keep their full
retry.maxAgeMsafter resume, and a worker must run during the pause. ManagementRepository.create(scope, endpoint, { limit })takes an options object instead of a thirdlimitargument.StoredEndpointgainsencryptedHeaders.- Built-in management needs no code change.
Steps:
- Run
getPostgresUpgrade({ from: 5 })ormigrations/upgrades/006-all.sql. The step locks the deliveries table while it backfills, so prune first. Older schemas and separate namespaces are covered in migrations. - With Better Auth, run your Better Auth migration for the new optional
encryptedHeadersfield. - Restart producers, then workers, on 0.5.0.
- A custom
ManagementRepositoryimplementscreate(scope, endpoint, { limit })and enforces the limit. - A custom
ManagementRepositorystoresStoredEndpoint.encryptedHeadersas is.
0.5.0 to 0.6.0
0.6.0 needs no SQL and has no breaking changes. Changelog.
Changed behavior:
- Management reads decrypt stored headers. A rotated standalone storage key needs
decryptionKeysforget()andlist()too. - The worker sends headers that a custom
EndpointSourcereturns, and defers a delivery when a header uses a reserved name.
Steps:
- Restart producers, then workers, on 0.6.0. Better Auth needs no migration.
- If you rotated the standalone storage key, keep the old key in
decryptionKeyswherever management callsget()orlist(). - A custom
EndpointSourcethat returns headers must avoid the reserved names, because the worker defers a delivery that carries one.
0.6.0 to 0.7.0
0.7.0 adds no features and changes no default. It moves the schema to version 7 for one index that keeps prune() fast on large history (#153). Changelog.
Breaking changes:
check()refuses schema 6.
Steps:
- Run
getPostgresUpgrade({ from: 6 })ormigrations/upgrades/007-all.sql. Building the index blocks writes to the deliveries table while it reads the table once. On a large table, build it concurrently first. - Restart producers, then workers, on 0.7.0. Better Auth needs no migration.
0.7.0 to 1.0.0
1.0.0-rc.1 has no breaking changes, no code change, and no SQL. It keeps schema 7. Changelog.
Steps:
- Install
good-webhooks@rcand restart producers, then workers. Better Auth needs no migration.
Moving from 1.0.0-rc.1 to 1.0.0 is planned to need no migration.