Atualização
Atualizando um aplicativo existente
Seção intitulada “Atualizando um aplicativo existente”Oito 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.24 | 0.24 → 0.25 | ?count= numa listagem REST passa a ser o interruptor da contagem por trás de meta.total, então um filtro numa coluna chamada count vai dentro de ?where=; o list_collections do MCP remoto envia a listagem só no bloco de texto, sem structuredContent; e @rebasepro/app deixa de exportar a tabela de tradução em espanhol es. São recusados um OPTIONS simples para uma rota sem handler, nomes de tabela que colidem na inicialização, um upsert na coleção de usuários, page junto com offset, uma string vazia num campo obrigatório e uma senha escolhida por um administrador que não cumpre a política de senhas. As sessões duram por padrão 30 dias de inatividade, client.cron chama /api/admin/cron, leituras offline que não podem ser respondidas por completo falham com OFFLINE, e algumas exportações internas e props não usadas deixam de existir. |
| 0.23 | 0.23 → 0.24 | O SQL que db push e db generate geram sai de drizzle/ para o .rebase/sql/, que não é comitado, a opção --generate do rebase dev deixa de existir porque o dev sempre regenera os tipos do SDK, e uma edição de schema ao vivo não comita SQL. As permissões passam a ser escopos: as superfícies de administração pedem um escopo em vez do papel de administrador, as chaves de API têm escopos em vez de uma lista de permissões e de uma flag admin, e schema-admin deixa de ser administrador. Um --collections relativo é lido a partir de onde o comando é executado, um upsert em uma linha na lixeira e uma atualização que altera uma chave são recusados, o endpoint MCP remoto passa a receber os argumentos do SDK, e sockets de tempo real abertos, links de verificação de e-mail, signUp e os códigos de recuperação de MFA mudam a forma como tratam uma sessão. |
| 0.21 – 0.22 | 0.21 → 0.23 | Uma chave de API em um caminho aninhado precisa de read nos pais, variáveis numéricas e durações de sessão ilegíveis impedem a inicialização, um repositório de autenticação próprio precisa de unlinkUserIdentity, e transformar um convidado em conta exige o captcha de register. A 0.22 não declara nenhuma mudança incompatível, então esta é uma única etapa a partir da 0.21. |
| 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:
- O checklist de atualização abaixo — os greps e comandos que vale a pena executar depois, em um único bloco.
Upgrade checklist
Seção intitulada “Upgrade checklist”[ ] 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 resultrebase 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á.
Relacionados
Seção intitulada “Relacionados”- 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 CLI —
rebase doctore os comandos executados pelos checklists