pnpm/pnpm · error · PnpmError

BAD_OUTDATED_FORMAT

BAD_OUTDATED_FORMAT

Error message

Unsupported format: ${opts.format?.toString() ?? 'undefined'}

What it means

The single-project `pnpm outdated` renderer only knows three output formats — table (default), list, and json. The switch over opts.format fell through to default, meaning the value arriving (after CLI parsing and config merging) is none of those three, or undefined reached a code path that required a known format.

Source

Thrown at pnpm11/deps/inspection/commands/src/outdated/outdated.ts:266

    ...outdatedActions.map(toOutdatedAction),
  ]

  let output!: string
  switch (opts.format ?? 'table') {
    case 'table': {
      output = renderOutdatedTable(outdatedPackages, opts)
      break
    }
    case 'list': {
      output = renderOutdatedList(outdatedPackages, opts)
      break
    }
    case 'json': {
      output = renderOutdatedJSON(outdatedPackages, opts)
      break
    }
    default: {
      throw new PnpmError('BAD_OUTDATED_FORMAT', `Unsupported format: ${opts.format?.toString() ?? 'undefined'}`)
    }
  }
  return {
    output,
    exitCode: outdatedPackages.length === 0 ? 0 : 1,
  }
}

export type OutdatedItem = OutdatedPackage & { dependencyType?: 'githubAction' }

function renderOutdatedTable (outdatedPackages: readonly OutdatedItem[], opts: { long?: boolean, sortBy?: 'name' }): string {
  if (outdatedPackages.length === 0) return ''
  const columnNames = [
    'Package',
    'Current',
    'Latest',
  ]

View on GitHub (pinned to 5b11d3a15b)

Solutions

  1. Use one of: `--format=table`, `--format=list`, `--format=json`
  2. If you need machine-readable output, `pnpm outdated --format=json` is the supported shape
  3. Check `pnpm help outdated` for the current release's accepted values before scripting around it

Example fix

# before
pnpm outdated --format=markdown

# after
pnpm outdated --format=list   # or table / json
Defensive patterns

Strategy: validation

Validate before calling

const OUTDATED_FORMATS = ['table', 'list', 'json'] as const
type OutdatedFormat = typeof OUTDATED_FORMATS[number]

function toOutdatedFormat (value: string | undefined, fallback: OutdatedFormat = 'table'): OutdatedFormat {
  if (value == null) return fallback
  if ((OUTDATED_FORMATS as readonly string[]).includes(value)) return value as OutdatedFormat
  throw new Error(`Unsupported --format '${value}'. Use one of: ${OUTDATED_FORMATS.join(', ')}`)
}

Type guard

function isOutdatedFormat (value: unknown): value is 'table' | 'list' | 'json' {
  return value === 'table' || value === 'list' || value === 'json'
}

Try / catch

catch (err) {
  if (typeof err === 'object' && err !== null && (err as { code?: string }).code === 'BAD_OUTDATED_FORMAT') {
    opts.format = 'table' // safe default
    return runOutdated(opts)
  }
  throw err
}

Prevention

When it happens

Trigger: `pnpm outdated --format=markdown`, `--format=yaml`, a typo like `--format=tabel`, or programmatically calling the outdated handler with a format value outside the 'table' | 'list' | 'json' union.

Common situations: Copy-pasting a `--format` value from another tool (npm audit uses --json, yarn has different names); assuming pnpm outdated supports the same formats as `pnpm list --format` or `pnpm audit`; config drift between pnpm versions adding/removing formats.

Related errors


AI-assisted analysis of pnpm/pnpm@5b11d3a15b (2026-08-16). Data as JSON: /api/errors/d4ee119c89454640. Report an issue: GitHub.