Skip to main content
On this page

Deploying Deno to Cloudflare Workers with Wrangler

Cloudflare Workers allows you to run JavaScript on Cloudflare's edge network.

Wrangler is the official CLI for Node.js provided by Cloudflare for its developer platform. In this tutorial, we will deploy a Cloudflare Worker by using Wrangler from Deno.

Denoflare, a Deno-friendly third-party tool, is guaranteed to run on Deno, but unlike Wrangler, there is no guarantee that it can correctly utilize Cloudflare features. If you want to use denoflare, refer to Cloudflare Workers tutorial.

Setup wrangler Jump to heading

First, add the wrangler npm module to your project.

deno add npm:wrangler

Next, create wrangler.json. Since the wrangler initialization script generates many files that are only necessary for Node.js, we will write it manually. Because the JSON schema references node_modules by default, we will configure it to reference the schema from unpkg.com instead.

{
  "$schema": "https://www.unpkg.com/wrangler/config-schema.json",
  "name": "deno-wrangler",
  "main": "src/mod.ts",
  "compatibility_date": "2026-04-18",
  "observability": {
    "enabled": true
  }
}

Also, update deno.json to add commands that invoke wrangler features. The dev and start commands overlap, but this is to align with what wrangler generates for Node.js environment.

{
  "tasks": {
    "deploy": "deno --allow-env --allow-run npm:wrangler deploy",
    "dev": "deno npm:wrangler dev",
    "start": "deno npm:wrangler dev",
    "cf-typegen": "deno npm:wrangler types"
  }
}

Finally, execute the cf-typegen command to automatically generate the type definition file, worker-configuration.d.ts.

deno task cf-typegen

Create your function Jump to heading

Now, create your worker script in src/mod.ts. It needs to export an object containing a fetch handler to satisfy the Cloudflare Module Worker API which is generated as worker-configuration.d.ts in the previous step.

export default {
  async fetch(req) {
    return new Response("Hello World");
  },
} satisfies ExportedHandler<Env>;

Setup build Jump to heading

Wrangler includes a built-in build system powered by esbuild, but it is configured for Node.js by default. Since this is incompatible with Deno's module resolution mechanism, you must set up your own build environment and configure Custom Builds.

First, download esbuild and the official Deno esbuild plugin.

deno add npm:esbuild jsr:@deno/esbuild-plugin

Next, create a build script in build.ts. This will bundle src/mod.ts into a single JavaScript file at dist/server.js.

import * as esbuild from "esbuild";
import { denoPlugin } from "@deno/esbuild-plugin";

await esbuild.build({
  entryPoints: ["src/mod.ts"],
  outfile: "dist/server.js",
  format: "esm",
  bundle: true,
  minify: true,
  treeShaking: true,
  plugins: [
    denoPlugin(),
  ],
});

await esbuild.stop();

Then, we will set up the build script execution task in deno.json.

{
  "tasks": {
    "build": "deno run -REW --allow-run build.ts"
  }
}

Finally, edit wrangler.json to set it to run the build task during deployment, and configure the output file to be the entry point.

{
  "$schema": "https://www.unpkg.com/wrangler/config-schema.json",
  "name": "deno-wrangler",
  "main": "dist/server.js",
  "compatibility_date": "2026-04-18",
  "observability": {
    "enabled": true
  },
  "build": {
    "command": "deno task build"
  }
}

Deploy Jump to heading

Once you have finished configuring wrangler, you can deploy your worker to the Cloudflare edge network by executing the deploy command.

deno task deploy

Wrangler will automatically run your build.ts script to bundle the application, and then safely publish the resulting dist/server.js file to Cloudflare Workers. Once finished, Wrangler will output the live URL where your worker is hosted.

Last updated on

Did you find what you needed?

Privacy policy