{"record":{"id":"b0cee96fa3a254b7","repo":"vercel/next.js","slug":"invalid-devindicator-position-provided-expected","errorCode":null,"errorMessage":"Invalid \"devIndicator.position\" provided, expected one of ${allowedValues.join(', ')}, received ${position}","messagePattern":"Invalid \"devIndicator\\.position\" provided, expected one of (.+?), received (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/next/src/server/config.ts","lineNumber":1367,"sourceCode":"      localeDetectionType !== 'undefined'\n    ) {\n      throw new Error(\n        `Specified i18n.localeDetection should be undefined or a boolean received ${localeDetectionType}.\\nSee more info here: https://nextjs.org/docs/messages/invalid-i18n-config`\n      )\n    }\n  }\n\n  if (result.devIndicators !== false && result.devIndicators?.position) {\n    const { position } = result.devIndicators\n    const allowedValues = [\n      'top-left',\n      'top-right',\n      'bottom-left',\n      'bottom-right',\n    ]\n\n    if (!allowedValues.includes(position)) {\n      throw new Error(\n        `Invalid \"devIndicator.position\" provided, expected one of ${allowedValues.join(\n          ', '\n        )}, received ${position}`\n      )\n    }\n  }\n\n  result.expireTime = normalizeInfiniteDuration(result.expireTime, 'expireTime')\n  const staleTimes = result.experimental.staleTimes\n  if (staleTimes) {\n    staleTimes.dynamic = normalizeInfiniteDuration(\n      staleTimes.dynamic,\n      'experimental.staleTimes.dynamic'\n    )\n    staleTimes.static = normalizeInfiniteDuration(\n      staleTimes.static,\n      'experimental.staleTimes.static'\n    )","sourceCodeStart":1349,"sourceCodeEnd":1385,"githubUrl":"https://github.com/vercel/next.js/blob/0ae8c72462952df163f1b1e0726641bc5b40dc93/packages/next/src/server/config.ts#L1349-L1385","documentation":"Thrown at config.ts:1366 during devIndicators normalization when `devIndicators.position` is set to a value not in `['top-left','top-right','bottom-left','bottom-right']`. This only runs when `devIndicators !== false` and a `position` is provided.","triggerScenarios":"`devIndicators: { position: 'topRight' }` (camelCase); `devIndicators: { position: 'top' }`; `devIndicators: { position: 'center' }`; typos like `'bottomleft'`.","commonSituations":"Using camelCase instead of kebab-case; copying an outdated example; older Next versions accepted different position strings.","solutions":["Use one of the four exact kebab-case values: 'top-left', 'top-right', 'bottom-left', 'bottom-right'.","To disable the dev indicator entirely, set `devIndicators: false`."],"exampleFix":"// before\nmodule.exports = { devIndicators: { position: 'topRight' } }\n// after\nmodule.exports = { devIndicators: { position: 'top-right' } }","handlingStrategy":"validation","validationCode":"const allowed = ['top-left','top-right','bottom-left','bottom-right'];\nif (devIndicators?.position && !allowed.includes(devIndicators.position)) {\n  throw new Error('invalid devIndicators.position');\n}","typeGuard":"function isValidPosition(p: unknown): p is 'top-left'|'top-right'|'bottom-left'|'bottom-right' {\n  return typeof p === 'string' && ['top-left','top-right','bottom-left','bottom-right'].includes(p);\n}","tryCatchPattern":null,"preventionTips":["Use kebab-case positions only.","Set `devIndicators: false` to disable rather than passing an invalid position."],"tags":["config","dev-indicators","validation"],"analyzedSha":"0ae8c72462952df163f1b1e0726641bc5b40dc93","analyzedAt":"2026-08-06T19:44:29.143Z","schemaVersion":2},"datasetVersion":"2026-08-07T02:17:10.218Z"}