Dashboard PDF Export Stuck on “Queued for rendering” When Extension Tile Is Present (Extension Unloaded After rendered())

Description

We are encountering an issue where a Looker dashboard fails to export to PDF when a custom Extension Framework tile is present.

The export process opens the rendering page but remains indefinitely at:

“Queued for rendering”

If we remove the extension tile from the dashboard, the export completes successfully.


What We Built

We created a custom extension tile (React + Extension SDK) that:

  • Reads dashboard context (filters, user, dashboard ID, etc.)

  • Displays a summary (originally dynamic, but now simplified for testing)


Key Findings

We performed extensive isolation testing and observed the following:

1. Issue persists with minimal static tile

We reduced the tile to a minimal implementation:

  • No backend calls

  • No async logic

  • Static <div> content only

  • Calls extensionSDK.rendered()

Even in this minimal state, export still hangs.


2. rendered() is being called

We confirmed via console logs that:

[RENDER] calling rendered() now

However, immediately after:

Extension is being unloaded

3. Tile is unloaded during export

The extension appears to be torn down during the export process before the renderer completes.

This suggests the renderer is not maintaining the extension iframe lifecycle correctly.


4. Export works when tile is removed

If we remove the extension tile:

  • Export completes normally

  • No hanging occurs


5. Frame / origin error observed

We also see this browser error during export:

Unsafe attempt to load URL ...
Domains, protocols and ports must match.

This appears related to the extension loader / iframe communication during export.


6. lookerHostData.isRendering is always false

We attempted to detect export mode using:

const isRendering = lookerHostData?.isRendering

However, this value remains false even during export.


Expected Behavior

  • Extension tile should render successfully in export context

  • extensionSDK.rendered() should allow the renderer to complete

  • Dashboard PDF should generate normally


Actual Behavior

  • Extension tile is unloaded during export

  • Renderer never completes

  • Export remains stuck at “Queued for rendering”


Environment

  • Looker instance: [Cloud-hosted / Customer-hosted — specify]

  • Extension SDK: ^25.x

  • React-based extension using ExtensionProvider40

  • Tile mounted via:

    • dashboard_tile: yes

    • (also tested with dashboard_vis)


Questions

  1. Are extension tiles fully supported in dashboard PDF export workflows?

  2. Is there a known issue with extension iframe lifecycle during export?

  3. Why is extensionSDK.rendered() not sufficient in this context?

  4. Why is the extension being unloaded before render completion?

  5. Is the lookerHostData.isRendering flag expected to work during export?


Summary

We have ruled out:

  • backend/API latency

  • async rendering logic

  • missing rendered() calls

  • dashboard settings

The evidence suggests a Looker extension tile export/runtime lifecycle issue, where the extension iframe is unloaded before the renderer acknowledges completion. We can easily reproduce the issue using the minimal script like below:

import React, { useEffect, useContext } from "react"
import { ExtensionProvider40, ExtensionContext40 } from "@looker/extension-sdk-react"
function Tile() {
  const { extensionSDK } = useContext(ExtensionContext40)

  useEffect(() => {

    const t = setTimeout(() => {

      console.log("[MINIMAL] rendered()")

      extensionSDK?.rendered?.()

    }, 500)

    return () => clearTimeout(t)

  }, [extensionSDK])

  return <div style={{ padding: 16 }}>Test summary</div>

}




export default function App() {

  return (

    <ExtensionProvider40>

      <Tile />

    </ExtensionProvider40>

  )

}
2 Likes