The `bun` CLI can be used to execute JavaScript/TypeScript files, `package.json` scripts, and [executable packages](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#bin). ## Performance Bun is designed to start fast and run fast. Under the hood Bun uses the [JavaScriptCore engine](https://developer.apple.com/documentation/javascriptcore), which is developed by Apple for Safari. In most cases, the startup and running performance is faster than V8, the engine used by Node.js and Chromium-based browsers. Its transpiler and runtime are written in Zig, a modern, high-performance language. On Linux, this translates into startup times [4x faster](https://twitter.com/jarredsumner/status/1499225725492076544) than Node.js. {% table %} --- - `bun hello.js` - `5.2ms` --- - `node hello.js` - `25.1ms` {% /table %} {% caption content="Running a simple Hello World script on Linux" /%} ## Run a file {% callout %} Compare to `node ` {% /callout %} Use `bun run` to execute a source file. ```bash $ bun run index.js ``` Bun supports TypeScript and JSX out of the box. Every file is transpiled on the fly by Bun's fast native transpiler before being executed. ```bash $ bun run index.js $ bun run index.jsx $ bun run index.ts $ bun run index.tsx ``` Alternatively, you can omit the `run` keyword and use the "naked" command; it behaves identically. ```bash $ bun index.tsx $ bun index.js ``` ### `--watch` To run a file in watch mode, use the `--watch` flag. ```bash $ bun --watch run index.tsx ``` {% callout %} **Note** — When using `bun run`, put Bun flags like `--watch` immediately after `bun`. ```bash $ bun --watch run dev # ✔️ do this $ bun run dev --watch # ❌ don't do this ``` Flags that occur at the end of the command will be ignored and passed through to the `"dev"` script itself. {% /callout %} ### `--smol` In memory-constrained environments, use the `--smol` flag to reduce memory usage at a cost to performance. ```bash $ bun --smol run index.tsx ``` ## Run a `package.json` script {% note %} Compare to `npm run