Upgrading 0.14 to 0.17
Upgrading 0.14 → 0.17
Section titled “Upgrading 0.14 → 0.17”0.15 and 0.16 add and fix things; neither breaks anything. Everything in this part landed in 0.17.0.
Under 0.x the minor is the breaking position — ^0.16.0 resolves
>=0.16.0 <0.17.0 — so none of it reaches a project until you deliberately move
to 0.17.
14. @rebasepro/admin is @rebasepro/cms
Section titled “14. @rebasepro/admin is @rebasepro/cms”And @rebasepro/admin-types is @rebasepro/cms-types. “Admin” named two things
at once: the whole panel, and the content-management half of it.
import { RebaseAdmin } from "@rebasepro/admin";import { defineCollection } from "@rebasepro/admin-types";import { RebaseCMS } from "@rebasepro/cms";import { defineCollection } from "@rebasepro/cms-types";Change the specifier and RebaseAdmin to RebaseCMS. There is no alias: a shim
would keep both meanings of “admin” alive, which is the thing being fixed. The
old packages stop at 0.16.0 on npm and receive nothing after it, so ^0.16.0
keeps resolving rather than breaking — it just stops moving.
Your collection files do not change. The admin: key is deliberately
untouched, along with AdminCollection*, ADMIN_COLLECTION_KEYS, the admin
auth role and /api/admin — those name something other than the CMS product.
The panel’s mode value moved with the package ("content" → "cms"). It is
persisted per browser and migrates on read, so an existing browser keeps working.
15. Resources are declared, not configured
Section titled “15. Resources are declared, not configured”dataSources and storageSources are gone from RebaseBackendConfig. Declare
them in rebase.json and the config package instead.
A bundle built before this will not boot on a current runtime. Rebuild it:
rebase buildrebase eject infra is gone too, along with rebase.infra.json and the
{"$env": "..."} indirection. Resources bind from the environment on the
<BASE>__<KEY> convention, which is what every deployment already used.
16. admin.titleProperty is rejected at boot
Section titled “16. admin.titleProperty is rejected at boot”Use admin.display.title — the same string works there.
admin: { titleProperty: "name" display: { title: "name" }}This can stop a project that starts today, which is the point: silence would mean the title quietly reverting to the derived one with nothing to explain why.
17. ctx.client in a cron is ctx.rebase
Section titled “17. ctx.client in a cron is ctx.rebase”And userId is no longer accepted as an identity spelling anywhere — it is
uid throughout.
export default defineCron({ schedule: "0 3 * * *", async handler({ client }) { await client.dataAsAdmin.collection("orders").find();export default defineCron({ schedule: "0 3 * * *", async handler({ rebase }) { await rebase.dataAsAdmin.collection("orders").find();} });18. CLI flag rename
Section titled “18. CLI flag rename”The --legacy flag on build and start is now --workspace. The mode is
supported, not retired, and the old name said otherwise.
rebase build --legacyrebase build --workspaceWorth grepping your scripts and CI for: arg runs permissively on these two
commands, so the old spelling is ignored rather than rejected — the build
succeeds and silently uses the other mode.
19. EmailService.send returns a result
Section titled “19. EmailService.send returns a result”Breaking only for code that implements EmailService: a send returning
Promise<void> no longer satisfies it. Callers are unaffected — they may ignore
the result — and the auth.email.sendEmail hook stays permissive, so an
existing async () => {} provider still works and simply reports nothing.
- The upgrade checklist — what to run afterwards
- Upgrading 0.13 → 0.14 — the hop before this one
- Changelog — the release notes these sections summarise