Cloudflare launched cf on September 28, 2026, its new CLI in open beta: a single tool for over 3000 API operations that will replace Wrangler. You can migrate a Worker today with cf migrate, unless it’s written in Python or Rust: those still go through Wrangler.
Here’s what changes with cf, how to install it without surprises, and what stays in Wrangler for now.
What is cf, Cloudflare’s new CLI?
cf is Cloudflare’s new command-line tool, generated directly from the OpenAPI schema of the Cloudflare API. Wrangler accumulated over the years about 280 manually-crafted commands; cf covers the entire API, over 3000 operations: Workers, DNS, WAF, Access, domain registration and everything else, from a single binary.
The stated reason is agents. According to Cloudflare, by March 2026 agents were already generating a quarter of Wrangler’s usage, and the week before launch they reached 48%. Those are Cloudflare’s own figures. The CLI design starts from there:
- JSON is the default output. Formatted for people and compacted for agents, ready to pass through
jqwithout the--jsonflag and without Unicode tables to parse. cf cli searchtakes a natural language description of what you want to do and returns matching commands, based on the description and parameters of each API operation. Cloudflare says agents discover this command automatically the first time they run--help.- Typed configuration.
cloudflare.config.tsreplaceswrangler.toml/wrangler.jsonc, so your editor’s language server (and any agent using it, like Claude Code or Codex) can validate the configuration as you write it. - Vite is the build and development server by default. The Cloudflare Vite Plugin replaces Wrangler’s own esbuild bundling and its development server on
:8787.
Generated commands follow the pattern cf <product> [group…] <operation>. If you’re looking for English documentation, the terms you’ll find are cloudflare cf cli and wrangler migration.
How do you install Cloudflare’s CLI?
It installs globally from npm:
npm i -g cf
It requires Node.js 22 or higher. Afterwards, authenticate and explore:
cf auth login # Authenticate with Cloudflare
cf --help # Browse all commands
cf <command> --help # Per-command help
cf complete bash >> ~/.bashrc # Install shell completions
In CI, or in any environment where a browser login doesn’t make sense, cf first reads the CLOUDFLARE_API_TOKEN environment variable, before any saved OAuth profile.
Does it clash with other tools called cf?
It can happen. Cloud Foundry’s CLI is also called cf, and it was one of the first things to come up in the Hacker News thread about the launch. The npm package installs the same binary under a second name, cloudflare, so you can use that if cf is already taken on your machine.
A note about the package name: in 2013, cf on npm was an unrelated configuration package (versions 0.0.1 to 0.0.3). Cloudflare has been publishing under that name since version 0.0.4, in April 2026. If you want to check before installing, npm view cf should show description: 'The Cloudflare CLI' and the repository github.com/cloudflare/cf.
How do you migrate from Wrangler to cf?
From your Worker project directory, run:
cf migrate
What happens next depends on how your Worker is built today, according to Cloudflare’s announcement:
- Workers that already compile with Vite are automatically converted to
cloudflare.config.ts. - Workers that rely on Wrangler for esbuild bundling keep working:
cfdelegates those builds to Wrangler.
From there, the everyday commands are:
cf dev
cf build
cf deploy
cf deploy builds by default and then uploads the result. Pass --prebuilt to reuse an existing build. If you want to upload a version without deploying it, use cf workers versions create. cf workers triggers deploy applies the configured routes and crons.
To work with data locally, add --local to a compatible command and it will run against a local, temporary instance of Miniflare, not your production account. That covers, among others, KV, D1, and R2 operations. Commands without a local equivalent return an error instead of going to production.
What if you’re starting a new project?
cf init my-worker creates a sample Worker with cloudflare.config.ts, vite.config.ts, src/index.ts, tsconfig.json, and package.json. If you run cf init in a directory that already has files, it configures the existing project.
cf init my-worker
cd my-worker
cf dev
Static sites still don’t need a configuration file: just cf deploy in the project directory.
What is cloudflare.config.ts and how does it differ from wrangler.toml?
It’s a TypeScript file that exports a call to defineConfig. This is Cloudflare’s minimal example: a Worker whose configuration changes based on Vite’s mode.
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`),
},
},
}));
The main change from Wrangler is in environments. In wrangler.toml or wrangler.jsonc the usual practice was to copy an env block for each environment. Here each environment is built in code from the same base. Cloudflare says some of their internal Wrangler configurations, over 5000 lines, were reduced by 40% this way. That’s also a figure from Cloudflare itself.
Two helpers do almost all the work. bindings exposes environment variables, secrets, KV, D1, R2, queues, AI, Vectorize, and service bindings with editor autocomplete. triggers brings together in a single block everything that can invoke the Worker:
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 says that the same file will eventually also cover zones, DNS, and policies. For now it starts with Workers.
Do Cloudflare Workers in Python work with cf?
Not yet completely: according to the announcement, cf continues to delegate development and deployment to Wrangler for three types of Worker:
- JavaScript Workers that still compile with esbuild instead of Vite
- Python Workers
- Rust Workers
If you followed our guide for deploying FastAPI on Cloudflare Workers, your project is in the second group. You can install cf and use it for everything else in your account, but the Worker itself continues to be compiled and deployed with Wrangler, so don’t uninstall it.
Is Wrangler going to stop working?
There’s no date yet. What Cloudflare commits to doing is publishing, when the open beta ends, a final major version of Wrangler that directs you and your agent towards cf. After the beta ends, Wrangler will continue to receive maintenance for 18 months.
At the time of publishing this note (September 29, 2026), Cloudflare had not announced when the beta ends, so that 18-month period hasn’t started yet.
cf or Wrangler? Should you migrate now?
It depends on what you have in production. At the time of publishing this note, cf is at version 1.0.0-beta.5, and its official documentation is still a pull request open and not merged in the cloudflare-docs repository (#33735). That PR warns that some pages describe the behavior of the next version of cf, so check the --help of the command before trusting a documentation page.
A reasonable breakdown for now:
- Use it now to explore and operate your account (DNS, WAF, Access, everything Wrangler never covered), especially from an agent. In consulting work is where
cf cli searchand JSON output pay off from day one. - Migrate JavaScript Workers that use Vite in a branch with
cf migrate, and review the generatedcloudflare.config.tsbefore merging. - Leave Python Workers, Rust Workers, and those using esbuild in Wrangler, because
cfwould send them back to Wrangler anyway.
The code is open source under MIT or Apache-2.0 at github.com/cloudflare/cf, which is where issues are reported during the beta.
If you use Cloudflare with agents, you might also be interested in how to audit your code security with the skill Cloudflare released and how Browser Run turns a headless Chrome into an HTTP endpoint.