Sim: Firenook é um substituto direto e open source do Firebase Emulator oficial, escrito em Rust e sem Java, que lê seu firebase.json e usa as mesmas portas. Instalamos a versão 0.2.1 e a enfrentamos contra o Firebase Local Emulator Suite do Google na mesma máquina. A grande diferença não está nas escritas, mas nas consultas e na memória quando seus dados crescem.
yoDEV Testado · 6 de novembro de 2026
Testamos o Firenook 0.2.1 contra firebase-tools 15.35.0 (Firestore Emulator v1.22.0, OpenJDK 21) com Node 22.23.4 em Linux x64, 2 vCPU e 7 GiB de RAM. Os resultados que reportamos como nossos saem desse teste.
O que é Firenook e o que substitui do Firebase Emulator?
Firenook emula localmente Firestore, Authentication, Cloud Storage, Cloud Functions, Pub/Sub, Cloud Tasks, Eventarc e Extensions, nas mesmas portas padrão que a suite oficial (Firestore 8080, Auth 9099, Storage 9199, Functions 5001). Mantém o formato oficial de importação e exportação, então você pode voltar ao emulador do Google quando quiser. Os serviços rodam como código nativo dentro de um único pacote npm, e não baixa nada mais nem ao instalar nem ao iniciar.
É um projeto independente com licença Apache-2.0: não é feito pelo Google e não é afiliado nem apoiado pelo Google. Antes era publicado como Fireside (@fireside-dev/cli); desde a 0.2.0-next.1, todas as versões saem como firenook. Segundo npm, a versão 0.2.0, que o README apresenta como a primeira versão estável, foi publicada em 23 de outubro de 2026. Nem o site nem os metadados do npm nomeiam uma pessoa responsável, apenas a organização firenook-dev.
Quanto mais rápido que o Firebase Emulator oficial, segundo o projeto?
Segundo seu próprio benchmark, cerca de 40 vezes em escritas e com 10 vezes menos memória. O projeto reproduziu duas horas de tráfego de uma aplicação em produção (211.205 documentos do Firestore e 6,7 GB em Storage) contra cada emulador por turnos, no mesmo servidor com um Ryzen 5 3600 e 64 GiB de RAM:
| Métrica (mediana) | Oficial | Firenook |
|---|---|---|
| Memória máxima | 22,6 GiB | 2,11 GiB |
| Escrita | 208 ms | 5,1 ms |
| Atualização de listener | 209 ms | 11 ms |
| Reinicialização conservando dados | 30,8 s | 0,59 s |
| CPU em duas horas | 1.586 s | 616 s |
São números autorrelatados. As amostras em bruto estão publicadas no GitHub, mas a aplicação e seus dados são privados, então ninguém pode repetir exatamente esse teste.
Há um detalhe dessa página que importa mais que a manchete: quando começaram as duas horas, a stack oficial já tinha 7,7 GB em swap, e paginnou 3,1 GB a mais durante o teste. O próprio projeto reconhece que em uma máquina com mais memória o emulador oficial usaria menos swap. Parte dessa diferença de 40 vezes em escritas se explica porque o emulador oficial estava trabalhando sob pressão de memória, não só porque seu motor seja mais lento.
O resultado mais convincente do projeto não depende do swap. Com 2,7 milhões de documentos, o emulador oficial ficou sem memória com a configuração padrão de Java. Com um heap de 24 GiB sim começou, mas levou entre 8 e 27 segundos para responder consultas do tipo orderBy … limit 20. Firenook respondeu as mesmas consultas em 3 a 6 ms.
O que medimos ao compará-lo com o Firestore Emulator?
Executamos o mesmo script do Node com firebase-admin contra cada emulador, na mesma máquina: escritas sequenciais de documentos e depois 50 execuções de uma consulta (array-contains + orderBy descendente + limit 20).
| Medida | Oficial | Firenook |
|---|---|---|
| Inicialização a frio (Firestore + Auth) | 8,4 s | 0,53 s |
| Escrita, mediana, 20.000 docs | 0,89 ms | 0,94 ms |
| Escrita, p99, 20.000 docs | 4,67 ms | 3,43 ms |
| Consulta, mediana, ~2.000 docs | 18–20 ms | 3,8 ms |
| Consulta, mediana, ~20.000 docs | 168,7 ms | 3,4 ms |
| Memória do emulador, ~4.000 docs | ~500 MiB (Java + Node) | 41 MiB |
| Memória do emulador, ~20.000 docs | 658 MiB | 111 MiB |
| Reinicialização com 20.000 docs conservados | — | 0,54 s, os 20.000 intactos |
Três conclusões:
- Com poucos dados e sem pressão de memória, as escritas empatam. Não reproduzimos a cifra de 40 vezes em escritas. Espere por isso apenas se seu emulador oficial estiver usando swap.
- Onde se nota é nas consultas. Ao passar de 2.000 para 20.000 documentos, o emulador oficial ficou cerca de dez vezes mais lento, enquanto Firenook se manteve estável. Com 20.000 documentos, a diferença foi de cerca de 50 vezes.
- A memória é sempre entre cinco e dez vezes menor, e Firenook inicia em meio segundo.
Como se instala e como substitui firebase emulators:start?
Você precisa de Node 22, 24 ou 26 em macOS, em Linux x64 ou arm64 com glibc 2.28 ou superior, ou em Windows x64. Instale como dependência de desenvolvimento e mantenha firebase-tools para fazer deploy, porque Firenook não tem comandos de deploy nem de login:
npm install --save-dev firenook
Primeiro revise seu projeto atual. A simulação não escreve nada:
npx firenook init --adopt --dry-run
Em nosso teste, o plano omitiu o emulador do Realtime Database com um aviso e ofereceu criar um .mcp.json para Claude Code. Depois mude os comandos nos scripts de seu package.json. As flags usuais (--only, --project, --import, --export-on-exit, --inspect-functions) funcionam igual:
"scripts": {
"emulators": "firenook emulators:start --import ./data --export-on-exit",
"test:integration": "firenook emulators:exec \"npm test\""
}
Em nosso teste, init --adopt não rescreveu os scripts existentes, então essa mudança você faz. Adicione também .firenook/ a seu .gitignore: aí Firenook guarda os arquivos de trabalho de cada execução, e nunca os apaga automaticamente.
Como conservar os dados entre execuções do emulador?
Substituia --export-on-exit por --keep-data e mantenha --import ./data no comando:
npx firenook emulators:start --import ./data --keep-data
Em nosso teste, reiniciar com 20.000 documentos levou 0,54 segundos, e todos os documentos continuavam lá.
Cuidado com um detalhe da 0.2.1, que o projeto lista entre seus problemas conhecidos: --keep-data exige ter configurados Firestore, Auth e Storage. Com apenas Firestore e Auth, nossa inicialização falhou com --resume-state requires the firestore, auth and storage services. Resolvemos adicionando o emulador de Storage ao firebase.json.
O que Firenook ainda não emula?
Na versão 0.2.1, em 6 de novembro de 2026:
- Não são emulados em absoluto: Realtime Database, Hosting, App Hosting, Data Connect e as extensões universais. Um
firebase.jsonque os configure inicia igual, com um aviso. - Cloud Functions: não há funções em Python nem em Dart, nem Secret Manager.
functions:shellse substitui porfirenook functions:invoke. - Auth: não há multifator TOTP, nem aplicação de reCAPTCHA, nem envio real de emails ou SMS.
- Pub/Sub e Cloud Tasks: os dados não sobrevivem a uma reinicialização.
- Plataformas: não há suporte para Alpine/musl (o que descarta muitas imagens base de Docker), Windows em Arm nem Windows de 32 bits.
- Console: a Emulator UI do Google se substitui pela console própria do Firenook na mesma porta (
http://127.0.0.1:4000/console).
Se seu projeto depende de Realtime Database ou de funções em Python, hoje Firenook não pode substituir a suite oficial.
Pode ser usado com Claude Code, Cursor ou VS Code?
Sim. npx firenook mcp add configura um servidor MCP para Claude Code, Cursor ou VS Code, e init --adopt se oferece a escrever o .mcp.json de Claude Code por você. Assim um agente tem acesso direto aos emuladores locais enquanto escreve e testa código do Firebase.
Vale a pena mudar de emulador do Firebase?
Sim, se seu Firestore Emulator consome gigabytes de RAM, leva segundos para responder consultas sobre um conjunto de dados realista ou te força a instalar Java em cada runner de CI: nesse caso, Firenook merece uma tarde de teste. A mudança é reversível: npx firenook emulators:export ./export exporta no formato oficial, e a CLI oficial inicia a partir dessa exportação. Mas nunca execute os dois nas mesmas portas nem no mesmo diretório de trabalho.
Se seu gargalo é a latência de escrita com poucos dados, você não notará muito. E tenha em mente que é um projeto jovem, na 0.2.x e sem um responsável com nome: faça commit de seu lockfile e atualize de forma deliberada, como recomenda sua própria documentação.
E você? Quanto de memória o Firebase Emulator consome hoje em sua máquina ou em seu CI?
- Com o Firebase Local Emulator Suite oficial
- Já testei Firenook
- Não emulo: testo contra um projeto real
- Prefiro outra opção (conte qual)
Comente abaixo ou, se este artigo chegou a você por email, responda diretamente ao email: sua resposta é publicada aqui.
Relacionado: O crash do Firebase em iOS: o que aconteceu e por que desativar Analytics não protegeu seu app