Zum Inhalt springen

Upgrade

Acht Schritte, die neuesten zuerst. Beginnen Sie mit der Version, die direkt über Ihrer aktuellen liegt, und arbeiten Sie sich nach unten vor – oder fangen Sie, wenn Sie von Version 0.12 kommen, ganz unten an und arbeiten Sie sich nach oben vor.

Sie sind auf Lesen Was sich für Sie ändert
0.24 0.24 → 0.25 ?count= auf einer REST-Liste wird zum Schalter für die Zählung hinter meta.total, daher gehört ein Filter auf eine Spalte namens count in ?where=; list_collections des Remote-MCP liefert seine Auflistung nur noch im Textblock, ohne structuredContent; und @rebasepro/app exportiert die spanische Übersetzungstabelle es nicht mehr. Abgelehnt werden ein einfaches OPTIONS auf eine Route ohne Handler, kollidierende Tabellennamen beim Start, ein Upsert auf die Users-Collection, page zusammen mit offset, ein leerer String in einem Pflichtfeld und ein vom Administrator gewähltes Passwort, das die Passwortrichtlinie nicht erfüllt. Sitzungen halten standardmäßig 30 Tage Inaktivität, client.cron ruft /api/admin/cron auf, Offline-Lesezugriffe, die nicht vollständig beantwortet werden können, schlagen mit OFFLINE fehl, und einige interne Exporte und ungenutzte Props entfallen.
0.23 0.23 → 0.24 Das SQL, das db push und db generate erzeugen, zieht aus drizzle/ in das nicht committete .rebase/sql/ um, das Flag --generate von rebase dev entfällt, weil dev die SDK-Typen immer neu generiert, und eine Änderung per Live-Schema-Bearbeitung committet kein SQL. Berechtigungen werden zu Scopes: Admin-Oberflächen verlangen einen Scope statt der Admin-Rolle, API-Schlüssel halten Scopes statt einer Berechtigungsliste und eines admin-Flags, und schema-admin ist kein Administrator mehr. Ein relatives --collections wird von dort gelesen, wo der Befehl ausgeführt wird, ein Upsert in eine Zeile im Papierkorb und ein Update, das einen Schlüssel ändert, werden abgelehnt, der Remote-MCP-Endpunkt übernimmt die Argumente des SDK, und offene Realtime-Sockets, Verifizierungslinks, signUp und MFA-Wiederherstellungscodes ändern, wie sie mit einer Sitzung umgehen.
0.21 – 0.22 0.21 → 0.23 Ein API-Schlüssel auf einem verschachtelten Pfad braucht read auf den Parents, unlesbare numerische Variablen und Session-Lebensdauern verhindern den Start, ein eigenes Auth-Repository braucht unlinkUserIdentity, und Gast-Upgrades verlangen die register-Captcha. 0.22 deklariert keinen Breaking Change, daher ist dies ein Schritt ab 0.21.
0.18 – 0.20 0.18 → 0.21 context.client.data kompiliert in einem Collection-Callback nicht mehr – führen Sie Abfragen über context.data aus –, und selectedEntities weicht einer Auswahl, die auch für Zeilen stehen kann, die niemand geladen hat. 0.19 und 0.20 deklarieren keine Breaking Changes, daher ist dies ein einziger Schritt ab 0.18.
0.17 0.17 → 0.18 Elf Breaking Changes, die meisten davon eher Kompilierfehler als stillschweigende Verhaltensänderungen. rebase.data fällt zur Laufzeit weg, Peer-Ranges verengen sich auf Carets und die minimale Node-Version steigt auf 22.22.0.
0.14 – 0.16 0.14 → 0.17 Die Admin-Pakete werden umbenannt, Ressourcen werden deklariert statt konfiguriert, und ein zuvor erstelltes Bundle startet auf einer aktuellen Laufzeitumgebung nicht mehr. 0.15 und 0.16 brechen nichts, daher ist dies ein einziger Schritt ab 0.14.
0.13 0.13 → 0.14 Jeder Wire-Key verwendet camelCase und die anonyme Anmeldung ist Opt-in.
0.12 0.12 → 0.13 Der größte Schritt und der einzige, der ändert, wer Ihre Daten lesen darf. Er entfernt das auth-Schema, benennt Pakete um, ändert die Bedeutung von id, streicht CJS, hebt das Admin-Panel auf react-router 8 an und behebt drei Wege, über die unabsichtlich Zugriff erteilt werden konnte.

Die Abschnitte jeder Seite folgen der Reihenfolge, in der Sie die Anpassungen vornehmen müssen, und jeder Abschnitt benennt das Symptom, das Sie andernfalls am falschen Ende debuggen würden.

Danach, ganz gleich, welchen Schritt Sie durchgeführt haben:

  • Die Upgrade-Checkliste unten – die Greps und Befehle, die sich im Anschluss lohnen, zusammengefasst in einem Block.
[ ] grep for authenticated() and (auth|rebase).uid() IS NOT NULL in config/collections/
[ ] decide the intent of each rule; rewrite the ones that meant "public"
[ ] replace not(authenticated()) with serverContext()
[ ] if realtime.requireAuth was true with an AuthAdapter, treat the socket as
having been open — verify RLS on every subscribable collection (section 2)
[ ] SELECT ... FROM pg_policies — record the qual of every policy BEFORE
[ ] update package names and imports
[ ] grep for rebase.data — it is now rebase.dataAsAdmin (section 8)
[ ] grep for the other ten removed deprecated exports (section 8)
[ ] drop react-router-dom; import RouterProvider from "react-router/dom"
[ ] check node >= 22.22.0 and react >= 19.2.7 (react-router 8 requires both)
[ ] move defaultSecurityRules into config/collections/index.ts
[ ] grep for .userId
[ ] grep for row.id on tables not keyed on id
[ ] run db push
[ ] run rebase doctor --policies — expect no Insecure or Orphaned entries
[ ] SELECT ... FROM pg_policies again — confirm every intended change landed
[ ] exercise the app signed OUT, in a private window — watch the websocket too
--- 0.13 → 0.14 (part 2) ---
[ ] re-run rebase generate-sdk, then build — the compiler finds row.author_id
[ ] grep for snake_case where/orderBy keys; a stale one is a 400, not a warning
[ ] grep for raw fetch consumers reading row.<something>_id — these read
undefined and raise nothing
[ ] if the project was introspected, re-run rebase schema introspect
[ ] decide anonymous sign-in: set auth.allowAnonymous: true, or confirm you
never used it (grep for signInAnonymously)
[ ] drop @rebasepro/client-postgres from package.json
--- 0.14 → 0.17 (part 3) ---
[ ] rename @rebasepro/admin → @rebasepro/cms and admin-types → cms-types,
and RebaseAdmin → RebaseCMS
[ ] move dataSources / storageSources out of the backend config into
rebase.json and config/, then `rebase build` — an old bundle will not boot
[ ] grep collections for admin.titleProperty; it is refused at boot now
[ ] grep crons for ctx.client and for `userId` as an identity key
[ ] rename --legacy to --workspace wherever build/start is scripted
[ ] if you implement EmailService yourself, `send` must return a result

rebase doctor --policies ist der Befehl, der in die CI eingebunden werden sollte: Er schlägt mit einem Exit-Code ungleich null fehl, wenn eine Policy noch immer die permissive Tautologie enthält oder von einem früheren Push abgelöst wurde. Der kurze Zeitaufwand für das Auslesen von pg_policies davor und danach lohnt sich dennoch – Sie sehen die Ausdrücke direkt im Wortlaut. Dies ist die einzige Möglichkeit, eine Fail-Open-Policy zu erkennen, die in einer Schreibweise verfasst ist, die der Detektor nicht erfasst. Weder die Pakete noch das Typsystem weisen Sie darauf hin: Die Änderung existiert in der Datenbank, und db push ist der einzige Vorgang, der sie dorthin überträgt.

  • Changelog – die Release-Notes, die jeder dieser Abschnitte zusammenfasst
  • Kompatibilität – die sechs Verträge und welche davon eine Version brechen kann
  • CLI-Befehle – rebase doctor und die Befehle, die von den Checklisten ausgeführt werden