Pular para o conteúdo

Atualização

Cinco etapas, da mais recente para a mais antiga. Comece na etapa logo acima da versão em que você está e desça — ou, se você estiver vindo da 0.12, comece de baixo e suba.

Você está na versão Leia O que isso impacta
0.18 – 0.20 0.18 → 0.21 context.client.data deixa de compilar em um callback de coleção — faça consultas por meio de context.data — e selectedEntities dá lugar a uma seleção que pode representar linhas que ninguém carregou. As versões 0.19 e 0.20 não declaram breaking changes, portanto este é um único salto a partir da 0.18.
0.17 0.17 → 0.18 Onze breaking changes, a maioria sendo erros de compilação em vez de alterações silenciosas de comportamento. rebase.data desaparece em tempo de execução, os intervalos de peer dependencies se restringem a circunflexos (carets) e a versão mínima do Node passa a ser 22.22.0.
0.14 – 0.16 0.14 → 0.17 Os pacotes de admin foram renomeados, os recursos são declarados em vez de configurados e um bundle construído anteriormente não inicializará em um runtime atual. As versões 0.15 e 0.16 não quebram nada, portanto este é um único salto a partir da 0.14.
0.13 0.13 → 0.14 Todas as chaves trafegadas na rede (wire keys) usam camelCase, e o login anônimo passa a ser opt-in.
0.12 0.12 → 0.13 O maior salto e o único que altera quem pode ler seus dados. Ele remove o esquema auth, renomeia pacotes, altera o significado de id, remove o suporte a CJS, migra o painel de administração para o react-router 8 e corrige três maneiras pelas quais o acesso poderia ser concedido sem que você tivesse solicitado.

As seções de cada página estão na ordem em que você deve realizá-las, e cada uma indica o sintoma que, de outra forma, você investigaria pelo lado errado.

Depois, independentemente da etapa realizada:

[ ] 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 é o comando ideal para integrar ao CI: ele retorna um código de saída diferente de zero para políticas que ainda contenham a tautologia permissiva e para aquelas que foram substituídas por um push anterior. As leituras de pg_policies antes e depois ainda valem o minuto dedicado — elas mostram as próprias expressões, que é a única maneira de identificar uma política com falha aberta (fail-open) escrita em um formato que o detector não reconhece. Nem os pacotes nem o sistema de tipos irão avisar: a alteração reside no banco de dados, e db push é a única coisa que a aplica lá.

  • Changelog — as notas de lançamento que cada uma dessas seções resume
  • Compatibilidade — os seis contratos e quais deles uma versão pode quebrar
  • Comandos da CLIrebase doctor e os comandos executados pelos checklists