🌼 🌼 🌼 🌼 🌼 The most popular, free and open-source Tailwind CSS component library
This report summarizes scanner evidence for saadeghi/daisyui, a JavaScript project with 42,711 GitHub stars. SynthScan examined 203,521 lines of code across 1010 source files, recording 92 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 0.8 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 87 finding(s).
Are imports declared and package/API names verified? 5 finding(s).
Are wrappers, guards, and repeated structures necessary? 13 finding(s).
Which changes need focused human review? 92 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 92 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …es/docs/src/lib/scripts/missingClassnamePrefix.test.js | 28 | // Step 1: Find all class.json files and extract class names | COMMENT |
| LOW⚡ | …es/docs/src/lib/scripts/missingClassnamePrefix.test.js | 38 | // Step 2: Find all .md files and extract HTML/JSX code blocks | COMMENT |
| LOW | …es/docs/src/lib/scripts/missingClassnamePrefix.test.js | 51 | // Step 3: Check if class names in classList are prefixed with $$ in class or className attributes | COMMENT |
| LOW | …keting)/(groups)/claude-code/how-to-design-ui/+page.md | 14 | ## Step 1: write a product brief | COMMENT |
| LOW | …keting)/(groups)/claude-code/how-to-design-ui/+page.md | 18 | ## Step 2: add daisyUI context | COMMENT |
| LOW | …keting)/(groups)/claude-code/how-to-design-ui/+page.md | 34 | ## Step 3: prompt with components | COMMENT |
| LOW | …ages/docs/src/routes/(routes)/blueprint/cline/+page.md | 13 | ### Step 1: License key | COMMENT |
| LOW | …ages/docs/src/routes/(routes)/blueprint/cline/+page.md | 17 | ### Step 2: Configure MCP settings | COMMENT |
| LOW | …ckages/docs/src/routes/(routes)/blueprint/zed/+page.md | 13 | ### Step 1: License key | COMMENT |
| LOW | …ckages/docs/src/routes/(routes)/blueprint/zed/+page.md | 17 | ### Step 2: Configure MCP settings | COMMENT |
| LOW | …s/docs/src/routes/(routes)/blueprint/openclaw/+page.md | 13 | ### Step 1: License key | COMMENT |
| LOW | …s/docs/src/routes/(routes)/blueprint/openclaw/+page.md | 17 | ### Step 2: Configure MCP settings | COMMENT |
| LOW | …ges/docs/src/routes/(routes)/blueprint/cursor/+page.md | 13 | ### Step 1: License key | COMMENT |
| LOW | …ges/docs/src/routes/(routes)/blueprint/cursor/+page.md | 17 | ### Step 2: Configure MCP settings | COMMENT |
| LOW | …docs/src/routes/(routes)/blueprint/claudecode/+page.md | 13 | ### Step 1: License key | COMMENT |
| LOW | …docs/src/routes/(routes)/blueprint/claudecode/+page.md | 17 | ### Step 2: Configure MCP settings | COMMENT |
| LOW | …ges/docs/src/routes/(routes)/blueprint/claude/+page.md | 13 | ### Step 1: License key | COMMENT |
| LOW | …ges/docs/src/routes/(routes)/blueprint/claude/+page.md | 17 | ### Step 2: Configure MCP settings | COMMENT |
| LOW⚡ | …ages/docs/src/routes/(routes)/blueprint/codex/+page.md | 13 | ### Step 1: License key | COMMENT |
| LOW⚡ | …ages/docs/src/routes/(routes)/blueprint/codex/+page.md | 17 | ### Step 2: Install Codex CLI | COMMENT |
| LOW⚡ | …ages/docs/src/routes/(routes)/blueprint/codex/+page.md | 25 | ### Step 3: Configure MCP settings | COMMENT |
| LOW | …kages/docs/src/routes/(routes)/blueprint/grok/+page.md | 11 | ### Step 1: License key | COMMENT |
| LOW | …kages/docs/src/routes/(routes)/blueprint/grok/+page.md | 15 | ### Step 2: Configure MCP settings | COMMENT |
| LOW | …ages/docs/src/routes/(routes)/blueprint/figma/+page.md | 25 | ### Step 1: Get a Figma Access Token | COMMENT |
| LOW | …ages/docs/src/routes/(routes)/blueprint/figma/+page.md | 38 | ### Step 2: Add the token to Blueprint MCP | COMMENT |
| LOW | …ages/docs/src/routes/(routes)/blueprint/figma/+page.md | 54 | ### Step 3: Copy a Figma selection link | COMMENT |
| LOW | …ages/docs/src/routes/(routes)/blueprint/figma/+page.md | 58 | ### Step 4: Ask your editor to generate daisyUI code | COMMENT |
| LOW | …s/docs/src/routes/(routes)/blueprint/windsurf/+page.md | 13 | ### Step 1: License key | COMMENT |
| LOW | …s/docs/src/routes/(routes)/blueprint/windsurf/+page.md | 17 | ### Step 2: Configure MCP settings | COMMENT |
| LOW | …ocs/src/routes/(routes)/blueprint/antigravity/+page.md | 13 | ### Step 1: License key | COMMENT |
| LOW | …ocs/src/routes/(routes)/blueprint/antigravity/+page.md | 17 | ### Step 2: Configure MCP settings | COMMENT |
| LOW | …ges/docs/src/routes/(routes)/blueprint/vscode/+page.md | 13 | ### Step 1: License key | COMMENT |
| LOW | …ges/docs/src/routes/(routes)/blueprint/vscode/+page.md | 17 | ### Step 2: Configure MCP settings | COMMENT |
| LOW⚡ | …s/docs/src/routes/(routes)/blueprint/opencode/+page.md | 13 | ### Step 1: License key | COMMENT |
| LOW⚡ | …s/docs/src/routes/(routes)/blueprint/opencode/+page.md | 17 | ### Step 2: Install OpenCode CLI | COMMENT |
| LOW⚡ | …s/docs/src/routes/(routes)/blueprint/opencode/+page.md | 25 | ### Step 3: Configure MCP settings | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/docs/src/translation/ms.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Di sini kami m | CODE |
| MEDIUM | packages/docs/src/translation/id.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Di sini kita m | CODE |
| MEDIUM | packages/docs/src/translation/ro.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Aici folosim i | CODE |
| MEDIUM | packages/docs/src/translation/hu.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Itt a `--no-ec | CODE |
| MEDIUM | packages/docs/src/translation/ja.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "ここでは、デモンストレーショ | CODE |
| MEDIUM | packages/docs/src/translation/es.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Aquí estamos u | CODE |
| MEDIUM | packages/docs/src/translation/tr.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Burada sadece | CODE |
| MEDIUM | packages/docs/src/translation/de.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Hier verwenden | CODE |
| MEDIUM | packages/docs/src/translation/el.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Εδώ χρησιμοποι | CODE |
| MEDIUM | packages/docs/src/translation/ko.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "여기서는 데모 목적으로 ` | CODE |
| LOW | packages/docs/src/translation/en.other.json | 117 | "If you're using a custom theme make sure you're using <a href=\"https://daisyui.com/docs/themes/#how-to-add-a-new-cus | CODE |
| MEDIUM | packages/docs/src/translation/ru.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Здесь мы испол | CODE |
| MEDIUM | packages/docs/src/translation/pt.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Aqui estamos u | CODE |
| MEDIUM | packages/docs/src/translation/fr.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Ici, nous util | CODE |
| MEDIUM | packages/docs/src/translation/pl.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Tutaj używamy | CODE |
| MEDIUM | packages/docs/src/translation/ur.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "یہاں ہم صرف مظ | CODE |
| MEDIUM | packages/docs/src/translation/ca.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Aquí estem uti | CODE |
| MEDIUM | packages/docs/src/translation/bn.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "এখানে আমরা শুধ | CODE |
| MEDIUM | packages/docs/src/translation/vi.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Ở đây chúng tô | CODE |
| MEDIUM | packages/docs/src/translation/fa.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "در اینجا ما از | CODE |
| MEDIUM | packages/docs/src/translation/zh_hant.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "這裡我們使用「`--no-e | CODE |
| MEDIUM | packages/docs/src/translation/uk.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Тут ми викорис | CODE |
| MEDIUM | packages/docs/src/translation/zh_hans.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "这里我们使用`--no-ec | CODE |
| LOW | packages/docs/src/translation/en.docs.json | 542 | "If you're using a custom theme make sure you're using [all the required CSS variables](https://daisyui.com/docs/theme | CODE |
| MEDIUM | packages/docs/src/translation/en.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Here we are us | CODE |
| LOW | packages/docs/src/translation/en.docs.json | 1226 | "If you're using a custom theme make sure you're using <a href=\"https://daisyui.com/docs/themes/#how-to-add-a-new-cus | CODE |
| MEDIUM | packages/docs/src/translation/ar.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "نحن هنا نستخدم | CODE |
| MEDIUM | packages/docs/src/translation/he.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "כאן אנו משתמשי | CODE |
| MEDIUM | packages/docs/src/translation/it.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Qui utilizziam | CODE |
| MEDIUM | packages/docs/src/translation/cs.docs.json | 669 | "Here we are using the `--no-ecto` flag to skip the database setup, just for demonstration purposes.": "Zde používáme | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …es/docs/src/routes/(routes)/components/drawer/+page.md | 221 | #### In this example instead of completely hiding the drawer sidebar, we only show the icons when the drawer is closed. | COMMENT |
| HIGH | …kages/docs/src/routes/(routes)/components/otp/+page.md | 50 | #### Make sure the number of spans matches the maxlength and the pattern of the input field. In this example, we have 4 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/daisyui/functions/generateRawStyles.js | 59 | export async function generateResponsiveVariants(css) { | CODE |
| LOW | packages/docs/src/lib/discountCountdown.js | 15 | export function getDiscountCountdownRemaining(expiresAt, now = Date.now()) { | CODE |
| LOW | packages/docs/src/lib/storeDiscount.js | 66 | export function isDiscountApplicableToProduct(discount, productIds) { | CODE |
| LOW | packages/docs/src/lib/storeDiscount.js | 72 | export function isDiscountApplicableToBlueprint(discount) { | CODE |
| LOW | packages/docs/src/lib/server/content/comparisonData.js | 107 | export function getAlternativeRouteEntries(manifest) { | CODE |
| LOW | packages/docs/src/lib/server/content/comparisonData.js | 113 | export function getAlternativeLibraryKeys(manifest) { | CODE |
| LOW | packages/docs/src/lib/server/content/comparisons.js | 28 | export async function getAlternativeRouteEntries() { | CODE |
| LOW | packages/docs/src/lib/server/content/frameworkData.js | 49 | export function projectMarketingFrameworkRouteData(frameworks, testimonials, pathname) { | CODE |
| LOW | packages/docs/src/lib/server/content/frameworks.js | 40 | export async function getMarketingFrameworkRouteData(pathname) { | CODE |
| LOW | …/docs/src/routes/(routes)/theme-generator/+page.svelte | 281 | function handleColorModalStateChange(isOpen) { | CODE |
| LOW | packages/docs/src/routes/llms.txt/+server.js | 92 | function transformFrontmatterLines(lines) { | CODE |
| LOW | packages/docs/src/routes/search.csv/+server.js | 106 | function getMarkdownFilesFromModules() { | CODE |
| LOW | packages/docs/src/routes/search.csv/+server.js | 153 | function getMarkdownFilesFromFileSystem(routesDir) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …es/docs/src/lib/scripts/missingClassnamePrefix.test.js | 28 | // Step 1: Find all class.json files and extract class names | COMMENT |
| LOW⚡ | …es/docs/src/lib/scripts/missingClassnamePrefix.test.js | 38 | // Step 2: Find all .md files and extract HTML/JSX code blocks | COMMENT |
| LOW | …es/docs/src/lib/scripts/missingClassnamePrefix.test.js | 51 | // Step 3: Check if class names in classList are prefixed with $$ in class or className attributes | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/daisyui/build.js | 80 | // "placeholder", | COMMENT |
| LOW | …o-make-a-blog-quickly-using-astro-and-daisyUI/+page.md | 141 | description: Lorem ipsum dolor sit, amet consectetur adipisicing elit. Hic eos odit sequi minima iure natus, odio tempor | CODE |
| LOW | …/src/routes/(routes)/components/button/design/+page.md | 61 | Lorem ipsum dolor, sit amet consectetur adipisicing elit. Veniam, a ex perferendis ipsam quos | CODE |
| LOW | …/src/routes/(routes)/components/button/design/+page.md | 88 | Lorem ipsum dolor, sit amet consectetur adipisicing elit. Veniam, a ex perferendis ipsam quos | CODE |
| LOW | …/src/routes/(routes)/components/button/design/+page.md | 125 | Lorem ipsum dolor, sit amet consectetur adipisicing elit. Veniam, a ex perferendis ipsam quos | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ckages/docs/src/routes/(routes)/blueprint/+page.svelte | 2022 | {#each ["The most mediocre layout", "Boring, inauthentic color palette", "Looks like every other AI-generate | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ting)/(groups)/tailwind-css/ai-code-generator/+page.md | 12 | ## An AI Tailwind code generator needs guardrails | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/docs/src/routes/(routes)/+page.svelte | 121 | // $effect(async () => { | COMMENT |