
# Directories

> Customize where Nitro looks for source files and writes its output.

::note
All examples on this page assume the following import in `nitro.config.ts`:

```ts
import { defineConfig } from "nitro";
```
::

### `workspaceDir`

Project workspace root directory.

The workspace directory (e.g. pnpm workspace) is automatically detected when the `workspaceDir` option is not set.

```ts
export default defineConfig({
  workspaceDir: "../", // monorepo root
});
```

### `rootDir`

Project main directory.

```ts
export default defineConfig({
  rootDir: "./src/server",
});
```

### `serverDir`

- Type: `boolean`{lang=ts} | `"./"`{lang=ts} | `"./server"`{lang=ts} | `string`{lang=ts}
- Default: `false`{lang=ts}

Server directory for scanning `api/`, `routes/`, `plugins/`, `utils/`, `middleware/`, `modules/`, and `tasks/` folders.

When set to `false`, automatic directory scanning is disabled. Set to `"./"` to use the root directory, or `"./server"` to use a `server/` subdirectory.

```ts
export default defineConfig({
  serverDir: "./server", // scan server/ subdirectory
});
```

### `scanDirs`

- Default: `[]`{lang=ts} (the server source directory is scanned when empty)

List of directories to scan and auto-register files, such as API routes.

```ts
export default defineConfig({
  scanDirs: ["./modules/auth/api", "./modules/billing/api"],
});
```

### `apiDir`

- Default: `"api"`{lang=ts}

Defines a different directory to scan for api route handlers.

```ts
export default defineConfig({
  apiDir: "endpoints", // scan endpoints/ instead of api/
});
```

### `routesDir`

- Default: `"routes"`{lang=ts}

Defines a different directory to scan for route handlers.

```ts
export default defineConfig({
  routesDir: "pages", // scan pages/ instead of routes/
});
```

### `buildDir`

- Default: `"node_modules/.nitro"`{lang=ts}

Nitro's temporary working directory for generating build-related files.

```ts
export default defineConfig({
  buildDir: ".nitro", // use .nitro/ in project root
});
```

### `output`

- Default: `{ dir: '.output', serverDir: '.output/server', publicDir: '.output/public' }`{lang=ts}

Output directories for production bundle.

```ts
export default defineConfig({
  output: {
    dir: "dist",
    serverDir: "dist/server",
    publicDir: "dist/public",
  },
});
```

### `ignore`

- Default: `[]`{lang=ts}

Array of glob patterns to ignore when scanning directories.

```ts
export default defineConfig({
  ignore: [
    "routes/_legacy/**", // skip legacy route handlers
  ],
});
```

Test files (`*.test.ts`, `*.spec.ts`) and type declarations (`*.d.ts`) are always ignored.

### `scanSuffixes`

- Default: `[]`{lang=ts}

Additional dotted suffixes to keep as part of scanned file names. Nitro reserves trailing lowercase suffixes (like `.get` or `.dev`) in scanned file names. Known file extensions (e.g. `.json`, `.md`, `.xml`) are always kept. See [reserved suffixes](/docs/routing#reserved-suffixes).

```ts
export default defineConfig({
  scanSuffixes: ["prompt"], // routes/system.prompt.ts -> /system.prompt
});
```
