---
title: Bun Runtime
description: Execute JavaScript/TypeScript files, package.json scripts, and executable packages with Bun's fast runtime.
---
import Run from "/snippets/cli/run.mdx";
The Bun Runtime 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.
| Command | Time |
| --------------- | -------- |
| `bun hello.js` | `5.2ms` |
| `node hello.js` | `25.1ms` |
This benchmark is based on running a simple Hello World script on Linux
## Run a file
Use `bun run` to execute a source file.
```bash terminal icon="terminal"
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 terminal icon="terminal"
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 terminal icon="terminal"
bun index.tsx
bun index.js
```
### `--watch`
To run a file in watch mode, use the `--watch` flag.
```bash terminal icon="terminal"
bun --watch run index.tsx
```
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.
## Run a `package.json` script
Compare to `npm run