Bundling
This is an experimental feature and requires Deno 2.4.0 or newer.
The deno bundle command outputs a single JavaScript file with all
dependencies.
deno bundle is powered by ESBuild under the
hood.
This tool is useful for deploying or distributing a project as a single optimized JS file.
Supported features Jump to heading
- Resolves and inlines all dependencies
- Supports JSX/TSX, TypeScript, and modern JavaScript, including import attributes and CSS
- Optional minification (--minify) and source maps (--sourcemap)
- Code splitting
- Platform targeting (--platform, supports Deno and browser)
- JSX support when configured
Basic example Jump to heading
import chalk from "npm:chalk";
console.log(chalk.red("Hello from `deno bundle`!"));
$ deno bundle main.ts > bundle.js
# Or with an explicit output file:
$ deno bundle -o bundle.js main.ts
Above invocation produces a single bundle.js file that contains all the
dependencies, resulting in a self-contained application file:
$ deno bundle.js
Hello from `deno bundle`!
You can use JSR, npm, http(s) and local imports in the file you are bundling,
deno bundle will take care of collecting all the sources and producing a
single output file.
Options Overview Jump to heading
| Flag | Description | 
|---|---|
| -o,--output <file> | Write bundled output to a file | 
| --minify | Minify the output for production | 
| --format <format> | Output format ( esmby default) | 
| --code-splitting | Enable code splitting | 
| --platform <platform> | Bundle for browserordeno(default:deno) | 
| --sourcemap | Include source maps ( linked,inline,external) | 
| --watch | Automatically rebuild on file changes | 
| --inline-imports | Inline imported modules ( trueorfalse) | 
Bundle a React page for the web Jump to heading
Start with an app.jsx and index.html:
import React from "npm:react";
import { createRoot } from "npm:react-dom/client";
function App() {
  return <h1>Hello, React!</h1>;
}
const root = createRoot(document.getElementById("root"));
root.render(<App />);
<!DOCTYPE html>
<html lang="en">
  <body>
    <div id="root"></div>
    <script type="module" src="/bundle.js"></script>
  </body>
</html>
Now, let's bundle:
$ deno bundle --platform=browser app.jsx -o bundle.js
⚠️ deno bundle is experimental and subject to changes
Bundled 9 modules in 99ms
  app.bundle.js 874.67KB
At this point, we're ready to serve our page, let's use
@std/http/file-server from JSR to
serve our app:
$ deno run -ENR jsr:@std/http/file-server
Listening on http://127.0.0.1:8000
Visiting the page in your browser should show:
