saadeghi/daisyui · error · Error

Timed out waiting for ${label}${lastValue ? `: ${JSON.string

Error message

Timed out waiting for ${label}${lastValue ? `: ${JSON.stringify(lastValue)}` : ""}

What it means

Thrown by waitForPageValue when its polling loop reached the deadline without the page-side expression ever returning a truthy value. The label identifies what was being waited for (e.g. "the Tailwind Play editor", "Tailwind Play to load"); lastValue, if any, is included as JSON.

Source

Thrown at packages/tailwind-play-share/index.mjs:458

      response.exceptionDetails.text ??
      "Unknown page evaluation error"
    throw new Error(description)
  }

  return response.result?.value
}

async function waitForPageValue(client, expression, timeoutMs, label) {
  const deadline = Date.now() + timeoutMs
  let lastValue

  while (Date.now() < deadline) {
    lastValue = await evaluate(client, expression)
    if (lastValue) return lastValue
    await delay(100)
  }

  throw new Error(
    `Timed out waiting for ${label}${lastValue ? `: ${JSON.stringify(lastValue)}` : ""}`,
  )
}

const clipboardCaptureScript = String.raw`
(() => {
  const remember = (value) => {
    if (value !== undefined && value !== null) {
      globalThis.__tailwindPlaySharedUrl = String(value);
    }
  };

  try {
    const clipboard = navigator.clipboard;
    const prototype = clipboard && Object.getPrototypeOf(clipboard);
    const originalWriteText = prototype?.writeText;
    if (typeof originalWriteText === "function") {
      Object.defineProperty(prototype, "writeText", {

View on GitHub (pinned to 42b09e637e)

Solutions

  1. Increase --timeout (e.g. --timeout 90000) to give the page more time to load and mount its editor.
  2. Run with --headed locally to see whether the page is actually loading.
  3. Check network connectivity to https://play.tailwindcss.com/ from the host.
  4. Retry in CI; cold-cache loads are the usual culprit.

Example fix

// before
const url = await createTailwindPlay({ html, css, timeoutMs: 45000 })

// after
const url = await createTailwindPlay({ html, css, timeoutMs: 120000 })
Defensive patterns

Strategy: retry

Validate before calling

// Validate timeout is generous enough for a cold Tailwind Play load.
function adequateTimeout(timeoutMs) {
  return Number.isFinite(timeoutMs) && timeoutMs >= 30000
}

Try / catch

try {
  url = await createTailwindPlay({ ...inputs, timeoutMs: 90000 })
} catch (error) {
  if (error.message.startsWith("Timed out waiting for ")) {
  // network/load slowness; retry with a higher timeout
  }
  throw error
}

Prevention

When it happens

Trigger: Called from waitForEditor or the document.readyState/initialUrl waits inside createTailwindPlay. Each 100ms tick calls evaluate(); if no tick returns a truthy value before Date.now() exceeds deadline (now + timeoutMs), it throws.

Common situations: Slow machine or network so Tailwind Play has not finished bootstrapping Monaco within timeoutMs, Tailwind Play is blocked/down, the browser is resource-starved in CI, or timeoutMs was set too low.

Understand the failure class

Related errors


AI-assisted analysis of saadeghi/daisyui@42b09e637e (2026-08-13). Data as JSON: /api/errors/100f5ac89cbe1061. Report an issue: GitHub.