On this page
deno bundle
deno bundle is currently an experimental subcommand and is subject to changes.deno bundle combines your module and all of its dependencies into a single
JavaScript file, using esbuild under the hood. It
is useful for deploying or distributing a project as a single optimized file,
but it is not currently intended as a replacement for complex or interactive
build tools such as Vite or
webpack.
Basic usage Jump to heading
deno bundle -o output.js main.ts
Without -o/--output, the bundle is written to standard output. The output
file can then be run with Deno or in other JavaScript runtimes:
deno run output.js
Common options Jump to heading
Target a platform with --platform (deno by default, or browser), shrink
the output with --minify, and emit source maps with --sourcemap:
deno bundle --platform=browser --minify --sourcemap -o dist/app.js main.ts
Split shared code into separate chunks with --code-splitting and an output
directory:
deno bundle --code-splitting --outdir dist/ main.ts worker.ts
Keep a dependency out of the bundle with --external:
deno bundle --external npm:sharp -o output.js main.ts
Generate TypeScript declarations alongside the JS output with --declaration.
Deno rolls up the types for each entry point into a single self-contained
.d.ts file:
deno bundle main.ts --outdir dist --declaration
# Produces dist/main.js and dist/main.d.ts
Type checking Jump to heading
deno bundle does not type-check your code by default. Enable type-checking
with the --check flag:
# type-check local modules while bundling
deno bundle --check -o output.js main.ts
# also type-check remote modules
deno bundle --check=all -o output.js main.ts
You can also skip type-checking explicitly with --no-check, and
--no-check=remote ignores diagnostics from remote modules only.
The browser field Jump to heading
When bundling with --platform=browser, Deno honors the npm browser field in
a dependency's package.json, including its object form. The object maps
modules to browser-specific replacements:
{
"browser": {
"./server.js": "./client.js",
"crypto": false,
"foo": "./shims/foo.js"
}
}
- A relative-path key remaps a resolved file to a browser-specific one
(
./server.jsbecomes./client.js). - A bare-specifier key remaps an import (
foobecomes./shims/foo.js). A leadingnode:prefix is stripped before lookup, soimport "node:crypto"matches the"crypto"key. - A value of
falseexcludes the module: the bundler substitutes an empty stub.
For more on bundling strategies with Deno, see the Bundling guide.
bundleOutput a single JavaScript file with all dependencies
Options Jump to heading
--allow-import, -IAllow importing from remote hosts. Optionally specify allowed IP addresses and host names, with ports as necessary. Default value: deno.land:443,jsr.io:443,esm.sh:443,raw.esm.sh:443,cdn.jsdelivr.net:443,raw.githubusercontent.com:443,gist.githubusercontent.com:443.
--allow-scriptsAllow running npm lifecycle scripts for the given packages
Note: Scripts will only be executed when using a node_modules directory (--node-modules-dir).
--certLoad certificate authority from PEM encoded file.
--checkEnable type-checking. This subcommand does not type-check by default; pass --check=all to also type-check remote modules. Alternatively, use the 'deno check' subcommand.
--code-splittingEnable code splitting.
Configure different aspects of deno including TypeScript, linting, and code formatting.
Typically the configuration file will be called deno.json or deno.jsonc and
automatically detected; in that case this flag is not necessary.
--declarationGenerate .d.ts declaration files alongside the bundle.
--deny-importDeny importing from remote hosts. Optionally specify denied IP addresses and host names, with ports as necessary.
--external--format--frozen-lockfileError out if lockfile is out of date.
Load import map file from local file or remote URL.
--inline-importsWhether to inline imported modules into the importing file [default: true]
--keep-namesKeep function and class names.
--lockCheck the specified lock file. (If value is not provided, defaults to "./deno.lock").
--min-dep-age(Unstable) The age in minutes, ISO-8601 duration or RFC3339 absolute timestamp (e.g. '120' for two hours, 'P2D' for two days, '2025-09-16' for cutoff date, '2025-09-16T12:00:00+00:00' for cutoff time, '0' to disable).
--minifyMinify the output.
--no-checkSkip type-checking. If the value of "remote" is supplied, diagnostic errors from remote modules will be ignored.
--no-configDisable automatic loading of the configuration file.
--no-lockDisable auto discovery of the lock file.
--no-npmDo not resolve npm modules.
--no-remoteDo not resolve remote modules.
--node-modules-dirSelects the node_modules directory mode for npm packages (not a path). One of: auto (create a local node_modules directory and install npm packages into it), manual (use the existing local node_modules directory, do not modify it), none (do not use a local node_modules directory; resolve npm packages from the global cache). Defaults to auto when the flag is passed without a value.
--node-modules-linkerSets the linker mode for npm packages (isolated or hoisted).
--outdirOutput directory for bundled files.
--output, -oOutput path`.
--packagesHow to handle packages. Accepted values are 'bundle' or 'external'.
--platformPlatform to bundle for. Accepted values are 'browser' or 'deno'.
--reload, -rReload source code cache (recompile TypeScript). With no value, reloads everything. Pass a comma-separated list of specifiers to reload only those modules; npm: reloads all npm modules; npm:chalk reloads a single npm module; jsr:@std/http/file-server,jsr:@std/assert/assert-equals reloads specific modules.
--sourcemapGenerate source map. Accepted values are 'linked', 'inline', or 'external'.
--unsafely-ignore-certificate-errorsDANGER: Disables verification of TLS certificates.
--vendorToggles local vendor folder usage for remote modules and a node_modules folder for npm packages.
--watchWatch and rebuild on changes.
Last updated on