Voltar para o blog

Por que usamos o cf e não o Wrangler

O que é o CLI cf, como funciona o cloudflare.config.ts tipado e por que misturar os dois dá problema.

Quem já publicou algo na Cloudflare conhece o Wrangler e o arquivo wrangler.jsonc. Este template não usa nenhum dos dois. Em vez disso, ele usa o cf, o novo CLI da Cloudflare. Este texto explica a troca.

O que é o cf

O cf é a ferramenta de linha de comando que a Cloudflare está construindo para substituir o Wrangler. Com ela você roda o ambiente local, compila, cria banco e publica:

npx cf dev       # servidor local
npx cf build     # compila
npx cf deploy    # publica

Há um ponto central: a configuração deixa de ser um JSON e vira código TypeScript.

O cloudflare.config.ts tipado

No lugar de um wrangler.jsonc cheio de textos soltos, você escreve:

import { bindings, defineConfig } from 'cf/config'

export default defineConfig({
  worker: {
    name: 'meu-app',
    env: {
      DB: bindings.d1({ name: 'meu-app-db', id: '...' }),
      BETTER_AUTH_SECRET: bindings.secret(),
    },
  },
})

Como é TypeScript, o editor completa as opções e acusa erro de digitação na hora. Os bindings declarados aqui geram os tipos do env, na pasta .cloudflare/types, e o seu código passa a saber que env.DB existe e é um D1.

O que muda em relação ao Wrangler

AssuntoWranglercf
Arquivo de configwrangler.jsonccloudflare.config.ts
Tipos dos bindingswrangler typescf workers types
Ambientes--env staging--mode staging
Segredos no deploywrangler secret putcf deploy --secrets-file
Migrations de Durable Objectbloco migrationsexports.durableObject(...)

Os conceitos continuam os mesmos (Worker, D1, R2, Durable Objects). Muda o jeito de declarar e de chamar.

Por que não misturar os dois

Parece inofensivo deixar um wrangler.jsonc ao lado, "só por garantia". Não faça isso. Duas fontes de configuração significam duas verdades: você muda o ID do banco em um arquivo, esquece o outro, e o deploy vai para um lugar diferente do que o desenvolvimento local usa. Ferramentas e assistentes de IA também ficam confusos sobre qual arquivo manda.

Por isso o template não instala o Wrangler e a regra é simples: se precisa mudar a configuração, mude o cloudflare.config.ts.

O que significa estar em beta

O cf e o plugin do Vite que o acompanha ainda estão em versão beta. Na prática:

  • Comandos e opções podem mudar de uma versão para outra.
  • Podem existir bugs que a documentação ainda não registra.
  • Por isso as versões estão fixadas no package.json, sem o ^, e só devem ser atualizadas de propósito.

Antes de subir a versão, leia o changelog, rode a checagem de tipos, o build e o cf deploy --dry-run. Se algo quebrar, você volta para a versão anterior sem susto.

Conclusão

A troca traz configuração tipada e um fluxo único do código ao deploy. O preço é aceitar um beta. Se você precisa de estabilidade máxima hoje, conheça o risco antes de decidir, e mantenha as versões travadas.