Hi everyone,
I'm building a custom (private, unlisted) Power-Up for internal use on my company's Trello Workspace, and I've run into a bug where the Power-Up's connector iframe never loads in the Trello web client, despite everything being correctly configured on the server side. Since Atlassian support isn't available for Free-plan accounts, I'm hoping someone here — ideally someone who's worked on Power-Up development, or from the Trello team who monitors this forum — has seen this before or can point me in the right direction.
Account and environment
Summary
A custom Power-Up, correctly registered and enabled on a board, never has its connector iframe loaded by the Trello web client — no network request to the connector URL is ever made, no iframe element is created in the DOM, and none of its registered capabilities (card-badges, card-buttons, card-back-section) ever render. This happens with zero JavaScript errors, on two completely independent, freshly-created Power-Up registrations. By contrast, an official "Made by Trello" Power-Up ("Card Aging") added to the exact same board in the same browser session renders and works immediately with no configuration beyond clicking "Add."
Steps to reproduce
Expected: the connector iframe loads, and card-badges/card-buttons/card-back-section render according to the registered capabilities.
Actual: nothing renders at all. No entry appears in the card's "Power-ups" tray. Zero network requests to the connector URL (confirmed via DevTools Network panel, filtered by the connector's domain — completely absent, not even a failed/blocked entry). Zero iframe elements matching the connector URL anywhere in the DOM (checked via a querySelectorAll scan for iframes at both board view and card-detail view). The browser console repeatedly logs a warning from Trello's own ltp.[hash].js asset file:
"board plugins are undefined"
This warning fires 4 times on board load and 4 more times on every card open, consistently, in every test.
What I've ruled out
Control test proving this is specific to custom Power-Ups
I added the official "Made by Trello" Power-Up "Card Aging" to the same test board, in the same browser session, immediately after failing to get our custom Power-Up to load. Card Aging rendered correctly and instantly (its "Last updated" badge appeared on the card) with zero configuration beyond clicking "Add." This isolates the failure specifically to custom/private Power-Ups — the board, account, and browser session are otherwise fully capable of loading and rendering Power-Up UI without any issue.
Net result: the one variable that consistently correlates with the failure, after ruling out everything else through direct testing, is "custom/private Power-Up" versus "official Made-by-Trello Power-Up."
Evidence available on request
I have a sanitized HAR export (cookies/auth stripped) captured from a fresh page load of a card on the test board, showing the full set of network requests the Trello client makes on card open — notably, no request to our connector domain appears anywhere in it, which is the core of the bug. I haven't attached it here, but I'm happy to send it directly to anyone looking into this, or share a link separately.
Question for the community
Has anyone run into a Power-Up's boardPlugins entry being visible via direct REST API calls but never surfaced to the web client's plugin-loading logic — i.e. the "board plugins are undefined" console warning? Is there some additional registration step or account-level flag for custom Power-Ups on Free-plan Workspaces that I might be missing? Any pointers — even "check X" — would be a huge help at this point, since I've exhausted everything I can test from the outside.
Thanks!
Villy
Hi @Villy, that warning isn't coming from your Power-Up. "board plugins are undefined" appears zero times in power-up.js and zero times in power-up.min.js. It ships inside Trello's own BoardHeaderButlerButtonsModernized component as the value of an error field the hook hands to console.warn, and what sets it is the board's plugins collection reading as undefined in the client's own state. So it's the client telling you it has no board plugins, which is your symptom rather than a second fault.
One aside on that: your console attributed the line to ltp, and the string isn't in today's ltp build at all, so the frame has moved between deploys.
The part that answers your actual question sits next to it. The loader doesn't read the REST boardPlugins collection you verified. Plugins/loadPlugin.ts fires a GraphQL query called BoardEnabledPlugins against board plugins(filter: enabled), cache-first, selecting id, capabilities, iframeConnectorUrl, listing, moderatedState, public, idOrganizationOwner, name and icon. When your id isn't resolvable after that query it throws "plugin not available to board". Grep your console for that. The board field carries an @client directive, so it resolves out of the Apollo cache and there'll be no network request named BoardEnabledPlugins to find.
Then look at moderatedState in that selection. Atlassian stripped it from the REST plugin response in 2019, in their words "The following fields have been removed: apiKey, author, idAgreement, moderatedState, privacyUrl, supportEmail, tags, usageBrackets", so the loader reads a field your REST checks could not have shown you. The Power-Up security page says "A moderated Power-Up will remain enabled on all boards on which it is enabled, but it will never be initialized." That's your symptom in Atlassian's own sentence. I doubt a brand-new idPlugin inherits a flag like that, so treat it as the state to have someone read for you, not as a diagnosis.
Your read on support is half right. The Trello product portal is subscription-only, "Only Trello users with an active subscription can submit support tickets". The developer desk is separate and Trello's own dev docs point at it, go.trello.com/dev-support, landing on developer.atlassian.com/support. Its entitlement row names no plan, only "Partners and developers looking to extend the functionality of Atlassian apps". In July a developer hit a Trello-wide Power-Up iframe regression, got no forum reply, raised ECOHELP-148080 as a P1, and Trello confirmed and fixed it. I haven't tried that desk from a Free workspace with an unlisted app, and the packaging line does read "a valid customer license or any tier of the Marketplace Partner Program", so that's where I'd expect friction. Send them the HAR.
Atlassian's Power-Up guide will send you to the developer community, and I'd not lean on it. Of the 18 Trello topics opened there during 2026, 14 still have no reply of any kind, and I didn't find an Atlassian staff reply on any of them. Topic 99226 is the closest to your shape, a required Trello script asset for which no request is ever made, and it got nothing.
Thanks for digging into this — really useful breakdown of how the GraphQL loader and support tiers work.
Good news: we actually found the root cause independently before seeing this, and it wasn't a Trello-side plugin state issue at all. The connector script URL from Trello's own older docs/examples — p.trello.com/power-up.min.js — turned out to be a dead domain (confirmed via direct nslookup/curl: NXDOMAIN, not blocked, just doesn't exist anymore). The current docs point to p.trellocdn.com/power-up.min.js instead. Our Power-Up was still loading the old URL in a few HTML files, so the client never even fetched the library, which is exactly what produces the generic "board plugins are undefined" warning downstream.
After switching to the new CDN domain (plus fixing two follow-on issues — Power-Up capability responses need absolute URLs, not relative signUrl output, and the show-settings capability needed manually enabling in the Power-Up admin panel, separate from the manifest), everything loads and renders correctly on live boards.
So no need to pursue the developer support desk or the moderatedState theory on our end — but flagging it here in case it helps anyone else who searches this warning later, since apparently no one else has documented this exact symptom-to-cause chain publicly yet.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Villy, thanks for coming back with the cause and not only the fix. That symptom to cause chain isn't written down anywhere I could find either.
One addition for whoever searches this next. Checked from here today, p.trello.com doesn't answer NXDOMAIN: the name still exists in the trello.com zone carrying a single TXT record, v=spf1 -all, and an A lookup comes back NOERROR with zero records. Same answer from 8.8.8.8, 1.1.1.1, 9.9.9.9 and from the authoritative AWS nameserver, so it isn't my resolver being odd. Yours may well have said NXDOMAIN when you tested it. Either way there's no address behind the name, so curl and the browser both report they can't resolve the host, while p.trellocdn.com/power-up.min.js returns 200 from the same machine. That distinction bites: someone who checks with dig, sees NOERROR and reads it as a healthy host will go hunting for the fault somewhere else.
The absolute URL point on t.signUrl is the one I'd expect people to hit straight after.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Follow-up to my earlier post about a custom Power-Up's connector iframe never loading, with the console repeatedly warning "board plugins are undefined." Posting the actual root cause here since I couldn't find this documented anywhere, and I don't want the next person to lose the weeks I did chasing it.
Short version: it wasn't a Trello platform bug, a Free-plan restriction, or anything account/board-specific. It was a dead script URL in my own connector page.
https://p.trello.com/power-up.min.js — the client library URL used in a lot of older examples and tutorials — no longer resolves. A direct nslookup/curl against it returns NXDOMAIN: the domain is gone, not blocked, not slow, not rate-limited. That's why nothing in the Network tab ever showed a request to it — the browser gave up before it could even try loading the connector.
The current, working URL per Atlassian's own docs (developer.atlassian.com/cloud/trello/guides/power-ups/building-a-power-up-part-one/) is:
https://p.trellocdn.com/power-up.min.js
Swap that in every page that loads it (in my case: the connector's index page plus every popup/view HTML file that also pulls in the library), and the client starts actually initializing the Power-Up — the "board plugins are undefined" warning disappears because the board's plugin state stops being undefined once the library that populates it is actually loaded.
1. Capability responses (card-badges, card-buttons, card-back-section icon fields, content.url, and the url passed to t.popup(...)) need absolute URLs. t.signUrl('/path') only returns path + '?signed-token' — no origin prepended — even though the official examples show relative paths. The console just says a generic "Invalid URL detected in Power-Up response" with no field name, so it's easy to miss. Fix: always prepend your own origin, e.g. ORIGIN + t.signUrl('/path').
2. If you add a new capability like show-settings in code, it also has to be manually enabled as a checkbox in the Power-Up's admin panel (trello.com/power-ups/admin) — the admin panel does not read manifest.json to auto-detect newly supported capabilities.
Why this was hard to find
The symptom (a generic client-side warning, zero network requests, zero JS errors) looks exactly like a platform-side registration/permissions problem, which sent me down the path of ruling out privacy-compliance answers, Workspace restrictions, board metadata corruption, CSP headers, etc. — all dead ends, documented in my original post below. A local network/DNS filter blocking the same "p." subdomain pattern also produced a convincing-looking red herring for a while (turned out that domain was dead for everyone, not just blocked locally — worth checking with nslookup against a public resolver like 1.1.1.1 before chasing router/DNS theories). None of that mattered once the actual dead script URL was found — it was a one-line fix in our own HTML, not a Trello issue at all.
Hope this saves someone the same rabbit hole.
Villy
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.