---
title: "bun init"
description: "Scaffold an empty Bun project with the interactive `bun init` command"
---

import Init from "/snippets/cli/init.mdx";

Scaffold a new Bun project with `bun init`.

```bash terminal icon="terminal"
bun init my-app
```

```txt
? Select a project template - Press return to submit.
❯ Blank
  React
  Library

✓ Select a project template: Blank

 + .gitignore
 + CLAUDE.md
 + .cursor/rules/use-bun-instead-of-node-vite-npm-pnpm.mdc -> CLAUDE.md
 + index.ts
 + tsconfig.json (for editor autocomplete)
 + README.md
```

Press `enter` to accept the default answer for each prompt, or pass the `-y` flag to auto-accept the defaults.

---

`bun init` infers settings with sane defaults and is non-destructive when run multiple times.

<Frame>
  ![Demo](https://user-images.githubusercontent.com/709451/183006613-271960a3-ff22-4f7c-83f5-5e18f684c836.gif)
</Frame>

It creates:

- a `package.json` file with a name that defaults to the current directory name
- a `tsconfig.json` or `jsconfig.json` file, depending on whether the entry point is a TypeScript file
- an entry point, which defaults to `index.ts` unless any of `index.{tsx, jsx, js, mts, mjs}` exist or the `package.json` specifies a `module` or `main` field
- a `README.md` file

AI Agent rules (disable with `$BUN_AGENT_RULE_DISABLED=1`):

- a `CLAUDE.md` file when Claude CLI is detected (disable with `CLAUDE_CODE_AGENT_RULE_DISABLED` env var)
- a `.cursor/rules/*.mdc` file when Cursor is detected, which tells [Cursor AI](https://cursor.sh) to use Bun instead of Node.js and npm

Pass `-y` or `--yes` to accept the defaults without prompting.

At the end, it runs `bun install` to install `@types/bun`.

---

<Init />
