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
-
Are extension tiles fully supported in dashboard PDF export workflows?
-
Is there a known issue with extension iframe lifecycle during export?
-
Why is
extensionSDK.rendered()not sufficient in this context? -
Why is the extension being unloaded before render completion?
-
Is the
lookerHostData.isRenderingflag 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>
)
}