Note — bunx
is an alias for bun x
. The bunx
CLI will be auto-installed when you install bun
.
Use bunx
to auto-install and run packages from npm
. It's Bun's equivalent of npx
or yarn dlx
.
bunx cowsay "Hello world!"
⚡️ Speed — With Bun's fast startup times, bunx
is roughly 100x faster than npx
for locally installed packages.
Packages can declare executables in the "bin"
field of their package.json
. These are known as package executables or package binaries.
{
// ... other fields
"name": "my-cli",
"bin": {
"my-cli": "dist/index.js"
}
}
These executables are commonly plain JavaScript files marked with a shebang line to indicate which program should be used to execute them. The following file indicates that it should be executed with node
.
#!/usr/bin/env node
console.log("Hello world!");
These executables can be run with bunx
,
bunx my-cli
As with npx
, bunx
will check for a locally installed package first, then fall back to auto-installing the package from npm
. Installed packages will be stored in Bun's global cache for future use.
Arguments and flags
To pass additional command-line flags and arguments through to the executable, place them after the executable name.
bunx my-cli --foo bar
Shebangs
By default, Bun respects shebangs. If an executable is marked with #!/usr/bin/env node
, Bun will spin up a node
process to execute the file. However, in some cases it may be desirable to run executables using Bun's runtime, even if the executable indicates otherwise. To do so, include the --bun
flag.
bunx --bun my-cli
The --bun
flag must occur before the executable name. Flags that appear after the name are passed through to the executable.
bunx --bun my-cli # good
bunx my-cli --bun # bad
To force bun to always be used with a script, use a shebang.
#!/usr/bin/env bun