Skip to content

Conversation

@jacekradko
Copy link
Member

@jacekradko jacekradko commented Feb 5, 2026

Summary

  • Move nonce fetching from the server ClerkProvider into a separate DynamicClerkScripts server component wrapped in Suspense
  • This allows pages using dynamic=true to remain statically renderable and compatible with PPR/cacheComponents

Problem

In the Next.js App Router server ClerkProvider, awaiting the nonce from headers() opts the entire page out of static rendering, breaking PPR/cacheComponents.

Solution

Isolate the nonce fetch in a Suspense boundary:

  • Create DynamicClerkScripts async server component that fetches the nonce and renders script tags
  • When dynamic=true, render <Suspense><DynamicClerkScripts/></Suspense> and skip client-side ClerkScripts via __internal_skipScripts
  • getNonce uses a static import { headers } from 'next/headers' (no dynamic import needed since this is an App Router-only component)
  • Extract ClerkScriptTags as a shared pure presentational component for script + preload tags
  • Split the old shared ClerkScripts wrapper into router-specific components: app-router/client/ClerkScripts.tsx and pages/ClerkScripts.tsx

Test plan

  • Build passes
  • Tests pass — added tests for DynamicClerkScripts covering X-Nonce header, CSP fallback, missing nonce, prerendering bailout rethrow, and graceful degradation
  • Test with dynamic=true — scripts render correctly
  • Test PPR behavior — page remains statically renderable with dynamic scripts isolated
  • Test CSP nonce functionality still works

Closes USER-4607

Move nonce fetching from the server ClerkProvider's main body into a
separate DynamicClerkScripts server component wrapped in Suspense.
This allows pages using dynamic=true to remain statically renderable
and compatible with PPR/cacheComponents.

- Create DynamicClerkScripts async server component
- Add getNonce cached function to utils
- Skip client ClerkScripts when server scripts are used
- Pass __internal_skipScripts through KeylessProvider
@vercel
Copy link

vercel bot commented Feb 5, 2026

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
clerk-js-sandbox Skipped Skipped Feb 10, 2026 2:07pm

Request Review

@changeset-bot
Copy link

changeset-bot bot commented Feb 5, 2026

🦋 Changeset detected

Latest commit: 31da6d0

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

This PR includes changesets to release 1 package
Name Type
@clerk/nextjs Patch

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
Contributor

coderabbitai bot commented Feb 5, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds an internal boolean prop __internal_skipScripts to NextClerkProvider props and threads it through KeylessProvider, the server ClerkProvider, and the client ClerkProvider to optionally skip injecting client scripts. Removes inline nonce retrieval from the server ClerkProvider and introduces an async server component DynamicClerkScripts, rendered inside a React Suspense boundary, which uses a new exported getNonce (cached via React.cache) to obtain the nonce. Introduces a shared ClerkScriptTags component for rendering script and preload tags and simplifies ClerkScripts/ClerkScript rendering logic.

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: isolating nonce fetch in a Suspense boundary for PPR support, which matches the core technical objective.
Linked Issues check ✅ Passed The PR fulfills USER-4607 objectives: moved nonce fetching from server ClerkProvider into DynamicClerkScripts component, wrapped in Suspense boundary, preventing page opt-out from static rendering and maintaining PPR/cacheComponents compatibility.
Out of Scope Changes check ✅ Passed All changes are scoped to isolating nonce fetch and supporting dynamic scripts within Suspense boundaries. The __internal_skipScripts flag and ClerkScriptTags utility are necessary supporting changes to prevent redundant client-side rendering.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ 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
Copy link

pkg-pr-new bot commented Feb 5, 2026

Open in StackBlitz

@clerk/agent-toolkit

npm i https://pkg.pr.new/@clerk/agent-toolkit@7773

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 31da6d0

@jacekradko jacekradko requested a review from Ephem February 5, 2026 18:38
…ndling

Extract duplicated script rendering into a shared ClerkScriptTags component
used by both ClerkScripts (client) and DynamicClerkScripts (server). Add
try/catch to getNonce() so errors in prerendering or "use cache" contexts
degrade gracefully instead of propagating unhandled.
…n RSC

Import clerkJSScriptUrl, buildClerkJSScriptAttributes, clerkUIScriptUrl
from @clerk/shared/loadClerkJsScript instead of @clerk/react/internal in
the shared ClerkScriptTags component. The @clerk/react/internal barrel
re-exports modules that use React.createContext, which breaks when the
RSC bundler evaluates the barrel in server component context.
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@packages/nextjs/src/app-router/server/utils.ts`:
- Around line 156-180: Add automated tests for getNonce covering three
scenarios: (1) when the request provides X-Nonce header ensure getNonce returns
that value and caching via reactCache deduplicates repeated calls; (2) when
X-Nonce is absent but Content-Security-Policy contains a script-nonce ensure
getNonce falls back to getScriptNonceFromHeader and returns the extracted nonce;
and (3) when the dynamic import throws a prerendering bailout
(isPrerenderingBailout returns true) ensure the bailout is rethrown. In tests,
mock the dynamic import of 'next/headers' to return a headers() object with
get() behavior, spy/override getScriptNonceFromHeader and isPrerenderingBailout
to simulate CSP and bailout cases, and verify caching semantics by calling
getNonce multiple times in the same test to confirm reactCache deduplication.

@jacekradko
Copy link
Member Author

!snapshot

@clerk-cookie
Copy link
Collaborator

Hey @jacekradko - the snapshot version command generated the following package versions:

Package Version
@clerk/agent-toolkit 0.3.0-snapshot.v20260206212043
@clerk/astro 3.0.0-snapshot.v20260206212043
@clerk/backend 3.0.0-snapshot.v20260206212043
@clerk/chrome-extension 3.0.0-snapshot.v20260206212043
@clerk/clerk-js 6.0.0-snapshot.v20260206212043
@clerk/dev-cli 1.0.0-snapshot.v20260206212043
@clerk/expo 3.0.0-snapshot.v20260206212043
@clerk/expo-passkeys 1.0.0-snapshot.v20260206212043
@clerk/express 2.0.0-snapshot.v20260206212043
@clerk/fastify 2.7.0-snapshot.v20260206212043
@clerk/localizations 4.0.0-snapshot.v20260206212043
@clerk/msw 0.0.1-snapshot.v20260206212043
@clerk/nextjs 7.0.0-snapshot.v20260206212043
@clerk/nuxt 2.0.0-snapshot.v20260206212043
@clerk/react 6.0.0-snapshot.v20260206212043
@clerk/react-router 3.0.0-snapshot.v20260206212043
@clerk/shared 4.0.0-snapshot.v20260206212043
@clerk/tanstack-react-start 1.0.0-snapshot.v20260206212043
@clerk/testing 2.0.0-snapshot.v20260206212043
@clerk/ui 1.0.0-snapshot.v20260206212043
@clerk/upgrade 2.0.0-snapshot.v20260206212043
@clerk/vue 2.0.0-snapshot.v20260206212043

Tip: Use the snippet copy button below to quickly install the required packages.
@clerk/agent-toolkit

npm i @clerk/agent-toolkit@0.3.0-snapshot.v20260206212043 --save-exact

@clerk/astro

npm i @clerk/astro@3.0.0-snapshot.v20260206212043 --save-exact

@clerk/backend

npm i @clerk/backend@3.0.0-snapshot.v20260206212043 --save-exact

@clerk/chrome-extension

npm i @clerk/chrome-extension@3.0.0-snapshot.v20260206212043 --save-exact

@clerk/clerk-js

npm i @clerk/clerk-js@6.0.0-snapshot.v20260206212043 --save-exact

@clerk/dev-cli

npm i @clerk/dev-cli@1.0.0-snapshot.v20260206212043 --save-exact

@clerk/expo

npm i @clerk/expo@3.0.0-snapshot.v20260206212043 --save-exact

@clerk/expo-passkeys

npm i @clerk/expo-passkeys@1.0.0-snapshot.v20260206212043 --save-exact

@clerk/express

npm i @clerk/express@2.0.0-snapshot.v20260206212043 --save-exact

@clerk/fastify

npm i @clerk/fastify@2.7.0-snapshot.v20260206212043 --save-exact

@clerk/localizations

npm i @clerk/localizations@4.0.0-snapshot.v20260206212043 --save-exact

@clerk/msw

npm i @clerk/msw@0.0.1-snapshot.v20260206212043 --save-exact

@clerk/nextjs

npm i @clerk/nextjs@7.0.0-snapshot.v20260206212043 --save-exact

@clerk/nuxt

npm i @clerk/nuxt@2.0.0-snapshot.v20260206212043 --save-exact

@clerk/react

npm i @clerk/react@6.0.0-snapshot.v20260206212043 --save-exact

@clerk/react-router

npm i @clerk/react-router@3.0.0-snapshot.v20260206212043 --save-exact

@clerk/shared

npm i @clerk/shared@4.0.0-snapshot.v20260206212043 --save-exact

@clerk/tanstack-react-start

npm i @clerk/tanstack-react-start@1.0.0-snapshot.v20260206212043 --save-exact

@clerk/testing

npm i @clerk/testing@2.0.0-snapshot.v20260206212043 --save-exact

@clerk/ui

npm i @clerk/ui@1.0.0-snapshot.v20260206212043 --save-exact

@clerk/upgrade

npm i @clerk/upgrade@2.0.0-snapshot.v20260206212043 --save-exact

@clerk/vue

npm i @clerk/vue@2.0.0-snapshot.v20260206212043 --save-exact

Copy link
Member

@Ephem Ephem left a comment

Choose a reason for hiding this comment

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

Nice! This looks very similar to what I was envisioning, but a bit better. 😁 Left a few NIT-comments, I'll go ahead and take this for a spin in the dashboard.

Comment on lines 32 to 67
@@ -61,14 +68,7 @@ export function ClerkScripts({ router }: { router: ClerkScriptProps['router'] })
Copy link
Member

Choose a reason for hiding this comment

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

I find the naming here confusing.

ClerkScripts -> Used for both app and pages
ClerkScriptTags -> The app router "static" script tags
ClerkScript -> The pages router "static" script tags (only kind there is)

?

Maybe we can finish the swing you started here and get rid of ClerkScripts entirely now, and just render ClerkScriptTags directly from the app router, and ClerkScript directly from the pages one, seeing how ClerkScripts doesn't really have any valuable shared logic?

And also rename ClerkScriptTags and ClerkScript (or just let them live in the app and pages router folders instead of at the shared level)?

…t-await-nonce-in-the-clerkprovider

# Conflicts:
#	packages/nextjs/src/utils/clerk-script.tsx
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 9, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/clerk/javascript/issues/comments/3854584812","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: review paused by coderabbit.ai -->\n\n> [!NOTE]\n> ## Reviews paused\n> \n> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.\n> \n> Use the following commands to manage reviews:\n> - `@coderabbitai resume` to resume automatic reviews.\n> - `@coderabbitai review` to trigger a single review.\n> \n> Use the checkboxes below for quick actions:\n> - [ ] <!-- {\"checkboxId\": \"7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1\"} --> ▶️ Resume reviews\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: review paused by coderabbit.ai -->\n\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds an internal boolean prop `__internal_skipScripts` to NextClerkProvider props and threads it through KeylessProvider, the server ClerkProvider, and the client ClerkProvider to optionally skip injecting client scripts. Removes inline nonce retrieval from the server ClerkProvider and introduces an async server component `DynamicClerkScripts`, rendered inside a React `Suspense` boundary, which uses a new exported `getNonce` (cached via React.cache) to obtain the nonce. Introduces a shared `ClerkScriptTags` component for rendering script and preload tags and simplifies ClerkScripts/ClerkScript rendering logic.\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 4 | ❌ 1</summary>\n\n<details>\n<summary>❌ Failed checks (1 warning)</summary>\n\n|     Check name     | Status     | Explanation                                                                           | Resolution                                                                         |\n| :----------------: | :--------- | :------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------- |\n| Docstring Coverage | ⚠️ Warning | Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. | Write docstrings for the functions missing them to satisfy the coverage threshold. |\n\n</details>\n<details>\n<summary>✅ Passed checks (4 passed)</summary>\n\n|         Check name         | Status   | Explanation                                                                                                                                                                                                                                             |\n| :------------------------: | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n|      Description Check     | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                                                                                                                                                                                             |\n|         Title check        | ✅ Passed | The title accurately summarizes the main change: isolating nonce fetch in a Suspense boundary for PPR support, which matches the core technical objective.                                                                                              |\n|     Linked Issues check    | ✅ Passed | The PR fulfills USER-4607 objectives: moved nonce fetching from server ClerkProvider into DynamicClerkScripts component, wrapped in Suspense boundary, preventing page opt-out from static rendering and maintaining PPR/cacheComponents compatibility. |\n| Out of Scope Changes check | ✅ Passed | All changes are scoped to isolating nonce fetch and supporting dynamic scripts within Suspense boundaries. The __internal_skipScripts flag and ClerkScriptTags utility are necessary supporting changes to prevent redundant client-side rendering.     |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n\n---\n\nNo actionable comments were generated in the recent review. 🎉\n\n<!-- tips_start -->\n\n---\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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= -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/clerk/javascript/issues/comments/3854584812","status":500,"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","content-length":"0","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Mon, 09 Feb 2026 16:10:54 GMT","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept-Encoding, Accept, X-Requested-With","x-accepted-github-permissions":"issues=write; pull_requests=write","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"5018:8BA36:BE937:333789:698A070D","x-ratelimit-limit":"15000","x-ratelimit-remaining":"14546","x-ratelimit-reset":"1770655674","x-ratelimit-resource":"core","x-ratelimit-used":"454","x-xss-protection":"0"},"data":""}}

3 similar comments
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 9, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/clerk/javascript/issues/comments/3854584812","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: review paused by coderabbit.ai -->\n\n> [!NOTE]\n> ## Reviews paused\n> \n> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.\n> \n> Use the following commands to manage reviews:\n> - `@coderabbitai resume` to resume automatic reviews.\n> - `@coderabbitai review` to trigger a single review.\n> \n> Use the checkboxes below for quick actions:\n> - [ ] <!-- {\"checkboxId\": \"7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1\"} --> ▶️ Resume reviews\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: review paused by coderabbit.ai -->\n\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds an internal boolean prop `__internal_skipScripts` to NextClerkProvider props and threads it through KeylessProvider, the server ClerkProvider, and the client ClerkProvider to optionally skip injecting client scripts. Removes inline nonce retrieval from the server ClerkProvider and introduces an async server component `DynamicClerkScripts`, rendered inside a React `Suspense` boundary, which uses a new exported `getNonce` (cached via React.cache) to obtain the nonce. Introduces a shared `ClerkScriptTags` component for rendering script and preload tags and simplifies ClerkScripts/ClerkScript rendering logic.\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 4 | ❌ 1</summary>\n\n<details>\n<summary>❌ Failed checks (1 warning)</summary>\n\n|     Check name     | Status     | Explanation                                                                           | Resolution                                                                         |\n| :----------------: | :--------- | :------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------- |\n| Docstring Coverage | ⚠️ Warning | Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. | Write docstrings for the functions missing them to satisfy the coverage threshold. |\n\n</details>\n<details>\n<summary>✅ Passed checks (4 passed)</summary>\n\n|         Check name         | Status   | Explanation                                                                                                                                                                                                                                             |\n| :------------------------: | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n|      Description Check     | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                                                                                                                                                                                             |\n|         Title check        | ✅ Passed | The title accurately summarizes the main change: isolating nonce fetch in a Suspense boundary for PPR support, which matches the core technical objective.                                                                                              |\n|     Linked Issues check    | ✅ Passed | The PR fulfills USER-4607 objectives: moved nonce fetching from server ClerkProvider into DynamicClerkScripts component, wrapped in Suspense boundary, preventing page opt-out from static rendering and maintaining PPR/cacheComponents compatibility. |\n| Out of Scope Changes check | ✅ Passed | All changes are scoped to isolating nonce fetch and supporting dynamic scripts within Suspense boundaries. The __internal_skipScripts flag and ClerkScriptTags utility are necessary supporting changes to prevent redundant client-side rendering.     |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n\n---\n\nNo actionable comments were generated in the recent review. 🎉\n\n<!-- tips_start -->\n\n---\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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= -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/clerk/javascript/issues/comments/3854584812","status":500,"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","content-length":"0","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Mon, 09 Feb 2026 16:10:54 GMT","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept-Encoding, Accept, X-Requested-With","x-accepted-github-permissions":"issues=write; pull_requests=write","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"5018:8BA36:BE937:333789:698A070D","x-ratelimit-limit":"15000","x-ratelimit-remaining":"14546","x-ratelimit-reset":"1770655674","x-ratelimit-resource":"core","x-ratelimit-used":"454","x-xss-protection":"0"},"data":""}}

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 9, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/clerk/javascript/issues/comments/3854584812","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: review paused by coderabbit.ai -->\n\n> [!NOTE]\n> ## Reviews paused\n> \n> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.\n> \n> Use the following commands to manage reviews:\n> - `@coderabbitai resume` to resume automatic reviews.\n> - `@coderabbitai review` to trigger a single review.\n> \n> Use the checkboxes below for quick actions:\n> - [ ] <!-- {\"checkboxId\": \"7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1\"} --> ▶️ Resume reviews\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: review paused by coderabbit.ai -->\n\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds an internal boolean prop `__internal_skipScripts` to NextClerkProvider props and threads it through KeylessProvider, the server ClerkProvider, and the client ClerkProvider to optionally skip injecting client scripts. Removes inline nonce retrieval from the server ClerkProvider and introduces an async server component `DynamicClerkScripts`, rendered inside a React `Suspense` boundary, which uses a new exported `getNonce` (cached via React.cache) to obtain the nonce. Introduces a shared `ClerkScriptTags` component for rendering script and preload tags and simplifies ClerkScripts/ClerkScript rendering logic.\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 4 | ❌ 1</summary>\n\n<details>\n<summary>❌ Failed checks (1 warning)</summary>\n\n|     Check name     | Status     | Explanation                                                                           | Resolution                                                                         |\n| :----------------: | :--------- | :------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------- |\n| Docstring Coverage | ⚠️ Warning | Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. | Write docstrings for the functions missing them to satisfy the coverage threshold. |\n\n</details>\n<details>\n<summary>✅ Passed checks (4 passed)</summary>\n\n|         Check name         | Status   | Explanation                                                                                                                                                                                                                                             |\n| :------------------------: | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n|      Description Check     | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                                                                                                                                                                                             |\n|         Title check        | ✅ Passed | The title accurately summarizes the main change: isolating nonce fetch in a Suspense boundary for PPR support, which matches the core technical objective.                                                                                              |\n|     Linked Issues check    | ✅ Passed | The PR fulfills USER-4607 objectives: moved nonce fetching from server ClerkProvider into DynamicClerkScripts component, wrapped in Suspense boundary, preventing page opt-out from static rendering and maintaining PPR/cacheComponents compatibility. |\n| Out of Scope Changes check | ✅ Passed | All changes are scoped to isolating nonce fetch and supporting dynamic scripts within Suspense boundaries. The __internal_skipScripts flag and ClerkScriptTags utility are necessary supporting changes to prevent redundant client-side rendering.     |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n\n---\n\nNo actionable comments were generated in the recent review. 🎉\n\n<!-- tips_start -->\n\n---\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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= -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/clerk/javascript/issues/comments/3854584812","status":500,"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","content-length":"0","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Mon, 09 Feb 2026 16:10:54 GMT","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept-Encoding, Accept, X-Requested-With","x-accepted-github-permissions":"issues=write; pull_requests=write","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"5018:8BA36:BE937:333789:698A070D","x-ratelimit-limit":"15000","x-ratelimit-remaining":"14546","x-ratelimit-reset":"1770655674","x-ratelimit-resource":"core","x-ratelimit-used":"454","x-xss-protection":"0"},"data":""}}

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 9, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/clerk/javascript/issues/comments/3854584812","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: review paused by coderabbit.ai -->\n\n> [!NOTE]\n> ## Reviews paused\n> \n> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.\n> \n> Use the following commands to manage reviews:\n> - `@coderabbitai resume` to resume automatic reviews.\n> - `@coderabbitai review` to trigger a single review.\n> \n> Use the checkboxes below for quick actions:\n> - [ ] <!-- {\"checkboxId\": \"7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1\"} --> ▶️ Resume reviews\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: review paused by coderabbit.ai -->\n\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds an internal boolean prop `__internal_skipScripts` to NextClerkProvider props and threads it through KeylessProvider, the server ClerkProvider, and the client ClerkProvider to optionally skip injecting client scripts. Removes inline nonce retrieval from the server ClerkProvider and introduces an async server component `DynamicClerkScripts`, rendered inside a React `Suspense` boundary, which uses a new exported `getNonce` (cached via React.cache) to obtain the nonce. Introduces a shared `ClerkScriptTags` component for rendering script and preload tags and simplifies ClerkScripts/ClerkScript rendering logic.\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 4 | ❌ 1</summary>\n\n<details>\n<summary>❌ Failed checks (1 warning)</summary>\n\n|     Check name     | Status     | Explanation                                                                           | Resolution                                                                         |\n| :----------------: | :--------- | :------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------- |\n| Docstring Coverage | ⚠️ Warning | Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. | Write docstrings for the functions missing them to satisfy the coverage threshold. |\n\n</details>\n<details>\n<summary>✅ Passed checks (4 passed)</summary>\n\n|         Check name         | Status   | Explanation                                                                                                                                                                                                                                             |\n| :------------------------: | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n|      Description Check     | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                                                                                                                                                                                             |\n|         Title check        | ✅ Passed | The title accurately summarizes the main change: isolating nonce fetch in a Suspense boundary for PPR support, which matches the core technical objective.                                                                                              |\n|     Linked Issues check    | ✅ Passed | The PR fulfills USER-4607 objectives: moved nonce fetching from server ClerkProvider into DynamicClerkScripts component, wrapped in Suspense boundary, preventing page opt-out from static rendering and maintaining PPR/cacheComponents compatibility. |\n| Out of Scope Changes check | ✅ Passed | All changes are scoped to isolating nonce fetch and supporting dynamic scripts within Suspense boundaries. The __internal_skipScripts flag and ClerkScriptTags utility are necessary supporting changes to prevent redundant client-side rendering.     |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n\n---\n\nNo actionable comments were generated in the recent review. 🎉\n\n<!-- tips_start -->\n\n---\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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= -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/clerk/javascript/issues/comments/3854584812","status":500,"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","content-length":"0","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Mon, 09 Feb 2026 16:10:54 GMT","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept-Encoding, Accept, X-Requested-With","x-accepted-github-permissions":"issues=write; pull_requests=write","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"5018:8BA36:BE937:333789:698A070D","x-ratelimit-limit":"15000","x-ratelimit-remaining":"14546","x-ratelimit-reset":"1770655674","x-ratelimit-resource":"core","x-ratelimit-used":"454","x-xss-protection":"0"},"data":""}}

…erkScripts per router

- Move getNonce from shared utils into DynamicClerkScripts (its only consumer),
  replacing the dynamic import with a static import of next/headers and removing
  the reactCache fallback since this is an RSC-only component.
- Split the shared ClerkScripts component into router-specific versions in
  app-router/client/ and pages/, eliminating the router prop dispatch.
- Delete utils/clerk-script.tsx.
Cover X-Nonce header, CSP fallback, missing nonce, prerendering
bailout rethrow, and graceful degradation on non-bailout errors.
Copy link
Member

@Ephem Ephem left a comment

Choose a reason for hiding this comment

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

I like the updates!


return (
<>
<script
Copy link
Member

Choose a reason for hiding this comment

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

Seems like we've always used a <Script> tag here before, was there a specific reason to change that?

Comment on lines 39 to 60
const dynamicScripts = dynamic ? (
<Suspense>
<DynamicClerkScripts
publishableKey={propsWithEnvs.publishableKey}
clerkJSUrl={propsWithEnvs.clerkJSUrl}
clerkJSVersion={propsWithEnvs.clerkJSVersion}
clerkUIUrl={propsWithEnvs.clerkUIUrl}
domain={propsWithEnvs.domain}
proxyUrl={propsWithEnvs.proxyUrl}
prefetchUI={propsWithEnvs.prefetchUI}
/>
</Suspense>
) : null;

if (shouldRunAsKeyless) {
return (
<KeylessProvider
rest={propsWithEnvs}
runningWithClaimedKeys={runningWithClaimedKeys}
__internal_skipScripts={dynamic}
>
{dynamicScripts}
Copy link
Member

Choose a reason for hiding this comment

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

Instead of introducing a new boolean prop, maybe we can add 'use client' at the top of ClerkScripts and leverage composition?

Also, I think there's an issue with the scripts being included twice if we do this:

<ClerkProvider dynamic>
  <ClerkProvider dynamic>

Which might seem like an invalid pattern today, but we don't know how this part of the code will evolve so I think it might be nice to tighten it up.

So perhaps we introduce a "scriptsSlot" or similar, that does not get rendered for nested boundaries (that is, when the InitialStateProvider renders alone)? Something like:

Suggested change
const dynamicScripts = dynamic ? (
<Suspense>
<DynamicClerkScripts
publishableKey={propsWithEnvs.publishableKey}
clerkJSUrl={propsWithEnvs.clerkJSUrl}
clerkJSVersion={propsWithEnvs.clerkJSVersion}
clerkUIUrl={propsWithEnvs.clerkUIUrl}
domain={propsWithEnvs.domain}
proxyUrl={propsWithEnvs.proxyUrl}
prefetchUI={propsWithEnvs.prefetchUI}
/>
</Suspense>
) : null;
if (shouldRunAsKeyless) {
return (
<KeylessProvider
rest={propsWithEnvs}
runningWithClaimedKeys={runningWithClaimedKeys}
__internal_skipScripts={dynamic}
>
{dynamicScripts}
const scripts = dynamic ? (
<Suspense>
<DynamicClerkScripts
publishableKey={propsWithEnvs.publishableKey}
clerkJSUrl={propsWithEnvs.clerkJSUrl}
clerkJSVersion={propsWithEnvs.clerkJSVersion}
clerkUIUrl={propsWithEnvs.clerkUIUrl}
domain={propsWithEnvs.domain}
proxyUrl={propsWithEnvs.proxyUrl}
prefetchUI={propsWithEnvs.prefetchUI}
/>
</Suspense>
) : <ClerkScripts />;
if (shouldRunAsKeyless) {
return (
<KeylessProvider
rest={propsWithEnvs}
runningWithClaimedKeys={runningWithClaimedKeys}
scriptsSlot={scripts}
>

Co-authored-by: Fredrik Höglund <fredrik@clerk.dev>
…ion pattern

Replace the boolean `__internal_skipScripts` prop with a `__internal_scriptsSlot`
React node prop. The server provider now passes dynamic scripts as a slot prop
instead of rendering them as sibling children, preventing duplicate script
rendering in nested `<ClerkProvider dynamic>` scenarios.
@jacekradko
Copy link
Member Author

!snapshot

@clerk-cookie
Copy link
Collaborator

Hey @jacekradko - the snapshot version command generated the following package versions:

Package Version
@clerk/agent-toolkit 0.3.0-snapshot.v20260210163448
@clerk/astro 3.0.0-snapshot.v20260210163448
@clerk/backend 3.0.0-snapshot.v20260210163448
@clerk/chrome-extension 3.0.0-snapshot.v20260210163448
@clerk/clerk-js 6.0.0-snapshot.v20260210163448
@clerk/dev-cli 1.0.0-snapshot.v20260210163448
@clerk/expo 3.0.0-snapshot.v20260210163448
@clerk/expo-passkeys 1.0.0-snapshot.v20260210163448
@clerk/express 2.0.0-snapshot.v20260210163448
@clerk/fastify 2.7.0-snapshot.v20260210163448
@clerk/localizations 4.0.0-snapshot.v20260210163448
@clerk/msw 0.0.1-snapshot.v20260210163448
@clerk/nextjs 7.0.0-snapshot.v20260210163448
@clerk/nuxt 2.0.0-snapshot.v20260210163448
@clerk/react 6.0.0-snapshot.v20260210163448
@clerk/react-router 3.0.0-snapshot.v20260210163448
@clerk/shared 4.0.0-snapshot.v20260210163448
@clerk/tanstack-react-start 1.0.0-snapshot.v20260210163448
@clerk/testing 2.0.0-snapshot.v20260210163448
@clerk/ui 1.0.0-snapshot.v20260210163448
@clerk/upgrade 2.0.0-snapshot.v20260210163448
@clerk/vue 2.0.0-snapshot.v20260210163448

Tip: Use the snippet copy button below to quickly install the required packages.
@clerk/agent-toolkit

npm i @clerk/agent-toolkit@0.3.0-snapshot.v20260210163448 --save-exact

@clerk/astro

npm i @clerk/astro@3.0.0-snapshot.v20260210163448 --save-exact

@clerk/backend

npm i @clerk/backend@3.0.0-snapshot.v20260210163448 --save-exact

@clerk/chrome-extension

npm i @clerk/chrome-extension@3.0.0-snapshot.v20260210163448 --save-exact

@clerk/clerk-js

npm i @clerk/clerk-js@6.0.0-snapshot.v20260210163448 --save-exact

@clerk/dev-cli

npm i @clerk/dev-cli@1.0.0-snapshot.v20260210163448 --save-exact

@clerk/expo

npm i @clerk/expo@3.0.0-snapshot.v20260210163448 --save-exact

@clerk/expo-passkeys

npm i @clerk/expo-passkeys@1.0.0-snapshot.v20260210163448 --save-exact

@clerk/express

npm i @clerk/express@2.0.0-snapshot.v20260210163448 --save-exact

@clerk/fastify

npm i @clerk/fastify@2.7.0-snapshot.v20260210163448 --save-exact

@clerk/localizations

npm i @clerk/localizations@4.0.0-snapshot.v20260210163448 --save-exact

@clerk/msw

npm i @clerk/msw@0.0.1-snapshot.v20260210163448 --save-exact

@clerk/nextjs

npm i @clerk/nextjs@7.0.0-snapshot.v20260210163448 --save-exact

@clerk/nuxt

npm i @clerk/nuxt@2.0.0-snapshot.v20260210163448 --save-exact

@clerk/react

npm i @clerk/react@6.0.0-snapshot.v20260210163448 --save-exact

@clerk/react-router

npm i @clerk/react-router@3.0.0-snapshot.v20260210163448 --save-exact

@clerk/shared

npm i @clerk/shared@4.0.0-snapshot.v20260210163448 --save-exact

@clerk/tanstack-react-start

npm i @clerk/tanstack-react-start@1.0.0-snapshot.v20260210163448 --save-exact

@clerk/testing

npm i @clerk/testing@2.0.0-snapshot.v20260210163448 --save-exact

@clerk/ui

npm i @clerk/ui@1.0.0-snapshot.v20260210163448 --save-exact

@clerk/upgrade

npm i @clerk/upgrade@2.0.0-snapshot.v20260210163448 --save-exact

@clerk/vue

npm i @clerk/vue@2.0.0-snapshot.v20260210163448 --save-exact

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants