actualbudget/actual · error · Error

Failed to fetch font file "${ref.cleanPath}" from ${fontUrl}

Error message

Failed to fetch font file "${ref.cleanPath}" from ${fontUrl}: ${response.status} ${response.statusText}

What it means

Error "Failed to fetch font file "${ref.cleanPath}" from ${fontUrl}: ${response.status} ${response.statusText}" thrown in actualbudget/actual.

Source

Thrown at packages/desktop-client/src/style/customThemes.ts:607

    offset = closeBrace + 1;
    searchCss = searchCss.substring(offset);
  }

  if (fontRefs.length === 0) return css;

  // Fetch fonts sequentially to enforce a running total size budget
  const fetched: { ref: FontRef; dataUri: string }[] = [];
  let totalBytes = 0;
  for (const ref of fontRefs) {
    const fontUrl = baseUrl + ref.cleanPath;
    const perFontTimeout = AbortSignal.timeout(FONT_FETCH_TIMEOUT_MS);
    const fetchSignal = signal
      ? AbortSignal.any([signal, perFontTimeout])
      : perFontTimeout;
    const response = await fetch(fontUrl, { signal: fetchSignal });
    if (!response.ok) {
      throw new Error(
        `Failed to fetch font file "${ref.cleanPath}" from ${fontUrl}: ${response.status} ${response.statusText}`,
      );
    }
    const buffer = await response.arrayBuffer();
    if (buffer.byteLength > MAX_FONT_FILE_SIZE) {
      throw new Error(
        `Font file "${ref.cleanPath}" exceeds maximum size of ${MAX_FONT_FILE_SIZE / 1024 / 1024}MB.`,
      );
    }
    totalBytes += buffer.byteLength;
    if (totalBytes > MAX_TOTAL_FONT_SIZE) {
      throw new Error(
        `Total embedded font data exceeds maximum of ${MAX_TOTAL_FONT_SIZE / 1024 / 1024}MB.`,
      );
    }
    const base64 = arrayBufferToBase64(buffer);
    fetched.push({ ref, dataUri: `data:${ref.mime};base64,${base64}` });
  }

View on GitHub (pinned to d4334cb6e6)

When it happens

Trigger: Thrown at packages/desktop-client/src/style/customThemes.ts:607 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of actualbudget/actual@d4334cb6e6 (2026-08-29). Data as JSON: /api/errors/91ff90b9f2c57ce9. Report an issue: GitHub.