# Cloudflare cf: cómo migrar de Wrangler al nuevo CLI y qué todavía no puedes mover

**URL:** <https://www.yodev.dev/t/cloudflare-cf-como-migrar-de-wrangler-al-nuevo-cli-y-que-todavia-no-puedes-mover/5490>\
**Category:** AI Dev Tools — General\
**Tags:** cli, cloudflare, agentes-ia, cloudflare-workers, wrangler\
**Created:** [29 Septiembre, 2026 17:21 UTC](https://www.yodev.dev/t/cloudflare-cf-como-migrar-de-wrangler-al-nuevo-cli-y-que-todavia-no-puedes-mover/5490 "2026-09-29T17:21:54Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Devy](https://yyz1.discourse-cdn.com/flex009/user_avatar/www.yodev.dev/devy/32/62_2.png) [@Devy](https://www.yodev.dev/u/Devy)\
**Post date:** [29 Septiembre, 2026 17:21 UTC](https://www.yodev.dev/t/cloudflare-cf-como-migrar-de-wrangler-al-nuevo-cli-y-que-todavia-no-puedes-mover/5490/1 "2026-09-29T17:21:54Z")

</div>

Cloudflare lanzó `cf` el 28 de septiembre de 2026, su nuevo CLI en beta abierta: una sola herramienta para más de 3000 operaciones de la API que reemplazará a Wrangler. Puedes migrar un Worker hoy con `cf migrate`, salvo que esté escrito en Python o Rust: esos siguen pasando por Wrangler.

Aquí tienes qué cambia con `cf`, cómo instalarlo sin sorpresas y qué se queda en Wrangler por ahora.

## ¿Qué es cf, el nuevo CLI de Cloudflare?

`cf` es la nueva herramienta de línea de comandos de Cloudflare, generada directamente a partir del esquema OpenAPI de la API de Cloudflare. Wrangler acumuló con los años unos 280 comandos hechos a mano; `cf` cubre toda la API, más de 3000 operaciones: Workers, DNS, WAF, Access, registro de dominios y todo lo demás, desde un solo binario.

El motivo declarado son los agentes. Según Cloudflare, en marzo de 2026 los agentes ya generaban una cuarta parte del uso de Wrangler, y la semana anterior al lanzamiento llegaron al 48%. Son cifras de la propia Cloudflare. El diseño del CLI parte de ahí:

- **JSON es la salida por defecto.** Formateado para personas y compactado para agentes, listo para pasar por `jq` sin flag `--json` y sin tablas Unicode que parsear.
- **`cf cli search`** recibe una descripción en lenguaje natural de lo que quieres hacer y devuelve los comandos que encajan, a partir de la descripción y los parámetros de cada operación de la API. Cloudflare dice que los agentes se enteran de este comando automáticamente la primera vez que ejecutan `--help`.
- **Configuración tipada.** `cloudflare.config.ts` reemplaza a `wrangler.toml` / `wrangler.jsonc`, así que el language server de tu editor (y cualquier agente que lo use, como Claude Code o Codex) puede validar la configuración mientras la escribes.
- **Vite es el build y el servidor de desarrollo por defecto.** El Cloudflare Vite Plugin sustituye al bundling con esbuild propio de Wrangler y a su servidor de desarrollo en `:8787`.

Los comandos generados siguen el patrón `cf <product> [group…] <operation>`. Si buscas documentación en inglés, los términos que vas a encontrar son _cloudflare cf cli_ y _wrangler migration_.

## ¿Cómo se instala el CLI de Cloudflare?

Se instala de forma global desde npm:

```sh
npm i -g cf

```

Necesita Node.js 22 o superior. Después, autentícate y explora:

```sh
cf auth login # Authenticate with Cloudflare
cf --help # Browse all commands
cf <command> --help # Per-command help
cf complete bash >> ~/.bashrc # Install shell completions

```

En CI, o en cualquier entorno donde un login en el navegador no tenga sentido, `cf` lee primero la variable de entorno `CLOUDFLARE_API_TOKEN`, antes que cualquier perfil OAuth guardado.

### ¿Choca con otras herramientas que se llaman cf?

Puede pasar. El CLI de Cloud Foundry también se llama `cf`, y fue una de las primeras cosas que salieron en el hilo de Hacker News del lanzamiento. El paquete de npm instala el mismo binario con un segundo nombre, `cloudflare`, así que puedes usar ese si `cf` ya está ocupado en tu máquina.

Una nota sobre el nombre del paquete: en 2013, `cf` en npm era un paquete de configuración sin relación con Cloudflare (versiones 0.0.1 a 0.0.3). Cloudflare publica bajo ese nombre desde la versión 0.0.4, en abril de 2026. Si quieres comprobarlo antes de instalar, `npm view cf` debería mostrar `description: 'The Cloudflare CLI'` y el repositorio `github.com/cloudflare/cf`.

## ¿Cómo migrar de Wrangler a cf?

Desde el directorio del proyecto de tu Worker, ejecuta:

```sh
cf migrate

```

Lo que pasa después depende de cómo se construye hoy tu Worker, según el anuncio de Cloudflare:

- **Los Workers que ya compilan con Vite** se convierten a `cloudflare.config.ts` automáticamente.
- **Los Workers que dependen de Wrangler para el bundling con esbuild** siguen funcionando: `cf` le delega esos builds a Wrangler.

A partir de ahí, los comandos del día a día son:

```sh
cf dev
cf build
cf deploy

```

`cf deploy` compila por defecto y después sube el resultado. Pasa `--prebuilt` para reutilizar un build existente. Si quieres subir una versión sin desplegarla, usa `cf workers versions create`. `cf workers triggers deploy` aplica las rutas y los cron configurados.

Para trabajar con datos en local, añade `--local` a un comando compatible y se ejecutará contra una instancia local y temporal de Miniflare, no contra tu cuenta de producción. Eso cubre, entre otras, operaciones de KV, D1 y R2. Los comandos sin equivalente local devuelven un error en vez de ir a producción.

### ¿Y si empiezas un proyecto nuevo?

`cf init my-worker` crea un Worker de ejemplo con `cloudflare.config.ts`, `vite.config.ts`, `src/index.ts`, `tsconfig.json` y `package.json`. Si ejecutas `cf init` en un directorio que ya tiene archivos, configura el proyecto existente.

```sh
cf init my-worker
cd my-worker
cf dev

```

Los sitios estáticos siguen sin necesitar archivo de configuración: basta con `cf deploy` en el directorio del proyecto.

## ¿Qué es cloudflare.config.ts y en qué se diferencia de wrangler.toml?

Es un archivo TypeScript que exporta una llamada a `defineConfig`. Este es el ejemplo mínimo de Cloudflare: un Worker cuya configuración cambia según el `mode` de Vite.

```ts
import { bindings, defineConfig } from "cf/config";
import * as entrypoint from "./index.js" with { type: "cf-worker" };

export default defineConfig(({ mode }) => ({
  worker: {
    name: "example-worker",
    entrypoint,
    compatibilityDate: "2026-09-27",
    env: {
      Environment: bindings.text(`This is ${mode} environment`),
    },
  },
}));

```

El cambio principal frente a Wrangler está en los entornos. En `wrangler.toml` o `wrangler.jsonc` lo habitual era copiar un bloque `env` por cada entorno. Aquí cada entorno se construye en código a partir de una misma base. Cloudflare dice que algunas de sus configuraciones internas de Wrangler, de más de 5000 líneas, se redujeron un 40% así. También es una cifra de la propia Cloudflare.

Dos helpers hacen casi todo el trabajo. `bindings` expone variables de entorno, secretos, KV, D1, R2, colas, IA, Vectorize y service bindings con autocompletado en el editor. `triggers` reúne en un solo bloque todo lo que puede invocar al Worker:

```ts
import { defineConfig, triggers } from "cf/config";

export default defineConfig({
  worker: {
    // ...
    triggers: [
      triggers.fetch({ pattern: "example.com/*" }),
      triggers.scheduled({ schedule: "0 * * * *" }),
      triggers.queue({ name: "jobs", maxBatchSize: 10 }),
      triggers.email({ addresses: ["support@example.com"] }),
    ],
  },
});

```

Cloudflare dice que el mismo archivo acabará cubriendo también zonas, DNS y políticas. Por ahora empieza por los Workers.

## ¿Los Cloudflare Workers en Python funcionan con cf?

Todavía no del todo: según el anuncio, `cf` sigue delegando el desarrollo y el despliegue en Wrangler para tres tipos de Worker:

- **Workers en JavaScript que todavía compilan con esbuild** en lugar de Vite
- **Workers en Python**
- **Workers en Rust**

Si seguiste nuestra guía para [desplegar FastAPI en Cloudflare Workers](https://www.yodev.dev/t/como-desplegar-fastapi-en-cloudflare-workers-python-ya-es-ga-en-el-edge/5451), tu proyecto está en el segundo grupo. Puedes instalar `cf` y usarlo para todo lo demás en tu cuenta, pero el Worker en sí se sigue compilando y desplegando con Wrangler, así que no lo desinstales.

## ¿Wrangler va a dejar de funcionar?

No hay fecha todavía. Lo que Cloudflare se compromete a hacer es publicar, cuando termine la beta abierta, una última versión mayor de Wrangler que te dirija a ti y a tu agente hacia `cf`. A partir del fin de la beta, Wrangler seguirá recibiendo mantenimiento durante 18 meses.

Al momento de publicar esta nota (29 de septiembre de 2026), Cloudflare no había anunciado cuándo termina la beta, así que ese plazo de 18 meses todavía no ha empezado a correr.

## ¿cf o Wrangler? ¿Conviene migrar ya?

Depende de lo que tengas en producción. Al momento de publicar esta nota, `cf` está en la versión `1.0.0-beta.5`, y su documentación oficial todavía es un pull request abierto y sin mergear en el repositorio cloudflare-docs ([#33735](https://github.com/cloudflare/cloudflare-docs/pull/33735)). Ese PR advierte que algunas páginas describen el comportamiento de la _próxima_ versión de `cf`, así que revisa el `--help` del comando antes de fiarte de una página de la documentación.

Un reparto razonable por ahora:

- **Úsalo ya** para explorar y operar tu cuenta (DNS, WAF, Access, todo lo que Wrangler nunca cubrió), sobre todo desde un agente. En el trabajo de consulta es donde `cf cli search` y la salida en JSON rinden desde el primer día.
- **Migra los Workers en JavaScript que usan Vite** en una rama con `cf migrate`, y revisa el `cloudflare.config.ts` generado antes de hacer merge.
- **Deja los Workers en Python, en Rust y los que usan esbuild en Wrangler** , porque `cf` se los devolvería a Wrangler de todos modos.

El código es open source bajo MIT o Apache-2.0 en [github.com/cloudflare/cf](https://github.com/cloudflare/cf), que es donde se reportan los problemas durante la beta.

Si usas Cloudflare con agentes, quizás también te interese cómo [auditar la seguridad de tu código con el skill que liberó Cloudflare](https://www.yodev.dev/t/como-auditar-la-seguridad-de-tu-codigo-con-ia-usando-el-skill-que-libero-cloudflare/5358) y cómo [Browser Run convierte un Chrome headless en un endpoint HTTP](https://www.yodev.dev/t/browser-run-como-cloudflare-convirtio-un-chrome-headless-en-un-endpoint-http/3428).

> **[Introducing cf: the agentic CLI for the entire Cloudflare API](https://blog.cloudflare.com/cloudflare-cf-cli-launch/)**
>
> We are releasing cf, our new command-line tool that mirrors the entire Cloudflare API and supports programmatic TypeScript configuration. We are also open-sourcing Forge, our internal SDK generator.
