Nitro · NITRO0021 · NITRO0022

Keep Nitro server helpers in server/utils

Suggests server/utils for helpers that Nitro server routes, middleware, and plugins import from ad-hoc directories.
NITRO0021NITRO0022vite-doctor/nitroimportsinfoSuggestion

Run this rule

pnpm vite-doctor . --framework nitro --extends auto,nitro/strict --rules nitro/structure/prefer-server-utils

Why it matters

Nitro 2 and Nuxt auto-import exports from server/utils in server code and generate their types. Helpers kept in directories such as server/lib or server/helpers need a relative import in every caller.

Move shared server helpers to server/utils/ when server auto-imports are enabled. NITRO0022 is currently suppressed: Doctor does not yet capture Nitro’s resolved provider and exclusion evidence, so it cannot establish that an explicit utility import selects the same implementation as an auto-import.

Example

Let Nitro auto-import server helpers

Before

// server/api/admin/users.get.ts
import { requireAdmin } from '../../lib/auth'
import { paginate } from '../../helpers/paginate'

export default defineEventHandler(async (event) => {
  await requireAdmin(event)
  return paginate(event, users)
})

After

// server/utils/auth.ts exports requireAdmin
// server/utils/paginate.ts exports paginate

// server/api/admin/users.get.ts
export default defineEventHandler(async (event) => {
  await requireAdmin(event)
  return paginate(event, users)
})
Copyright © 2026