Node.js 20 desativado no Cloud Functions for Firebase: passe para o 24 ou o 22
Em 30 de outubro de 2026, o ambiente de execução do Node.js 20 no Cloud Functions foi desativado (decommission). Não é mais possível implantar nem atualizar funções no Node.js 20, então o firebase deploy falha com o erro abaixo. O que precisa mudar é uma linha do functions/package.json. Se você só tem funções de 2ª geração, passe para o Node.js 24; se tem funções de 1ª geração, para o Node.js 22.
Error: Runtime Node.js 20 was decommissioned on 2026-10-30. To deploy you must
first upgrade your runtime version.Em resumo
- Não é só a implantação. As funções já implantadas ainda rodam, mas não recebem mais patches de segurança e podem ser desabilitadas sem data definida. Datas e o que significam
- Mude uma linha e implante de novo. Defina
engines.nodecomo"24"ou"22". Se ofirebase.jsontiverruntime, esse valor tem prioridade. Como fazer - 24 para a 2ª geração, 22 para a 1ª geração. O Node.js 22 é o último ambiente de execução das funções de 1ª geração, então elas precisam migrar para a 2ª geração antes do fim do Node.js 22, em 31 de outubro de 2027. Funções de 1ª geração
- Se for atualizar os SDKs, confira duas coisas. O
firebase-functions7 removeu ofunctions.config(), e ofirebase-admin14 só funciona no Node.js 22 ou mais recente. Versões dos SDKs
Datas e o que significam
Este é o cronograma de suporte dos ambientes de execução do Google Cloud. Durante a descontinuação (deprecation), ainda é possível implantar; depois da desativação (decommission), não dá mais para criar nem atualizar funções nesse ambiente de execução.
| Ambiente de execução | Funções que podem usá-lo | Descontinuação | Desativação |
|---|---|---|---|
| Node.js 18 | 1ª geração, 2ª geração | 2025-04-30 | 2025-10-30 |
| Node.js 20 | 1ª geração, 2ª geração | 2026-04-30 | 2026-10-30 |
| Node.js 22 | 1ª geração, 2ª geração | 2027-04-30 | 2027-10-31 |
| Node.js 24 | Apenas 2ª geração | 2028-04-30 | 2028-10-31 |
Veja o que muda com a desativação.
| Durante a descontinuação | Depois da desativação | |
|---|---|---|
| Implantar ou atualizar | Sim | Não |
| Funções já implantadas | Rodam | Rodam, mas podem ser desabilitadas |
| Patches de segurança do Node.js e do SO | Sim | Nenhum |
A política não define uma data para a desabilitação. Mesmo uma função que roda bem hoje não pode ser reimplantada quando você precisar corrigir um bug, e não dá para saber quando ela vai parar. Também não há como contornar: mesmo desligando a verificação de ambiente de execução da CLI, o servidor bloqueia por conta própria (código da CLI).
Passar para o Node.js 24 ou 22
- Confira a geração e o ambiente de execução de cada função. Rode
firebase functions:list. Na coluna Version,v1é 1ª geração ev2é 2ª geração; a coluna Runtime mostra o ambiente de execução atual. - Escolha uma versão. Há um ambiente de execução por base de código (normalmente a pasta
functions), não um por função. Se houver ao menos uma função de 1ª geração, escolha 22; se todas forem de 2ª geração, escolha 24. O Node.js 24 pode ser usado até 31 de outubro de 2028, mas não oferece suporte à 1ª geração. A lista de versões da documentação do Firebase ainda não inclui o 24, mas o cronograma do Cloud já o traz para a 2ª geração, e a Firebase CLI oferece suporte a ele desde a versão 14.26.0. - Mude uma linha no
package.json. O valor é um único número de versão principal. Com um intervalo como>=22ou22.x, a CLI falha com o erroDetected node engine ... which is not a supported version.{ "engines": { "node": "24" } }Se o
firebase.jsontiverruntime, a CLI usa esse valor primeiro. Nesse caso, mude-o lá.{ "functions": { "source": "functions", "runtime": "nodejs24" } } - Use a mesma versão do Node.js na máquina local e na CI. O emulador roda as funções no Node.js instalado. Se as versões forem diferentes, ele só mostra o aviso
Your requested "node" version "24" doesn't match your global version "20"e as executa no 20 mesmo assim, então seus testes rodam em uma versão diferente da de produção. - Implante. Rode
firebase deploy --only functionse confira se a coluna Runtime defirebase functions:listmudou paranodejs24(ounodejs22).
Versões dos SDKs
Se for atualizar os SDKs junto com o Node.js, confira o seguinte.
| Pacote | O que conferir |
|---|---|
firebase-tools (CLI) | Implanta nodejs22 a partir da 13.11.0 e nodejs24 a partir da 14.26.0. |
firebase-functions | Abaixo da 6.2.0, código ESM com await de nível superior quebra no Node.js 22.12 ou mais recente. A 7.0.0 removeu o functions.config(), e chamá-lo gera um erro em tempo de execução. |
firebase-admin | A 14 só roda no Node.js 22 ou mais recente e precisa ser usada com o firebase-functions 7.3.0 ou mais recente (dependência peer). A 13 roda no Node.js 18 ou mais recente. |
Se você ainda usa o functions.config(), mantenha o firebase-functions na 6.x e mude só o Node.js. Implantar com functions.config() também vai falhar depois de março de 2027, então antes disso migre para variáveis de ambiente ou o Secret Manager.
Funções de 1ª geração
O último ambiente de execução que as funções de 1ª geração podem usar é o Node.js 22, que será desativado em 31 de outubro de 2027. Antes disso, elas precisam migrar para a 2ª geração. A Firebase CLI 15.35.0 mostra nos avisos 2028-10-31 como data de desativação do Node.js 22, mas a data que vale é a do cronograma do Google Cloud, 2027-10-31 (código da CLI). Como não é possível trocar uma função diretamente mantendo o mesmo nome, o Firebase recomenda implantar a função de 2ª geração com um nome novo, migrar o tráfego e depois excluir a de 1ª geração (guia de upgrade). Estes são os pontos que podem complicar a migração.
- Os URLs mudam. Nas funções HTTP, chamáveis e de fila de tarefas, um nome novo é um URL novo. Aponte seus apps e webhooks para o novo URL e depois exclua a função antiga com
firebase functions:delete. - Os eventos são processados duas vezes. Enquanto as duas funções existirem, gatilhos de eventos como os do Firestore e do Storage executam as duas para o mesmo evento. Faça com que duas execuções deem o mesmo resultado.
- Algumas coisas não existem. A 2ª geração não tem
functions.config()nem gatilhos de eventos do Analytics, e os gatilhos do Authentication para criação e exclusão de usuários (onUserCreated,onUserDeleted) ainda estão em fase de prévia. - Os valores padrão são outros. Por padrão, uma instância atende até 80 solicitações ao mesmo tempo, e a conta de serviço padrão passa a ser a conta de serviço padrão do Compute Engine. Se você guarda em variáveis globais valores que mudam a cada solicitação ou concedeu permissões do IAM à conta de serviço padrão do App Engine, precisa corrigir isso.
Extensões
As extensões instaladas também rodam no Cloud Functions, e o ambiente de execução delas é definido pela versão da extensão. O Firebase recomenda atualizar as extensões para a versão mais recente.
firebase ext:update <instance-id>
firebase deploy --only extensionsO serviço Extensões do Firebase será desativado em 31 de março de 2027. As extensões instaladas continuam rodando depois disso, mas os recursos de gerenciamento, como as atualizações, deixam de estar disponíveis. A maioria é feita com funções de 1ª geração, então elas podem parar ou ser desabilitadas quando o ambiente de execução delas for desativado. Se você vai continuar usando o que uma extensão faz, planeje também passar isso para uma função sua.
Fontes
- Cronograma de suporte dos ambientes de execução, notas da versão do Cloud Functions: datas, o que significam a descontinuação e a desativação, suporte ao Node.js 22 na 1ª geração e ao Node.js 24 na 2ª geração
- Gerenciar funções (definir a versão do Node.js), perguntas frequentes do Cloud Functions:
engineseruntime, ambiente de execução das extensões - Código da Firebase CLI 15.35.0: verificação do ambiente de execução e mensagem de erro, datas dos ambientes de execução, leitura de
engines, escolha do Node.js pelo emulador, verificações no servidor - Notas da versão do firebase-tools, do firebase-functions e do firebase-admin 14.0.0, configuração do ambiente
- Fazer upgrade da 1ª para a 2ª geração, comparação entre gerações, gatilhos do Authentication, perguntas frequentes sobre as extensões, referência do extension.yaml
