Skip to content

fix(ui): surface silent failures in component renderer - #8379

Merged
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic
May 2, 2026
Merged

fix(ui): surface silent failures in component renderer#8379
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic

Conversation

@jacekradko

Copy link
Copy Markdown
Contributor

Summary

Adds diagnostic coverage to the UI component renderer so silent initialization failures produce actionable errors instead of hanging indefinitely.

  • Catches rejections on the lazy module import in ensureMounted and logs a [Clerk UI] console error with the underlying cause. Currently these rejections disappear because every mount call in clerk-js/src/core/clerk.ts uses void this.#clerkUI.then(...) without a .catch.
  • Starts a 10s timeout alongside the lazy import. If the renderer has not mounted by then, logs a [Clerk UI] warning naming the common causes (failed chunk load, dev-server misconfiguration, pre-hydration mount). Cleared on both success and failure paths.

Covers the full fan-out with a single change in ensureMounted — the ~60 void this.#clerkUI.then(...) call sites in clerk-js all funnel through this one promise, so there is no per-mount-method surface to touch.

Context

Surfaced while debugging a regression where pnpm dev:sandbox loaded but components never rendered — Clerk.loaded === true, #app empty, zero console output. The root cause was an unrelated @rspack/cli bump enabling lazy-compilation, whose proxy chunk never resolved. With these diagnostics in place, the next person to hit a similar class of failure gets a direct signpost.

Test plan

  • Verified fix renders SignIn normally when the renderer mounts successfully (no regression, no spurious logs).
  • Reverted the environmental workaround to reproduce the stalled-mount condition and confirmed the 10s warning fires with the expected message.
  • CI builds and tests pass.

Add a catch on the lazy import chain in `ensureMounted` so
initialization rejections log a `[Clerk UI]` error instead of being
swallowed, and emit a diagnostic warning after 10s if the renderer has
not mounted. Makes stalled chunk loads, unresolved lazy-compilation
proxies, and similar dev-time failures surface with an actionable
message instead of hanging without feedback.
@vercel

vercelBot commented Apr 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentMay 2, 2026 2:32am

Request Review

@changeset-bot

changeset-botBot commented Apr 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1831e6a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
NameType
@clerk/uiPatch
@clerk/chrome-extensionPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 173fd3e2-5e0c-443a-957f-62a82b96e27c

📥 Commits

Reviewing files that changed from the base of the PR and between 7a423d6 and 11ba8b9.

📒 Files selected for processing (2)
  • .changeset/ui-mount-diagnostic.md
  • packages/ui/src/Components.tsx

📝 Walkthrough

Walkthrough

This pull request adds diagnostic improvements to component rendering initialization in the @clerk/ui package. A changeset documents runtime diagnostics for component mounts. The mountComponentRenderer function in packages/ui/src/Components.tsx is updated to include a 10-second timeout mechanism for lazy module imports and component rendering. On timeout or import failure, console errors are logged. Previously, initialization failures could occur silently; these changes convert them to actionable console output through error logging and diagnostic warnings.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately summarizes the main change: surfacing previously silent failures in the component renderer by adding diagnostic logging.
Description check✅ PassedThe description is directly related to the changeset, providing clear context about the diagnostic improvements and failure scenarios being addressed.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@pkg-pr-new

pkg-pr-newBot commented Apr 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@8379

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@8379

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@8379

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@8379

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@8379

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@8379

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@8379

@clerk/express

npm i https://pkg.pr.new/@clerk/express@8379

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@8379

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@8379

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@8379

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@8379

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@8379

@clerk/react

npm i https://pkg.pr.new/@clerk/react@8379

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@8379

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@8379

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@8379

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@8379

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@8379

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@8379

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@8379

commit: 1831e6a

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏼 👍🏼 👍🏼

@jacekradko
jacekradko merged commit 84698b5 into mainMay 2, 2026
43 checks passed
@jacekradko
jacekradko deleted the jacek/ui-mount-diagnostic branch May 2, 2026 03:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jacekradko@wobsoriano
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
fix(ui): surface silent failures in component renderer by jacekradko · Pull Request #8379 · clerk/javascript · GitHub
Skip to content

fix(ui): surface silent failures in component renderer - #8379

Merged
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic
May 2, 2026
Merged

fix(ui): surface silent failures in component renderer#8379
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic

Conversation

@jacekradko

Copy link
Copy Markdown
Contributor

Summary

Adds diagnostic coverage to the UI component renderer so silent initialization failures produce actionable errors instead of hanging indefinitely.

  • Catches rejections on the lazy module import in ensureMounted and logs a [Clerk UI] console error with the underlying cause. Currently these rejections disappear because every mount call in clerk-js/src/core/clerk.ts uses void this.#clerkUI.then(...) without a .catch.
  • Starts a 10s timeout alongside the lazy import. If the renderer has not mounted by then, logs a [Clerk UI] warning naming the common causes (failed chunk load, dev-server misconfiguration, pre-hydration mount). Cleared on both success and failure paths.

Covers the full fan-out with a single change in ensureMounted — the ~60 void this.#clerkUI.then(...) call sites in clerk-js all funnel through this one promise, so there is no per-mount-method surface to touch.

Context

Surfaced while debugging a regression where pnpm dev:sandbox loaded but components never rendered — Clerk.loaded === true, #app empty, zero console output. The root cause was an unrelated @rspack/cli bump enabling lazy-compilation, whose proxy chunk never resolved. With these diagnostics in place, the next person to hit a similar class of failure gets a direct signpost.

Test plan

  • Verified fix renders SignIn normally when the renderer mounts successfully (no regression, no spurious logs).
  • Reverted the environmental workaround to reproduce the stalled-mount condition and confirmed the 10s warning fires with the expected message.
  • CI builds and tests pass.

Add a catch on the lazy import chain in `ensureMounted` so
initialization rejections log a `[Clerk UI]` error instead of being
swallowed, and emit a diagnostic warning after 10s if the renderer has
not mounted. Makes stalled chunk loads, unresolved lazy-compilation
proxies, and similar dev-time failures surface with an actionable
message instead of hanging without feedback.
@vercel

vercelBot commented Apr 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentMay 2, 2026 2:32am

Request Review

@changeset-bot

changeset-botBot commented Apr 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1831e6a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
NameType
@clerk/uiPatch
@clerk/chrome-extensionPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 173fd3e2-5e0c-443a-957f-62a82b96e27c

📥 Commits

Reviewing files that changed from the base of the PR and between 7a423d6 and 11ba8b9.

📒 Files selected for processing (2)
  • .changeset/ui-mount-diagnostic.md
  • packages/ui/src/Components.tsx

📝 Walkthrough

Walkthrough

This pull request adds diagnostic improvements to component rendering initialization in the @clerk/ui package. A changeset documents runtime diagnostics for component mounts. The mountComponentRenderer function in packages/ui/src/Components.tsx is updated to include a 10-second timeout mechanism for lazy module imports and component rendering. On timeout or import failure, console errors are logged. Previously, initialization failures could occur silently; these changes convert them to actionable console output through error logging and diagnostic warnings.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately summarizes the main change: surfacing previously silent failures in the component renderer by adding diagnostic logging.
Description check✅ PassedThe description is directly related to the changeset, providing clear context about the diagnostic improvements and failure scenarios being addressed.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@pkg-pr-new

pkg-pr-newBot commented Apr 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@8379

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@8379

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@8379

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@8379

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@8379

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@8379

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@8379

@clerk/express

npm i https://pkg.pr.new/@clerk/express@8379

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@8379

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@8379

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@8379

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@8379

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@8379

@clerk/react

npm i https://pkg.pr.new/@clerk/react@8379

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@8379

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@8379

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@8379

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@8379

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@8379

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@8379

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@8379

commit: 1831e6a

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏼 👍🏼 👍🏼

@jacekradko
jacekradko merged commit 84698b5 into mainMay 2, 2026
43 checks passed
@jacekradko
jacekradko deleted the jacek/ui-mount-diagnostic branch May 2, 2026 03:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jacekradko@wobsoriano
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(ui): surface silent failures in component renderer by jacekradko · Pull Request #8379 · clerk/javascript · GitHub
Skip to content

fix(ui): surface silent failures in component renderer - #8379

Merged
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic
May 2, 2026
Merged

fix(ui): surface silent failures in component renderer#8379
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic

Conversation

@jacekradko

Copy link
Copy Markdown
Contributor

Summary

Adds diagnostic coverage to the UI component renderer so silent initialization failures produce actionable errors instead of hanging indefinitely.

  • Catches rejections on the lazy module import in ensureMounted and logs a [Clerk UI] console error with the underlying cause. Currently these rejections disappear because every mount call in clerk-js/src/core/clerk.ts uses void this.#clerkUI.then(...) without a .catch.
  • Starts a 10s timeout alongside the lazy import. If the renderer has not mounted by then, logs a [Clerk UI] warning naming the common causes (failed chunk load, dev-server misconfiguration, pre-hydration mount). Cleared on both success and failure paths.

Covers the full fan-out with a single change in ensureMounted — the ~60 void this.#clerkUI.then(...) call sites in clerk-js all funnel through this one promise, so there is no per-mount-method surface to touch.

Context

Surfaced while debugging a regression where pnpm dev:sandbox loaded but components never rendered — Clerk.loaded === true, #app empty, zero console output. The root cause was an unrelated @rspack/cli bump enabling lazy-compilation, whose proxy chunk never resolved. With these diagnostics in place, the next person to hit a similar class of failure gets a direct signpost.

Test plan

  • Verified fix renders SignIn normally when the renderer mounts successfully (no regression, no spurious logs).
  • Reverted the environmental workaround to reproduce the stalled-mount condition and confirmed the 10s warning fires with the expected message.
  • CI builds and tests pass.

Add a catch on the lazy import chain in `ensureMounted` so
initialization rejections log a `[Clerk UI]` error instead of being
swallowed, and emit a diagnostic warning after 10s if the renderer has
not mounted. Makes stalled chunk loads, unresolved lazy-compilation
proxies, and similar dev-time failures surface with an actionable
message instead of hanging without feedback.
@vercel

vercelBot commented Apr 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentMay 2, 2026 2:32am

Request Review

@changeset-bot

changeset-botBot commented Apr 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1831e6a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
NameType
@clerk/uiPatch
@clerk/chrome-extensionPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 173fd3e2-5e0c-443a-957f-62a82b96e27c

📥 Commits

Reviewing files that changed from the base of the PR and between 7a423d6 and 11ba8b9.

📒 Files selected for processing (2)
  • .changeset/ui-mount-diagnostic.md
  • packages/ui/src/Components.tsx

📝 Walkthrough

Walkthrough

This pull request adds diagnostic improvements to component rendering initialization in the @clerk/ui package. A changeset documents runtime diagnostics for component mounts. The mountComponentRenderer function in packages/ui/src/Components.tsx is updated to include a 10-second timeout mechanism for lazy module imports and component rendering. On timeout or import failure, console errors are logged. Previously, initialization failures could occur silently; these changes convert them to actionable console output through error logging and diagnostic warnings.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately summarizes the main change: surfacing previously silent failures in the component renderer by adding diagnostic logging.
Description check✅ PassedThe description is directly related to the changeset, providing clear context about the diagnostic improvements and failure scenarios being addressed.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@pkg-pr-new

pkg-pr-newBot commented Apr 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@8379

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@8379

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@8379

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@8379

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@8379

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@8379

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@8379

@clerk/express

npm i https://pkg.pr.new/@clerk/express@8379

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@8379

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@8379

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@8379

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@8379

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@8379

@clerk/react

npm i https://pkg.pr.new/@clerk/react@8379

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@8379

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@8379

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@8379

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@8379

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@8379

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@8379

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@8379

commit: 1831e6a

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏼 👍🏼 👍🏼

@jacekradko
jacekradko merged commit 84698b5 into mainMay 2, 2026
43 checks passed
@jacekradko
jacekradko deleted the jacek/ui-mount-diagnostic branch May 2, 2026 03:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jacekradko@wobsoriano
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(ui): surface silent failures in component renderer by jacekradko · Pull Request #8379 · clerk/javascript · GitHub
Skip to content

fix(ui): surface silent failures in component renderer - #8379

Merged
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic
May 2, 2026
Merged

fix(ui): surface silent failures in component renderer#8379
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic

Conversation

@jacekradko

Copy link
Copy Markdown
Contributor

Summary

Adds diagnostic coverage to the UI component renderer so silent initialization failures produce actionable errors instead of hanging indefinitely.

  • Catches rejections on the lazy module import in ensureMounted and logs a [Clerk UI] console error with the underlying cause. Currently these rejections disappear because every mount call in clerk-js/src/core/clerk.ts uses void this.#clerkUI.then(...) without a .catch.
  • Starts a 10s timeout alongside the lazy import. If the renderer has not mounted by then, logs a [Clerk UI] warning naming the common causes (failed chunk load, dev-server misconfiguration, pre-hydration mount). Cleared on both success and failure paths.

Covers the full fan-out with a single change in ensureMounted — the ~60 void this.#clerkUI.then(...) call sites in clerk-js all funnel through this one promise, so there is no per-mount-method surface to touch.

Context

Surfaced while debugging a regression where pnpm dev:sandbox loaded but components never rendered — Clerk.loaded === true, #app empty, zero console output. The root cause was an unrelated @rspack/cli bump enabling lazy-compilation, whose proxy chunk never resolved. With these diagnostics in place, the next person to hit a similar class of failure gets a direct signpost.

Test plan

  • Verified fix renders SignIn normally when the renderer mounts successfully (no regression, no spurious logs).
  • Reverted the environmental workaround to reproduce the stalled-mount condition and confirmed the 10s warning fires with the expected message.
  • CI builds and tests pass.

Add a catch on the lazy import chain in `ensureMounted` so
initialization rejections log a `[Clerk UI]` error instead of being
swallowed, and emit a diagnostic warning after 10s if the renderer has
not mounted. Makes stalled chunk loads, unresolved lazy-compilation
proxies, and similar dev-time failures surface with an actionable
message instead of hanging without feedback.
@vercel

vercelBot commented Apr 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentMay 2, 2026 2:32am

Request Review

@changeset-bot

changeset-botBot commented Apr 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1831e6a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
NameType
@clerk/uiPatch
@clerk/chrome-extensionPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 173fd3e2-5e0c-443a-957f-62a82b96e27c

📥 Commits

Reviewing files that changed from the base of the PR and between 7a423d6 and 11ba8b9.

📒 Files selected for processing (2)
  • .changeset/ui-mount-diagnostic.md
  • packages/ui/src/Components.tsx

📝 Walkthrough

Walkthrough

This pull request adds diagnostic improvements to component rendering initialization in the @clerk/ui package. A changeset documents runtime diagnostics for component mounts. The mountComponentRenderer function in packages/ui/src/Components.tsx is updated to include a 10-second timeout mechanism for lazy module imports and component rendering. On timeout or import failure, console errors are logged. Previously, initialization failures could occur silently; these changes convert them to actionable console output through error logging and diagnostic warnings.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately summarizes the main change: surfacing previously silent failures in the component renderer by adding diagnostic logging.
Description check✅ PassedThe description is directly related to the changeset, providing clear context about the diagnostic improvements and failure scenarios being addressed.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@pkg-pr-new

pkg-pr-newBot commented Apr 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@8379

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@8379

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@8379

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@8379

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@8379

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@8379

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@8379

@clerk/express

npm i https://pkg.pr.new/@clerk/express@8379

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@8379

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@8379

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@8379

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@8379

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@8379

@clerk/react

npm i https://pkg.pr.new/@clerk/react@8379

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@8379

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@8379

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@8379

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@8379

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@8379

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@8379

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@8379

commit: 1831e6a

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏼 👍🏼 👍🏼

@jacekradko
jacekradko merged commit 84698b5 into mainMay 2, 2026
43 checks passed
@jacekradko
jacekradko deleted the jacek/ui-mount-diagnostic branch May 2, 2026 03:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jacekradko@wobsoriano
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' fix(ui): surface silent failures in component renderer by jacekradko · Pull Request #8379 · clerk/javascript · GitHub
Skip to content

fix(ui): surface silent failures in component renderer - #8379

Merged
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic
May 2, 2026
Merged

fix(ui): surface silent failures in component renderer#8379
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic

Conversation

@jacekradko

Copy link
Copy Markdown
Contributor

Summary

Adds diagnostic coverage to the UI component renderer so silent initialization failures produce actionable errors instead of hanging indefinitely.

  • Catches rejections on the lazy module import in ensureMounted and logs a [Clerk UI] console error with the underlying cause. Currently these rejections disappear because every mount call in clerk-js/src/core/clerk.ts uses void this.#clerkUI.then(...) without a .catch.
  • Starts a 10s timeout alongside the lazy import. If the renderer has not mounted by then, logs a [Clerk UI] warning naming the common causes (failed chunk load, dev-server misconfiguration, pre-hydration mount). Cleared on both success and failure paths.

Covers the full fan-out with a single change in ensureMounted — the ~60 void this.#clerkUI.then(...) call sites in clerk-js all funnel through this one promise, so there is no per-mount-method surface to touch.

Context

Surfaced while debugging a regression where pnpm dev:sandbox loaded but components never rendered — Clerk.loaded === true, #app empty, zero console output. The root cause was an unrelated @rspack/cli bump enabling lazy-compilation, whose proxy chunk never resolved. With these diagnostics in place, the next person to hit a similar class of failure gets a direct signpost.

Test plan

  • Verified fix renders SignIn normally when the renderer mounts successfully (no regression, no spurious logs).
  • Reverted the environmental workaround to reproduce the stalled-mount condition and confirmed the 10s warning fires with the expected message.
  • CI builds and tests pass.

Add a catch on the lazy import chain in `ensureMounted` so
initialization rejections log a `[Clerk UI]` error instead of being
swallowed, and emit a diagnostic warning after 10s if the renderer has
not mounted. Makes stalled chunk loads, unresolved lazy-compilation
proxies, and similar dev-time failures surface with an actionable
message instead of hanging without feedback.
@vercel

vercelBot commented Apr 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentMay 2, 2026 2:32am

Request Review

@changeset-bot

changeset-botBot commented Apr 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1831e6a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
NameType
@clerk/uiPatch
@clerk/chrome-extensionPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 173fd3e2-5e0c-443a-957f-62a82b96e27c

📥 Commits

Reviewing files that changed from the base of the PR and between 7a423d6 and 11ba8b9.

📒 Files selected for processing (2)
  • .changeset/ui-mount-diagnostic.md
  • packages/ui/src/Components.tsx

📝 Walkthrough

Walkthrough

This pull request adds diagnostic improvements to component rendering initialization in the @clerk/ui package. A changeset documents runtime diagnostics for component mounts. The mountComponentRenderer function in packages/ui/src/Components.tsx is updated to include a 10-second timeout mechanism for lazy module imports and component rendering. On timeout or import failure, console errors are logged. Previously, initialization failures could occur silently; these changes convert them to actionable console output through error logging and diagnostic warnings.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately summarizes the main change: surfacing previously silent failures in the component renderer by adding diagnostic logging.
Description check✅ PassedThe description is directly related to the changeset, providing clear context about the diagnostic improvements and failure scenarios being addressed.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@pkg-pr-new

pkg-pr-newBot commented Apr 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@8379

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@8379

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@8379

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@8379

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@8379

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@8379

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@8379

@clerk/express

npm i https://pkg.pr.new/@clerk/express@8379

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@8379

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@8379

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@8379

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@8379

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@8379

@clerk/react

npm i https://pkg.pr.new/@clerk/react@8379

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@8379

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@8379

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@8379

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@8379

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@8379

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@8379

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@8379

commit: 1831e6a

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏼 👍🏼 👍🏼

@jacekradko
jacekradko merged commit 84698b5 into mainMay 2, 2026
43 checks passed
@jacekradko
jacekradko deleted the jacek/ui-mount-diagnostic branch May 2, 2026 03:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jacekradko@wobsoriano
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(ui): surface silent failures in component renderer by jacekradko · Pull Request #8379 · clerk/javascript · GitHub
Skip to content

fix(ui): surface silent failures in component renderer - #8379

Merged
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic
May 2, 2026
Merged

fix(ui): surface silent failures in component renderer#8379
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic

Conversation

@jacekradko

Copy link
Copy Markdown
Contributor

Summary

Adds diagnostic coverage to the UI component renderer so silent initialization failures produce actionable errors instead of hanging indefinitely.

  • Catches rejections on the lazy module import in ensureMounted and logs a [Clerk UI] console error with the underlying cause. Currently these rejections disappear because every mount call in clerk-js/src/core/clerk.ts uses void this.#clerkUI.then(...) without a .catch.
  • Starts a 10s timeout alongside the lazy import. If the renderer has not mounted by then, logs a [Clerk UI] warning naming the common causes (failed chunk load, dev-server misconfiguration, pre-hydration mount). Cleared on both success and failure paths.

Covers the full fan-out with a single change in ensureMounted — the ~60 void this.#clerkUI.then(...) call sites in clerk-js all funnel through this one promise, so there is no per-mount-method surface to touch.

Context

Surfaced while debugging a regression where pnpm dev:sandbox loaded but components never rendered — Clerk.loaded === true, #app empty, zero console output. The root cause was an unrelated @rspack/cli bump enabling lazy-compilation, whose proxy chunk never resolved. With these diagnostics in place, the next person to hit a similar class of failure gets a direct signpost.

Test plan

  • Verified fix renders SignIn normally when the renderer mounts successfully (no regression, no spurious logs).
  • Reverted the environmental workaround to reproduce the stalled-mount condition and confirmed the 10s warning fires with the expected message.
  • CI builds and tests pass.

Add a catch on the lazy import chain in `ensureMounted` so
initialization rejections log a `[Clerk UI]` error instead of being
swallowed, and emit a diagnostic warning after 10s if the renderer has
not mounted. Makes stalled chunk loads, unresolved lazy-compilation
proxies, and similar dev-time failures surface with an actionable
message instead of hanging without feedback.
@vercel

vercelBot commented Apr 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentMay 2, 2026 2:32am

Request Review

@changeset-bot

changeset-botBot commented Apr 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1831e6a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
NameType
@clerk/uiPatch
@clerk/chrome-extensionPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 173fd3e2-5e0c-443a-957f-62a82b96e27c

📥 Commits

Reviewing files that changed from the base of the PR and between 7a423d6 and 11ba8b9.

📒 Files selected for processing (2)
  • .changeset/ui-mount-diagnostic.md
  • packages/ui/src/Components.tsx

📝 Walkthrough

Walkthrough

This pull request adds diagnostic improvements to component rendering initialization in the @clerk/ui package. A changeset documents runtime diagnostics for component mounts. The mountComponentRenderer function in packages/ui/src/Components.tsx is updated to include a 10-second timeout mechanism for lazy module imports and component rendering. On timeout or import failure, console errors are logged. Previously, initialization failures could occur silently; these changes convert them to actionable console output through error logging and diagnostic warnings.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately summarizes the main change: surfacing previously silent failures in the component renderer by adding diagnostic logging.
Description check✅ PassedThe description is directly related to the changeset, providing clear context about the diagnostic improvements and failure scenarios being addressed.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@pkg-pr-new

pkg-pr-newBot commented Apr 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@8379

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@8379

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@8379

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@8379

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@8379

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@8379

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@8379

@clerk/express

npm i https://pkg.pr.new/@clerk/express@8379

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@8379

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@8379

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@8379

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@8379

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@8379

@clerk/react

npm i https://pkg.pr.new/@clerk/react@8379

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@8379

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@8379

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@8379

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@8379

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@8379

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@8379

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@8379

commit: 1831e6a

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏼 👍🏼 👍🏼

@jacekradko
jacekradko merged commit 84698b5 into mainMay 2, 2026
43 checks passed
@jacekradko
jacekradko deleted the jacek/ui-mount-diagnostic branch May 2, 2026 03:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jacekradko@wobsoriano
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); fix(ui): surface silent failures in component renderer by jacekradko · Pull Request #8379 · clerk/javascript · GitHub
Skip to content

fix(ui): surface silent failures in component renderer - #8379

Merged
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic
May 2, 2026
Merged

fix(ui): surface silent failures in component renderer#8379
jacekradko merged 5 commits into
mainfrom
jacek/ui-mount-diagnostic

Conversation

@jacekradko

Copy link
Copy Markdown
Contributor

Summary

Adds diagnostic coverage to the UI component renderer so silent initialization failures produce actionable errors instead of hanging indefinitely.

  • Catches rejections on the lazy module import in ensureMounted and logs a [Clerk UI] console error with the underlying cause. Currently these rejections disappear because every mount call in clerk-js/src/core/clerk.ts uses void this.#clerkUI.then(...) without a .catch.
  • Starts a 10s timeout alongside the lazy import. If the renderer has not mounted by then, logs a [Clerk UI] warning naming the common causes (failed chunk load, dev-server misconfiguration, pre-hydration mount). Cleared on both success and failure paths.

Covers the full fan-out with a single change in ensureMounted — the ~60 void this.#clerkUI.then(...) call sites in clerk-js all funnel through this one promise, so there is no per-mount-method surface to touch.

Context

Surfaced while debugging a regression where pnpm dev:sandbox loaded but components never rendered — Clerk.loaded === true, #app empty, zero console output. The root cause was an unrelated @rspack/cli bump enabling lazy-compilation, whose proxy chunk never resolved. With these diagnostics in place, the next person to hit a similar class of failure gets a direct signpost.

Test plan

  • Verified fix renders SignIn normally when the renderer mounts successfully (no regression, no spurious logs).
  • Reverted the environmental workaround to reproduce the stalled-mount condition and confirmed the 10s warning fires with the expected message.
  • CI builds and tests pass.

Add a catch on the lazy import chain in `ensureMounted` so
initialization rejections log a `[Clerk UI]` error instead of being
swallowed, and emit a diagnostic warning after 10s if the renderer has
not mounted. Makes stalled chunk loads, unresolved lazy-compilation
proxies, and similar dev-time failures surface with an actionable
message instead of hanging without feedback.
@vercel

vercelBot commented Apr 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentMay 2, 2026 2:32am

Request Review

@changeset-bot

changeset-botBot commented Apr 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1831e6a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
NameType
@clerk/uiPatch
@clerk/chrome-extensionPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 173fd3e2-5e0c-443a-957f-62a82b96e27c

📥 Commits

Reviewing files that changed from the base of the PR and between 7a423d6 and 11ba8b9.

📒 Files selected for processing (2)
  • .changeset/ui-mount-diagnostic.md
  • packages/ui/src/Components.tsx

📝 Walkthrough

Walkthrough

This pull request adds diagnostic improvements to component rendering initialization in the @clerk/ui package. A changeset documents runtime diagnostics for component mounts. The mountComponentRenderer function in packages/ui/src/Components.tsx is updated to include a 10-second timeout mechanism for lazy module imports and component rendering. On timeout or import failure, console errors are logged. Previously, initialization failures could occur silently; these changes convert them to actionable console output through error logging and diagnostic warnings.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately summarizes the main change: surfacing previously silent failures in the component renderer by adding diagnostic logging.
Description check✅ PassedThe description is directly related to the changeset, providing clear context about the diagnostic improvements and failure scenarios being addressed.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@pkg-pr-new

pkg-pr-newBot commented Apr 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@8379

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@8379

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@8379

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@8379

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@8379

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@8379

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@8379

@clerk/express

npm i https://pkg.pr.new/@clerk/express@8379

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@8379

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@8379

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@8379

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@8379

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@8379

@clerk/react

npm i https://pkg.pr.new/@clerk/react@8379

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@8379

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@8379

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@8379

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@8379

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@8379

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@8379

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@8379

commit: 1831e6a

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏼 👍🏼 👍🏼

@jacekradko
jacekradko merged commit 84698b5 into mainMay 2, 2026
43 checks passed
@jacekradko
jacekradko deleted the jacek/ui-mount-diagnostic branch May 2, 2026 03:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jacekradko@wobsoriano