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:

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.

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

#rootDir

Project main directory.

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

#serverDir

  • Type: boolean | "./" | "./server" | string
  • Default: false

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.

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

#scanDirs

  • Default: [] (the server source directory is scanned when empty)

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

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

#apiDir

  • Default: "api"

Defines a different directory to scan for api route handlers.

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

#routesDir

  • Default: "routes"

Defines a different directory to scan for route handlers.

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

#buildDir

  • Default: "node_modules/.nitro"

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

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

#output

  • Default: { dir: '.output', serverDir: '.output/server', publicDir: '.output/public' }

Output directories for production bundle.

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

#ignore

  • Default: []

Array of glob patterns to ignore when scanning directories.

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: []

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.

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

Nitro  builds full-stack servers that deploy anywhere.