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
- Use one of: `--format=table`, `--format=list`, `--format=json`
- If you need machine-readable output, `pnpm outdated --format=json` is the supported shape
- 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
- Constrain format to a literal-union type at the option-parsing boundary
- Do not pass through raw CLI strings as format values; normalize first
- Parse --format=json output in CI — it is the only stable machine-readable contract
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.