{"record":{"id":"ca7ea11134e163fa","repo":"tailwindlabs/tailwindcss","slug":"error-in-the-config-file-plugin-preset-the-conte","errorCode":null,"errorMessage":"Error in the config file/plugin/preset. The `content` key contains a `raw` entry:\n\n${JSON.stringify(file, null, 2)}\n\nThis feature is not currently supported.","messagePattern":"Error in the config file/plugin/preset\\. The `content` key contains a `raw` entry:\n\n(.+?)\n\nThis feature is not currently supported\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/tailwindcss/src/compat/apply-compat-hooks.ts","lineNumber":413,"sourceCode":"\n      let ctx = cssContext(_ctx)\n\n      // The AST node was already manually wrapped so there's nothing to do\n      if (ctx.parent?.kind === 'rule' && ctx.parent.selector === wrappingSelector) {\n        return WalkAction.Stop\n      }\n\n      return WalkAction.ReplaceStop(styleRule(wrappingSelector, [node]))\n    })\n  }\n\n  for (let candidate of resolvedConfig.blocklist) {\n    designSystem.invalidCandidates.add(candidate)\n  }\n\n  for (let file of resolvedConfig.content.files) {\n    if ('raw' in file) {\n      throw new Error(\n        `Error in the config file/plugin/preset. The \\`content\\` key contains a \\`raw\\` entry:\\n\\n${JSON.stringify(file, null, 2)}\\n\\nThis feature is not currently supported.`,\n      )\n    }\n\n    let negated = false\n    if (file.pattern[0] == '!') {\n      negated = true\n      file.pattern = file.pattern.slice(1)\n    }\n    sources.push({ ...file, negated })\n  }\n  return features\n}\n","sourceCodeStart":395,"sourceCodeEnd":427,"githubUrl":"https://github.com/tailwindlabs/tailwindcss/blob/16e94cbf7f965c5ad697e90e940b5e178efad67c/packages/tailwindcss/src/compat/apply-compat-hooks.ts#L395-L427","documentation":"Thrown while importing `content.files` from a resolved JS config into the v4 source pipeline. The v4 design system scans filesystem globs, so `content.raw` entries (inline content strings) from v3 are unsupported. The offending entry is JSON-stringified so the user can locate it.","triggerScenarios":"A v3 config with `content: { files: [...], raw: [{ content: '<div class=\"p-4\">' }] }` loaded via `@config` or a JS plugin. The loop hits `'raw' in file` and rejects it.","commonSituations":"Migrating a v3 config verbatim; plugin/preset that injects raw content entries; tooling that programmatically builds content arrays with raw blobs.","solutions":["Remove the `raw` entries from `content` in your config; rely on glob patterns (`content: ['./src/**/*.{html,js}']`).","If you need inline content scanning, write the markup to a temporary file and add its path to `content.files`.","Switch fully to the v4 CSS-first config and drop the JS `content` key."],"exampleFix":"// before (tailwind.config.js)\nmodule.exports = {\n  content: {\n    files: ['./src/**/*.html'],\n    raw: [{ content: '<div class=\"p-4\"></div>' }],\n  },\n}\n// after\nmodule.exports = {\n  content: ['./src/**/*.html'],\n}","handlingStrategy":"validation","validationCode":"function assertNoRawContent(config) {\n  for (const f of config.content?.files ?? []) {\n    if (typeof f === 'object' && 'raw' in f) {\n      throw new Error('content.raw is unsupported in v4');\n    }\n  }\n}\n// assertNoRawContent(resolvedConfig);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["During v3→v4 migration, scan configs for `content.raw` and convert to glob patterns.","Avoid programmatic injection of raw content entries."],"tags":["tailwind","content","config","v3-migration"],"backgroundTag":null,"analyzedSha":"16e94cbf7f965c5ad697e90e940b5e178efad67c","analyzedAt":"2026-08-12T06:02:42.469Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}