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.
deno bundle [OPTIONS] [file]...Output a single JavaScript file with all dependencies.
deno bundle jsr:@std/http/file-server -o file-server.bundle.js
If no output file is given, the output is written to standard output:
deno bundle jsr:@std/http/file-server
Type checking options Jump to heading
--check<CHECK_TYPE>optionalEnable 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.
--no-check<NO_CHECK_TYPE>optionalSkip type-checking. If the value of "remote" is supplied, diagnostic errors from remote modules will be ignored.
Dependency management options Jump to heading
--frozen<BOOLEAN>optionalError out if lockfile is out of date.
Load import map file from local file or remote URL.
--lock<FILE>optionalCheck the specified lock file. (If value is not provided, defaults to "./deno.lock").
--no-lockDisable auto discovery of the lock file.
--no-npmDo not resolve npm modules.
--no-remoteDo not resolve remote modules.
--node-modules-dir<MODE>optionalSelects 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-linker<MODE>Sets the linker mode for npm packages (isolated or hoisted).
--reload, -r<CACHE_BLOCKLIST>optionalReload 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.
--vendor<vendor>optionalToggles local vendor folder usage for remote modules and a node_modules folder for npm packages.
Options Jump to heading
--allow-import, -I<IP_OR_HOSTNAME>optionalAllow 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-scripts<PACKAGE>optionalAllow running npm lifecycle scripts for the given packages
Note: Scripts will only be executed when using a node_modules directory (--node-modules-dir).
--cert<FILE>Load certificate authority from PEM encoded file.
--code-splittingEnable code splitting.
--conditions<conditions>Use this argument to specify custom conditions for npm package exports. You can also use DENO_CONDITIONS env var. .
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-import<IP_OR_HOSTNAME>optionalDeny importing from remote hosts. Optionally specify denied IP addresses and host names, with ports as necessary.
--env-file<FILE>optionalLoad environment variables from local file Only the first environment variable with a given key is used. Existing process environment variables are not overwritten, so if variables with the same names already exist in the environment, their values will be preserved. Where multiple declarations for the same environment variable exist in your .env file, the first one encountered is applied. This is determined by the order of the files you pass as arguments.
--external<external>--format<format>--inline-imports<inline-imports>optionalWhether to inline imported modules into the importing file [default: true]
--keep-namesKeep function and class names.
--minifyMinify the output.
--minimum-dependency-age<minimum-dependency-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).
--no-configDisable automatic loading of the configuration file.
--outdir<outdir>Output directory for bundled files.
--output, -o<output>Output path`.
--packages<packages>How to handle packages. Accepted values are 'bundle' or 'external'.
--platform<platform>Platform to bundle for. Accepted values are 'browser' or 'deno'.
--sourcemap<sourcemap>optionalGenerate source map. Accepted values are 'linked', 'inline', or 'external'.
--watchWatch and rebuild on changes.
