actualbudget/actual · error · Error

Font file "${ref.cleanPath}" exceeds maximum size of ${MAX_F

Error message

Font file "${ref.cleanPath}" exceeds maximum size of ${MAX_FONT_FILE_SIZE / 1024 / 1024}MB.

What it means

Error "Font file "${ref.cleanPath}" exceeds maximum size of ${MAX_FONT_FILE_SIZE / 1024 / 1024}MB." thrown in actualbudget/actual.

Source

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

  // 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}` });
  }

  // Replace each url() reference with its data: URI
  let result = css;
  for (const { ref, dataUri } of fetched) {
    const q = ref.quote || "'";
    result = result.replace(ref.fullMatch, `url(${q}${dataUri}${q})`);

View on GitHub (pinned to d4334cb6e6)

When it happens

Trigger: Thrown at packages/desktop-client/src/style/customThemes.ts:613 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/080a8ae2c1060870. Report an issue: GitHub.