Skip to content

feat(react): Add env variable fallback for publishableKey in Vite apps - #7634

Merged
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback
Jan 22, 2026
Merged

feat(react): Add env variable fallback for publishableKey in Vite apps#7634
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback

Conversation

@brkalow

@brkalowbrkalow commented Jan 21, 2026

Copy link
Copy Markdown
Member

Summary

  • Adds automatic fallback to VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment variables when publishableKey is not explicitly provided to ClerkProvider
  • Enables Vite users to configure their publishable key via environment variables without manual configuration
  • Only triggers fallback when publishableKey is undefined (not empty string) to maintain compatibility with framework SDKs like Next.js

Closes AIE-431

Test plan

  • Added unit tests for getPublishableKeyFromEnv utility function
  • Added unit tests for getOrCreateInstance env var fallback behavior
  • Tests cover priority order: explicit prop > VITE_ prefixed > unprefixed
  • Tests verify empty string does not trigger fallback (framework SDK compatibility)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • ClerkProvider now automatically retrieves your publishableKey from environment variables (VITE_CLERK_PUBLISHABLE_KEY or CLERK_PUBLISHABLE_KEY) when not explicitly provided, streamlining setup and configuration.

✏️ Tip: You can customize this high-level summary in your review settings.

When publishableKey is not explicitly provided, the React SDK now checks
for VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment
variables. This enables Vite users to set their publishable key via
environment variables without manual configuration.
The fallback only triggers when publishableKey is undefined (not when
it's an empty string) to avoid conflicting with framework SDKs like
Next.js that may pass empty string when their env var is not set.
Closes AIE-431
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@changeset-bot

changeset-botBot commented Jan 21, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 00dc058

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

This PR includes changesets to release 6 packages
NameType
@clerk/reactMinor
@clerk/chrome-extensionPatch
@clerk/expoPatch
@clerk/nextjsPatch
@clerk/react-routerPatch
@clerk/tanstack-react-startPatch

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

@vercel

vercelBot commented Jan 21, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 22, 2026 3:37am

Request Review

@coderabbitai

coderabbitaiBot commented Jan 21, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR implements automatic environment variable fallback for the publishableKey in the Clerk React SDK. A new utility module is introduced that handles merging of options with environment variables, checking VITE_CLERK_PUBLISHABLE_KEY first, then CLERK_PUBLISHABLE_KEY. The ClerkContextProvider is updated to use this merging function. Comprehensive tests validate the fallback behavior and precedence rules, including scenarios where explicit options override environment variables and where empty strings are preserved. Integration template examples are simplified by removing explicit publishableKey props, relying instead on automatic detection.

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.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 nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title accurately summarizes the main change: adding environment variable fallback for publishableKey in Vite applications.
Linked Issues check✅ PassedThe pull request fully addresses AIE-431 by detecting Vite env vars (VITE_CLERK_PUBLISHABLE_KEY) and CLERK_PUBLISHABLE_KEY as fallback when publishableKey is not explicitly provided.
Out of Scope Changes check✅ PassedAll changes are in scope. The PR adds env variable fallback logic, utility functions, tests, and updates template examples. One minor observation: URL fallbacks (signInUrl, signUpUrl, etc.) were intentionally excluded for @clerk/react-router compatibility.

✏️ 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 Jan 21, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 00dc058

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

@jacekradkojacekradko left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍🏼

Extend the env var fallback support to include:
- signInUrl (VITE_CLERK_SIGN_IN_URL / CLERK_SIGN_IN_URL)
- signUpUrl (VITE_CLERK_SIGN_UP_URL / CLERK_SIGN_UP_URL)
- signInForceRedirectUrl
- signUpForceRedirectUrl
- signInFallbackRedirectUrl
- signUpFallbackRedirectUrl
This brings the React SDK closer to parity with the Next.js SDK
for Vite users who want to configure Clerk via environment variables.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…elper
Replace multiple individual env var getter functions with a single
mergeWithEnv helper that handles all env var fallbacks in one place.
This simplifies the isomorphicClerk code and mirrors the pattern used
in the Next.js SDK with mergeNextClerkPropsWithEnv.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ntextProvider
Move the mergeWithEnv call from IsomorphicClerk.getOrCreateInstance to
ClerkContextProvider, where the options enter the public API. This:
- Follows the same pattern as Next.js SDK (mergeNextClerkPropsWithEnv)
- Keeps IsomorphicClerk focused on initialization, not configuration resolution
- Makes the env var handling visible at the API boundary
- Maintains clearer separation of concerns
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move mergeWithEnv tests to dedicated file at src/utils/__tests__/envVariables.test.ts,
keeping isomorphicClerk.test.ts focused on IsomorphicClerk-specific behavior.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…lback
Remove explicit publishableKey props from ClerkProvider in react-vite and
custom-flows-react-vite templates since ClerkProvider now automatically
reads from VITE_CLERK_PUBLISHABLE_KEY env var.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
brkalowand others added 2 commits January 21, 2026 21:19
When environment variables are not set, return undefined instead of empty
string. This prevents overriding downstream defaults (like those in
@clerk/react-router) with empty strings, which can cause different behavior
than undefined.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ibrary mode
URL environment variable fallbacks (signInUrl, signUpUrl, etc.) were
causing compatibility issues with @clerk/react-router in library mode.
Only publishableKey env var fallback is now supported.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@brkalow
brkalow merged commit c77ca7e into mainJan 22, 2026
40 checks passed
@brkalow
brkalow deleted the brkalow/vite-env-fallback branch January 22, 2026 19:29
nikosdouvlis pushed a commit that referenced this pull request Jan 27, 2026
#7634)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Sign up for freeto 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

@brkalow@jacekradko@thiskevinwang
, '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" + '
feat(react): Add env variable fallback for publishableKey in Vite apps by brkalow · Pull Request #7634 · clerk/javascript · GitHub
Skip to content

feat(react): Add env variable fallback for publishableKey in Vite apps - #7634

Merged
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback
Jan 22, 2026
Merged

feat(react): Add env variable fallback for publishableKey in Vite apps#7634
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback

Conversation

@brkalow

@brkalowbrkalow commented Jan 21, 2026

Copy link
Copy Markdown
Member

Summary

  • Adds automatic fallback to VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment variables when publishableKey is not explicitly provided to ClerkProvider
  • Enables Vite users to configure their publishable key via environment variables without manual configuration
  • Only triggers fallback when publishableKey is undefined (not empty string) to maintain compatibility with framework SDKs like Next.js

Closes AIE-431

Test plan

  • Added unit tests for getPublishableKeyFromEnv utility function
  • Added unit tests for getOrCreateInstance env var fallback behavior
  • Tests cover priority order: explicit prop > VITE_ prefixed > unprefixed
  • Tests verify empty string does not trigger fallback (framework SDK compatibility)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • ClerkProvider now automatically retrieves your publishableKey from environment variables (VITE_CLERK_PUBLISHABLE_KEY or CLERK_PUBLISHABLE_KEY) when not explicitly provided, streamlining setup and configuration.

✏️ Tip: You can customize this high-level summary in your review settings.

When publishableKey is not explicitly provided, the React SDK now checks
for VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment
variables. This enables Vite users to set their publishable key via
environment variables without manual configuration.
The fallback only triggers when publishableKey is undefined (not when
it's an empty string) to avoid conflicting with framework SDKs like
Next.js that may pass empty string when their env var is not set.
Closes AIE-431
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@changeset-bot

changeset-botBot commented Jan 21, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 00dc058

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

This PR includes changesets to release 6 packages
NameType
@clerk/reactMinor
@clerk/chrome-extensionPatch
@clerk/expoPatch
@clerk/nextjsPatch
@clerk/react-routerPatch
@clerk/tanstack-react-startPatch

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

@vercel

vercelBot commented Jan 21, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 22, 2026 3:37am

Request Review

@coderabbitai

coderabbitaiBot commented Jan 21, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR implements automatic environment variable fallback for the publishableKey in the Clerk React SDK. A new utility module is introduced that handles merging of options with environment variables, checking VITE_CLERK_PUBLISHABLE_KEY first, then CLERK_PUBLISHABLE_KEY. The ClerkContextProvider is updated to use this merging function. Comprehensive tests validate the fallback behavior and precedence rules, including scenarios where explicit options override environment variables and where empty strings are preserved. Integration template examples are simplified by removing explicit publishableKey props, relying instead on automatic detection.

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.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 nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title accurately summarizes the main change: adding environment variable fallback for publishableKey in Vite applications.
Linked Issues check✅ PassedThe pull request fully addresses AIE-431 by detecting Vite env vars (VITE_CLERK_PUBLISHABLE_KEY) and CLERK_PUBLISHABLE_KEY as fallback when publishableKey is not explicitly provided.
Out of Scope Changes check✅ PassedAll changes are in scope. The PR adds env variable fallback logic, utility functions, tests, and updates template examples. One minor observation: URL fallbacks (signInUrl, signUpUrl, etc.) were intentionally excluded for @clerk/react-router compatibility.

✏️ 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 Jan 21, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 00dc058

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

@jacekradkojacekradko left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍🏼

Extend the env var fallback support to include:
- signInUrl (VITE_CLERK_SIGN_IN_URL / CLERK_SIGN_IN_URL)
- signUpUrl (VITE_CLERK_SIGN_UP_URL / CLERK_SIGN_UP_URL)
- signInForceRedirectUrl
- signUpForceRedirectUrl
- signInFallbackRedirectUrl
- signUpFallbackRedirectUrl
This brings the React SDK closer to parity with the Next.js SDK
for Vite users who want to configure Clerk via environment variables.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…elper
Replace multiple individual env var getter functions with a single
mergeWithEnv helper that handles all env var fallbacks in one place.
This simplifies the isomorphicClerk code and mirrors the pattern used
in the Next.js SDK with mergeNextClerkPropsWithEnv.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ntextProvider
Move the mergeWithEnv call from IsomorphicClerk.getOrCreateInstance to
ClerkContextProvider, where the options enter the public API. This:
- Follows the same pattern as Next.js SDK (mergeNextClerkPropsWithEnv)
- Keeps IsomorphicClerk focused on initialization, not configuration resolution
- Makes the env var handling visible at the API boundary
- Maintains clearer separation of concerns
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move mergeWithEnv tests to dedicated file at src/utils/__tests__/envVariables.test.ts,
keeping isomorphicClerk.test.ts focused on IsomorphicClerk-specific behavior.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…lback
Remove explicit publishableKey props from ClerkProvider in react-vite and
custom-flows-react-vite templates since ClerkProvider now automatically
reads from VITE_CLERK_PUBLISHABLE_KEY env var.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
brkalowand others added 2 commits January 21, 2026 21:19
When environment variables are not set, return undefined instead of empty
string. This prevents overriding downstream defaults (like those in
@clerk/react-router) with empty strings, which can cause different behavior
than undefined.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ibrary mode
URL environment variable fallbacks (signInUrl, signUpUrl, etc.) were
causing compatibility issues with @clerk/react-router in library mode.
Only publishableKey env var fallback is now supported.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@brkalow
brkalow merged commit c77ca7e into mainJan 22, 2026
40 checks passed
@brkalow
brkalow deleted the brkalow/vite-env-fallback branch January 22, 2026 19:29
nikosdouvlis pushed a commit that referenced this pull request Jan 27, 2026
#7634)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Sign up for freeto 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

@brkalow@jacekradko@thiskevinwang
, '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('^' + ".*" + ' feat(react): Add env variable fallback for publishableKey in Vite apps by brkalow · Pull Request #7634 · clerk/javascript · GitHub
Skip to content

feat(react): Add env variable fallback for publishableKey in Vite apps - #7634

Merged
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback
Jan 22, 2026
Merged

feat(react): Add env variable fallback for publishableKey in Vite apps#7634
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback

Conversation

@brkalow

@brkalowbrkalow commented Jan 21, 2026

Copy link
Copy Markdown
Member

Summary

  • Adds automatic fallback to VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment variables when publishableKey is not explicitly provided to ClerkProvider
  • Enables Vite users to configure their publishable key via environment variables without manual configuration
  • Only triggers fallback when publishableKey is undefined (not empty string) to maintain compatibility with framework SDKs like Next.js

Closes AIE-431

Test plan

  • Added unit tests for getPublishableKeyFromEnv utility function
  • Added unit tests for getOrCreateInstance env var fallback behavior
  • Tests cover priority order: explicit prop > VITE_ prefixed > unprefixed
  • Tests verify empty string does not trigger fallback (framework SDK compatibility)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • ClerkProvider now automatically retrieves your publishableKey from environment variables (VITE_CLERK_PUBLISHABLE_KEY or CLERK_PUBLISHABLE_KEY) when not explicitly provided, streamlining setup and configuration.

✏️ Tip: You can customize this high-level summary in your review settings.

When publishableKey is not explicitly provided, the React SDK now checks
for VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment
variables. This enables Vite users to set their publishable key via
environment variables without manual configuration.
The fallback only triggers when publishableKey is undefined (not when
it's an empty string) to avoid conflicting with framework SDKs like
Next.js that may pass empty string when their env var is not set.
Closes AIE-431
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@changeset-bot

changeset-botBot commented Jan 21, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 00dc058

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

This PR includes changesets to release 6 packages
NameType
@clerk/reactMinor
@clerk/chrome-extensionPatch
@clerk/expoPatch
@clerk/nextjsPatch
@clerk/react-routerPatch
@clerk/tanstack-react-startPatch

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

@vercel

vercelBot commented Jan 21, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 22, 2026 3:37am

Request Review

@coderabbitai

coderabbitaiBot commented Jan 21, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR implements automatic environment variable fallback for the publishableKey in the Clerk React SDK. A new utility module is introduced that handles merging of options with environment variables, checking VITE_CLERK_PUBLISHABLE_KEY first, then CLERK_PUBLISHABLE_KEY. The ClerkContextProvider is updated to use this merging function. Comprehensive tests validate the fallback behavior and precedence rules, including scenarios where explicit options override environment variables and where empty strings are preserved. Integration template examples are simplified by removing explicit publishableKey props, relying instead on automatic detection.

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.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 nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title accurately summarizes the main change: adding environment variable fallback for publishableKey in Vite applications.
Linked Issues check✅ PassedThe pull request fully addresses AIE-431 by detecting Vite env vars (VITE_CLERK_PUBLISHABLE_KEY) and CLERK_PUBLISHABLE_KEY as fallback when publishableKey is not explicitly provided.
Out of Scope Changes check✅ PassedAll changes are in scope. The PR adds env variable fallback logic, utility functions, tests, and updates template examples. One minor observation: URL fallbacks (signInUrl, signUpUrl, etc.) were intentionally excluded for @clerk/react-router compatibility.

✏️ 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 Jan 21, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 00dc058

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

@jacekradkojacekradko left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍🏼

Extend the env var fallback support to include:
- signInUrl (VITE_CLERK_SIGN_IN_URL / CLERK_SIGN_IN_URL)
- signUpUrl (VITE_CLERK_SIGN_UP_URL / CLERK_SIGN_UP_URL)
- signInForceRedirectUrl
- signUpForceRedirectUrl
- signInFallbackRedirectUrl
- signUpFallbackRedirectUrl
This brings the React SDK closer to parity with the Next.js SDK
for Vite users who want to configure Clerk via environment variables.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…elper
Replace multiple individual env var getter functions with a single
mergeWithEnv helper that handles all env var fallbacks in one place.
This simplifies the isomorphicClerk code and mirrors the pattern used
in the Next.js SDK with mergeNextClerkPropsWithEnv.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ntextProvider
Move the mergeWithEnv call from IsomorphicClerk.getOrCreateInstance to
ClerkContextProvider, where the options enter the public API. This:
- Follows the same pattern as Next.js SDK (mergeNextClerkPropsWithEnv)
- Keeps IsomorphicClerk focused on initialization, not configuration resolution
- Makes the env var handling visible at the API boundary
- Maintains clearer separation of concerns
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move mergeWithEnv tests to dedicated file at src/utils/__tests__/envVariables.test.ts,
keeping isomorphicClerk.test.ts focused on IsomorphicClerk-specific behavior.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…lback
Remove explicit publishableKey props from ClerkProvider in react-vite and
custom-flows-react-vite templates since ClerkProvider now automatically
reads from VITE_CLERK_PUBLISHABLE_KEY env var.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
brkalowand others added 2 commits January 21, 2026 21:19
When environment variables are not set, return undefined instead of empty
string. This prevents overriding downstream defaults (like those in
@clerk/react-router) with empty strings, which can cause different behavior
than undefined.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ibrary mode
URL environment variable fallbacks (signInUrl, signUpUrl, etc.) were
causing compatibility issues with @clerk/react-router in library mode.
Only publishableKey env var fallback is now supported.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@brkalow
brkalow merged commit c77ca7e into mainJan 22, 2026
40 checks passed
@brkalow
brkalow deleted the brkalow/vite-env-fallback branch January 22, 2026 19:29
nikosdouvlis pushed a commit that referenced this pull request Jan 27, 2026
#7634)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Sign up for freeto 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

@brkalow@jacekradko@thiskevinwang
, '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('^' + ".*" + ' feat(react): Add env variable fallback for publishableKey in Vite apps by brkalow · Pull Request #7634 · clerk/javascript · GitHub
Skip to content

feat(react): Add env variable fallback for publishableKey in Vite apps - #7634

Merged
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback
Jan 22, 2026
Merged

feat(react): Add env variable fallback for publishableKey in Vite apps#7634
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback

Conversation

@brkalow

@brkalowbrkalow commented Jan 21, 2026

Copy link
Copy Markdown
Member

Summary

  • Adds automatic fallback to VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment variables when publishableKey is not explicitly provided to ClerkProvider
  • Enables Vite users to configure their publishable key via environment variables without manual configuration
  • Only triggers fallback when publishableKey is undefined (not empty string) to maintain compatibility with framework SDKs like Next.js

Closes AIE-431

Test plan

  • Added unit tests for getPublishableKeyFromEnv utility function
  • Added unit tests for getOrCreateInstance env var fallback behavior
  • Tests cover priority order: explicit prop > VITE_ prefixed > unprefixed
  • Tests verify empty string does not trigger fallback (framework SDK compatibility)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • ClerkProvider now automatically retrieves your publishableKey from environment variables (VITE_CLERK_PUBLISHABLE_KEY or CLERK_PUBLISHABLE_KEY) when not explicitly provided, streamlining setup and configuration.

✏️ Tip: You can customize this high-level summary in your review settings.

When publishableKey is not explicitly provided, the React SDK now checks
for VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment
variables. This enables Vite users to set their publishable key via
environment variables without manual configuration.
The fallback only triggers when publishableKey is undefined (not when
it's an empty string) to avoid conflicting with framework SDKs like
Next.js that may pass empty string when their env var is not set.
Closes AIE-431
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@changeset-bot

changeset-botBot commented Jan 21, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 00dc058

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

This PR includes changesets to release 6 packages
NameType
@clerk/reactMinor
@clerk/chrome-extensionPatch
@clerk/expoPatch
@clerk/nextjsPatch
@clerk/react-routerPatch
@clerk/tanstack-react-startPatch

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

@vercel

vercelBot commented Jan 21, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 22, 2026 3:37am

Request Review

@coderabbitai

coderabbitaiBot commented Jan 21, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR implements automatic environment variable fallback for the publishableKey in the Clerk React SDK. A new utility module is introduced that handles merging of options with environment variables, checking VITE_CLERK_PUBLISHABLE_KEY first, then CLERK_PUBLISHABLE_KEY. The ClerkContextProvider is updated to use this merging function. Comprehensive tests validate the fallback behavior and precedence rules, including scenarios where explicit options override environment variables and where empty strings are preserved. Integration template examples are simplified by removing explicit publishableKey props, relying instead on automatic detection.

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.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 nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title accurately summarizes the main change: adding environment variable fallback for publishableKey in Vite applications.
Linked Issues check✅ PassedThe pull request fully addresses AIE-431 by detecting Vite env vars (VITE_CLERK_PUBLISHABLE_KEY) and CLERK_PUBLISHABLE_KEY as fallback when publishableKey is not explicitly provided.
Out of Scope Changes check✅ PassedAll changes are in scope. The PR adds env variable fallback logic, utility functions, tests, and updates template examples. One minor observation: URL fallbacks (signInUrl, signUpUrl, etc.) were intentionally excluded for @clerk/react-router compatibility.

✏️ 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 Jan 21, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 00dc058

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

@jacekradkojacekradko left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍🏼

Extend the env var fallback support to include:
- signInUrl (VITE_CLERK_SIGN_IN_URL / CLERK_SIGN_IN_URL)
- signUpUrl (VITE_CLERK_SIGN_UP_URL / CLERK_SIGN_UP_URL)
- signInForceRedirectUrl
- signUpForceRedirectUrl
- signInFallbackRedirectUrl
- signUpFallbackRedirectUrl
This brings the React SDK closer to parity with the Next.js SDK
for Vite users who want to configure Clerk via environment variables.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…elper
Replace multiple individual env var getter functions with a single
mergeWithEnv helper that handles all env var fallbacks in one place.
This simplifies the isomorphicClerk code and mirrors the pattern used
in the Next.js SDK with mergeNextClerkPropsWithEnv.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ntextProvider
Move the mergeWithEnv call from IsomorphicClerk.getOrCreateInstance to
ClerkContextProvider, where the options enter the public API. This:
- Follows the same pattern as Next.js SDK (mergeNextClerkPropsWithEnv)
- Keeps IsomorphicClerk focused on initialization, not configuration resolution
- Makes the env var handling visible at the API boundary
- Maintains clearer separation of concerns
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move mergeWithEnv tests to dedicated file at src/utils/__tests__/envVariables.test.ts,
keeping isomorphicClerk.test.ts focused on IsomorphicClerk-specific behavior.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…lback
Remove explicit publishableKey props from ClerkProvider in react-vite and
custom-flows-react-vite templates since ClerkProvider now automatically
reads from VITE_CLERK_PUBLISHABLE_KEY env var.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
brkalowand others added 2 commits January 21, 2026 21:19
When environment variables are not set, return undefined instead of empty
string. This prevents overriding downstream defaults (like those in
@clerk/react-router) with empty strings, which can cause different behavior
than undefined.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ibrary mode
URL environment variable fallbacks (signInUrl, signUpUrl, etc.) were
causing compatibility issues with @clerk/react-router in library mode.
Only publishableKey env var fallback is now supported.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@brkalow
brkalow merged commit c77ca7e into mainJan 22, 2026
40 checks passed
@brkalow
brkalow deleted the brkalow/vite-env-fallback branch January 22, 2026 19:29
nikosdouvlis pushed a commit that referenced this pull request Jan 27, 2026
#7634)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Sign up for freeto 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

@brkalow@jacekradko@thiskevinwang
, '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" + ' feat(react): Add env variable fallback for publishableKey in Vite apps by brkalow · Pull Request #7634 · clerk/javascript · GitHub
Skip to content

feat(react): Add env variable fallback for publishableKey in Vite apps - #7634

Merged
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback
Jan 22, 2026
Merged

feat(react): Add env variable fallback for publishableKey in Vite apps#7634
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback

Conversation

@brkalow

@brkalowbrkalow commented Jan 21, 2026

Copy link
Copy Markdown
Member

Summary

  • Adds automatic fallback to VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment variables when publishableKey is not explicitly provided to ClerkProvider
  • Enables Vite users to configure their publishable key via environment variables without manual configuration
  • Only triggers fallback when publishableKey is undefined (not empty string) to maintain compatibility with framework SDKs like Next.js

Closes AIE-431

Test plan

  • Added unit tests for getPublishableKeyFromEnv utility function
  • Added unit tests for getOrCreateInstance env var fallback behavior
  • Tests cover priority order: explicit prop > VITE_ prefixed > unprefixed
  • Tests verify empty string does not trigger fallback (framework SDK compatibility)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • ClerkProvider now automatically retrieves your publishableKey from environment variables (VITE_CLERK_PUBLISHABLE_KEY or CLERK_PUBLISHABLE_KEY) when not explicitly provided, streamlining setup and configuration.

✏️ Tip: You can customize this high-level summary in your review settings.

When publishableKey is not explicitly provided, the React SDK now checks
for VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment
variables. This enables Vite users to set their publishable key via
environment variables without manual configuration.
The fallback only triggers when publishableKey is undefined (not when
it's an empty string) to avoid conflicting with framework SDKs like
Next.js that may pass empty string when their env var is not set.
Closes AIE-431
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@changeset-bot

changeset-botBot commented Jan 21, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 00dc058

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

This PR includes changesets to release 6 packages
NameType
@clerk/reactMinor
@clerk/chrome-extensionPatch
@clerk/expoPatch
@clerk/nextjsPatch
@clerk/react-routerPatch
@clerk/tanstack-react-startPatch

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

@vercel

vercelBot commented Jan 21, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 22, 2026 3:37am

Request Review

@coderabbitai

coderabbitaiBot commented Jan 21, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR implements automatic environment variable fallback for the publishableKey in the Clerk React SDK. A new utility module is introduced that handles merging of options with environment variables, checking VITE_CLERK_PUBLISHABLE_KEY first, then CLERK_PUBLISHABLE_KEY. The ClerkContextProvider is updated to use this merging function. Comprehensive tests validate the fallback behavior and precedence rules, including scenarios where explicit options override environment variables and where empty strings are preserved. Integration template examples are simplified by removing explicit publishableKey props, relying instead on automatic detection.

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.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 nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title accurately summarizes the main change: adding environment variable fallback for publishableKey in Vite applications.
Linked Issues check✅ PassedThe pull request fully addresses AIE-431 by detecting Vite env vars (VITE_CLERK_PUBLISHABLE_KEY) and CLERK_PUBLISHABLE_KEY as fallback when publishableKey is not explicitly provided.
Out of Scope Changes check✅ PassedAll changes are in scope. The PR adds env variable fallback logic, utility functions, tests, and updates template examples. One minor observation: URL fallbacks (signInUrl, signUpUrl, etc.) were intentionally excluded for @clerk/react-router compatibility.

✏️ 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 Jan 21, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 00dc058

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

@jacekradkojacekradko left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍🏼

Extend the env var fallback support to include:
- signInUrl (VITE_CLERK_SIGN_IN_URL / CLERK_SIGN_IN_URL)
- signUpUrl (VITE_CLERK_SIGN_UP_URL / CLERK_SIGN_UP_URL)
- signInForceRedirectUrl
- signUpForceRedirectUrl
- signInFallbackRedirectUrl
- signUpFallbackRedirectUrl
This brings the React SDK closer to parity with the Next.js SDK
for Vite users who want to configure Clerk via environment variables.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…elper
Replace multiple individual env var getter functions with a single
mergeWithEnv helper that handles all env var fallbacks in one place.
This simplifies the isomorphicClerk code and mirrors the pattern used
in the Next.js SDK with mergeNextClerkPropsWithEnv.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ntextProvider
Move the mergeWithEnv call from IsomorphicClerk.getOrCreateInstance to
ClerkContextProvider, where the options enter the public API. This:
- Follows the same pattern as Next.js SDK (mergeNextClerkPropsWithEnv)
- Keeps IsomorphicClerk focused on initialization, not configuration resolution
- Makes the env var handling visible at the API boundary
- Maintains clearer separation of concerns
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move mergeWithEnv tests to dedicated file at src/utils/__tests__/envVariables.test.ts,
keeping isomorphicClerk.test.ts focused on IsomorphicClerk-specific behavior.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…lback
Remove explicit publishableKey props from ClerkProvider in react-vite and
custom-flows-react-vite templates since ClerkProvider now automatically
reads from VITE_CLERK_PUBLISHABLE_KEY env var.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
brkalowand others added 2 commits January 21, 2026 21:19
When environment variables are not set, return undefined instead of empty
string. This prevents overriding downstream defaults (like those in
@clerk/react-router) with empty strings, which can cause different behavior
than undefined.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ibrary mode
URL environment variable fallbacks (signInUrl, signUpUrl, etc.) were
causing compatibility issues with @clerk/react-router in library mode.
Only publishableKey env var fallback is now supported.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@brkalow
brkalow merged commit c77ca7e into mainJan 22, 2026
40 checks passed
@brkalow
brkalow deleted the brkalow/vite-env-fallback branch January 22, 2026 19:29
nikosdouvlis pushed a commit that referenced this pull request Jan 27, 2026
#7634)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Sign up for freeto 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

@brkalow@jacekradko@thiskevinwang
, '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('^' + ".*" + ' feat(react): Add env variable fallback for publishableKey in Vite apps by brkalow · Pull Request #7634 · clerk/javascript · GitHub
Skip to content

feat(react): Add env variable fallback for publishableKey in Vite apps - #7634

Merged
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback
Jan 22, 2026
Merged

feat(react): Add env variable fallback for publishableKey in Vite apps#7634
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback

Conversation

@brkalow

@brkalowbrkalow commented Jan 21, 2026

Copy link
Copy Markdown
Member

Summary

  • Adds automatic fallback to VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment variables when publishableKey is not explicitly provided to ClerkProvider
  • Enables Vite users to configure their publishable key via environment variables without manual configuration
  • Only triggers fallback when publishableKey is undefined (not empty string) to maintain compatibility with framework SDKs like Next.js

Closes AIE-431

Test plan

  • Added unit tests for getPublishableKeyFromEnv utility function
  • Added unit tests for getOrCreateInstance env var fallback behavior
  • Tests cover priority order: explicit prop > VITE_ prefixed > unprefixed
  • Tests verify empty string does not trigger fallback (framework SDK compatibility)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • ClerkProvider now automatically retrieves your publishableKey from environment variables (VITE_CLERK_PUBLISHABLE_KEY or CLERK_PUBLISHABLE_KEY) when not explicitly provided, streamlining setup and configuration.

✏️ Tip: You can customize this high-level summary in your review settings.

When publishableKey is not explicitly provided, the React SDK now checks
for VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment
variables. This enables Vite users to set their publishable key via
environment variables without manual configuration.
The fallback only triggers when publishableKey is undefined (not when
it's an empty string) to avoid conflicting with framework SDKs like
Next.js that may pass empty string when their env var is not set.
Closes AIE-431
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@changeset-bot

changeset-botBot commented Jan 21, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 00dc058

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

This PR includes changesets to release 6 packages
NameType
@clerk/reactMinor
@clerk/chrome-extensionPatch
@clerk/expoPatch
@clerk/nextjsPatch
@clerk/react-routerPatch
@clerk/tanstack-react-startPatch

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

@vercel

vercelBot commented Jan 21, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 22, 2026 3:37am

Request Review

@coderabbitai

coderabbitaiBot commented Jan 21, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR implements automatic environment variable fallback for the publishableKey in the Clerk React SDK. A new utility module is introduced that handles merging of options with environment variables, checking VITE_CLERK_PUBLISHABLE_KEY first, then CLERK_PUBLISHABLE_KEY. The ClerkContextProvider is updated to use this merging function. Comprehensive tests validate the fallback behavior and precedence rules, including scenarios where explicit options override environment variables and where empty strings are preserved. Integration template examples are simplified by removing explicit publishableKey props, relying instead on automatic detection.

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.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 nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title accurately summarizes the main change: adding environment variable fallback for publishableKey in Vite applications.
Linked Issues check✅ PassedThe pull request fully addresses AIE-431 by detecting Vite env vars (VITE_CLERK_PUBLISHABLE_KEY) and CLERK_PUBLISHABLE_KEY as fallback when publishableKey is not explicitly provided.
Out of Scope Changes check✅ PassedAll changes are in scope. The PR adds env variable fallback logic, utility functions, tests, and updates template examples. One minor observation: URL fallbacks (signInUrl, signUpUrl, etc.) were intentionally excluded for @clerk/react-router compatibility.

✏️ 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 Jan 21, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 00dc058

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

@jacekradkojacekradko left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍🏼

Extend the env var fallback support to include:
- signInUrl (VITE_CLERK_SIGN_IN_URL / CLERK_SIGN_IN_URL)
- signUpUrl (VITE_CLERK_SIGN_UP_URL / CLERK_SIGN_UP_URL)
- signInForceRedirectUrl
- signUpForceRedirectUrl
- signInFallbackRedirectUrl
- signUpFallbackRedirectUrl
This brings the React SDK closer to parity with the Next.js SDK
for Vite users who want to configure Clerk via environment variables.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…elper
Replace multiple individual env var getter functions with a single
mergeWithEnv helper that handles all env var fallbacks in one place.
This simplifies the isomorphicClerk code and mirrors the pattern used
in the Next.js SDK with mergeNextClerkPropsWithEnv.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ntextProvider
Move the mergeWithEnv call from IsomorphicClerk.getOrCreateInstance to
ClerkContextProvider, where the options enter the public API. This:
- Follows the same pattern as Next.js SDK (mergeNextClerkPropsWithEnv)
- Keeps IsomorphicClerk focused on initialization, not configuration resolution
- Makes the env var handling visible at the API boundary
- Maintains clearer separation of concerns
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move mergeWithEnv tests to dedicated file at src/utils/__tests__/envVariables.test.ts,
keeping isomorphicClerk.test.ts focused on IsomorphicClerk-specific behavior.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…lback
Remove explicit publishableKey props from ClerkProvider in react-vite and
custom-flows-react-vite templates since ClerkProvider now automatically
reads from VITE_CLERK_PUBLISHABLE_KEY env var.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
brkalowand others added 2 commits January 21, 2026 21:19
When environment variables are not set, return undefined instead of empty
string. This prevents overriding downstream defaults (like those in
@clerk/react-router) with empty strings, which can cause different behavior
than undefined.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ibrary mode
URL environment variable fallbacks (signInUrl, signUpUrl, etc.) were
causing compatibility issues with @clerk/react-router in library mode.
Only publishableKey env var fallback is now supported.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@brkalow
brkalow merged commit c77ca7e into mainJan 22, 2026
40 checks passed
@brkalow
brkalow deleted the brkalow/vite-env-fallback branch January 22, 2026 19:29
nikosdouvlis pushed a commit that referenced this pull request Jan 27, 2026
#7634)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Sign up for freeto 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

@brkalow@jacekradko@thiskevinwang
, '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); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(react): Add env variable fallback for publishableKey in Vite apps by brkalow · Pull Request #7634 · clerk/javascript · GitHub
Skip to content

feat(react): Add env variable fallback for publishableKey in Vite apps - #7634

Merged
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback
Jan 22, 2026
Merged

feat(react): Add env variable fallback for publishableKey in Vite apps#7634
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback

Conversation

@brkalow

@brkalowbrkalow commented Jan 21, 2026

Copy link
Copy Markdown
Member

Summary

  • Adds automatic fallback to VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment variables when publishableKey is not explicitly provided to ClerkProvider
  • Enables Vite users to configure their publishable key via environment variables without manual configuration
  • Only triggers fallback when publishableKey is undefined (not empty string) to maintain compatibility with framework SDKs like Next.js

Closes AIE-431

Test plan

  • Added unit tests for getPublishableKeyFromEnv utility function
  • Added unit tests for getOrCreateInstance env var fallback behavior
  • Tests cover priority order: explicit prop > VITE_ prefixed > unprefixed
  • Tests verify empty string does not trigger fallback (framework SDK compatibility)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • ClerkProvider now automatically retrieves your publishableKey from environment variables (VITE_CLERK_PUBLISHABLE_KEY or CLERK_PUBLISHABLE_KEY) when not explicitly provided, streamlining setup and configuration.

✏️ Tip: You can customize this high-level summary in your review settings.

When publishableKey is not explicitly provided, the React SDK now checks
for VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment
variables. This enables Vite users to set their publishable key via
environment variables without manual configuration.
The fallback only triggers when publishableKey is undefined (not when
it's an empty string) to avoid conflicting with framework SDKs like
Next.js that may pass empty string when their env var is not set.
Closes AIE-431
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@changeset-bot

changeset-botBot commented Jan 21, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 00dc058

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

This PR includes changesets to release 6 packages
NameType
@clerk/reactMinor
@clerk/chrome-extensionPatch
@clerk/expoPatch
@clerk/nextjsPatch
@clerk/react-routerPatch
@clerk/tanstack-react-startPatch

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

@vercel

vercelBot commented Jan 21, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 22, 2026 3:37am

Request Review

@coderabbitai

coderabbitaiBot commented Jan 21, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR implements automatic environment variable fallback for the publishableKey in the Clerk React SDK. A new utility module is introduced that handles merging of options with environment variables, checking VITE_CLERK_PUBLISHABLE_KEY first, then CLERK_PUBLISHABLE_KEY. The ClerkContextProvider is updated to use this merging function. Comprehensive tests validate the fallback behavior and precedence rules, including scenarios where explicit options override environment variables and where empty strings are preserved. Integration template examples are simplified by removing explicit publishableKey props, relying instead on automatic detection.

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.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 nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title accurately summarizes the main change: adding environment variable fallback for publishableKey in Vite applications.
Linked Issues check✅ PassedThe pull request fully addresses AIE-431 by detecting Vite env vars (VITE_CLERK_PUBLISHABLE_KEY) and CLERK_PUBLISHABLE_KEY as fallback when publishableKey is not explicitly provided.
Out of Scope Changes check✅ PassedAll changes are in scope. The PR adds env variable fallback logic, utility functions, tests, and updates template examples. One minor observation: URL fallbacks (signInUrl, signUpUrl, etc.) were intentionally excluded for @clerk/react-router compatibility.

✏️ 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 Jan 21, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 00dc058

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

@jacekradkojacekradko left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍🏼

Extend the env var fallback support to include:
- signInUrl (VITE_CLERK_SIGN_IN_URL / CLERK_SIGN_IN_URL)
- signUpUrl (VITE_CLERK_SIGN_UP_URL / CLERK_SIGN_UP_URL)
- signInForceRedirectUrl
- signUpForceRedirectUrl
- signInFallbackRedirectUrl
- signUpFallbackRedirectUrl
This brings the React SDK closer to parity with the Next.js SDK
for Vite users who want to configure Clerk via environment variables.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…elper
Replace multiple individual env var getter functions with a single
mergeWithEnv helper that handles all env var fallbacks in one place.
This simplifies the isomorphicClerk code and mirrors the pattern used
in the Next.js SDK with mergeNextClerkPropsWithEnv.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ntextProvider
Move the mergeWithEnv call from IsomorphicClerk.getOrCreateInstance to
ClerkContextProvider, where the options enter the public API. This:
- Follows the same pattern as Next.js SDK (mergeNextClerkPropsWithEnv)
- Keeps IsomorphicClerk focused on initialization, not configuration resolution
- Makes the env var handling visible at the API boundary
- Maintains clearer separation of concerns
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move mergeWithEnv tests to dedicated file at src/utils/__tests__/envVariables.test.ts,
keeping isomorphicClerk.test.ts focused on IsomorphicClerk-specific behavior.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…lback
Remove explicit publishableKey props from ClerkProvider in react-vite and
custom-flows-react-vite templates since ClerkProvider now automatically
reads from VITE_CLERK_PUBLISHABLE_KEY env var.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
brkalowand others added 2 commits January 21, 2026 21:19
When environment variables are not set, return undefined instead of empty
string. This prevents overriding downstream defaults (like those in
@clerk/react-router) with empty strings, which can cause different behavior
than undefined.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ibrary mode
URL environment variable fallbacks (signInUrl, signUpUrl, etc.) were
causing compatibility issues with @clerk/react-router in library mode.
Only publishableKey env var fallback is now supported.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@brkalow
brkalow merged commit c77ca7e into mainJan 22, 2026
40 checks passed
@brkalow
brkalow deleted the brkalow/vite-env-fallback branch January 22, 2026 19:29
nikosdouvlis pushed a commit that referenced this pull request Jan 27, 2026
#7634)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Sign up for freeto 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

@brkalow@jacekradko@thiskevinwang
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); feat(react): Add env variable fallback for publishableKey in Vite apps by brkalow · Pull Request #7634 · clerk/javascript · GitHub
Skip to content

feat(react): Add env variable fallback for publishableKey in Vite apps - #7634

Merged
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback
Jan 22, 2026
Merged

feat(react): Add env variable fallback for publishableKey in Vite apps#7634
brkalow merged 9 commits into
mainfrom
brkalow/vite-env-fallback

Conversation

@brkalow

@brkalowbrkalow commented Jan 21, 2026

Copy link
Copy Markdown
Member

Summary

  • Adds automatic fallback to VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment variables when publishableKey is not explicitly provided to ClerkProvider
  • Enables Vite users to configure their publishable key via environment variables without manual configuration
  • Only triggers fallback when publishableKey is undefined (not empty string) to maintain compatibility with framework SDKs like Next.js

Closes AIE-431

Test plan

  • Added unit tests for getPublishableKeyFromEnv utility function
  • Added unit tests for getOrCreateInstance env var fallback behavior
  • Tests cover priority order: explicit prop > VITE_ prefixed > unprefixed
  • Tests verify empty string does not trigger fallback (framework SDK compatibility)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • ClerkProvider now automatically retrieves your publishableKey from environment variables (VITE_CLERK_PUBLISHABLE_KEY or CLERK_PUBLISHABLE_KEY) when not explicitly provided, streamlining setup and configuration.

✏️ Tip: You can customize this high-level summary in your review settings.

When publishableKey is not explicitly provided, the React SDK now checks
for VITE_CLERK_PUBLISHABLE_KEY and CLERK_PUBLISHABLE_KEY environment
variables. This enables Vite users to set their publishable key via
environment variables without manual configuration.
The fallback only triggers when publishableKey is undefined (not when
it's an empty string) to avoid conflicting with framework SDKs like
Next.js that may pass empty string when their env var is not set.
Closes AIE-431
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@changeset-bot

changeset-botBot commented Jan 21, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 00dc058

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

This PR includes changesets to release 6 packages
NameType
@clerk/reactMinor
@clerk/chrome-extensionPatch
@clerk/expoPatch
@clerk/nextjsPatch
@clerk/react-routerPatch
@clerk/tanstack-react-startPatch

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

@vercel

vercelBot commented Jan 21, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 22, 2026 3:37am

Request Review

@coderabbitai

coderabbitaiBot commented Jan 21, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR implements automatic environment variable fallback for the publishableKey in the Clerk React SDK. A new utility module is introduced that handles merging of options with environment variables, checking VITE_CLERK_PUBLISHABLE_KEY first, then CLERK_PUBLISHABLE_KEY. The ClerkContextProvider is updated to use this merging function. Comprehensive tests validate the fallback behavior and precedence rules, including scenarios where explicit options override environment variables and where empty strings are preserved. Integration template examples are simplified by removing explicit publishableKey props, relying instead on automatic detection.

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.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 nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title accurately summarizes the main change: adding environment variable fallback for publishableKey in Vite applications.
Linked Issues check✅ PassedThe pull request fully addresses AIE-431 by detecting Vite env vars (VITE_CLERK_PUBLISHABLE_KEY) and CLERK_PUBLISHABLE_KEY as fallback when publishableKey is not explicitly provided.
Out of Scope Changes check✅ PassedAll changes are in scope. The PR adds env variable fallback logic, utility functions, tests, and updates template examples. One minor observation: URL fallbacks (signInUrl, signUpUrl, etc.) were intentionally excluded for @clerk/react-router compatibility.

✏️ 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 Jan 21, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 00dc058

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

@jacekradkojacekradko left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍🏼

Extend the env var fallback support to include:
- signInUrl (VITE_CLERK_SIGN_IN_URL / CLERK_SIGN_IN_URL)
- signUpUrl (VITE_CLERK_SIGN_UP_URL / CLERK_SIGN_UP_URL)
- signInForceRedirectUrl
- signUpForceRedirectUrl
- signInFallbackRedirectUrl
- signUpFallbackRedirectUrl
This brings the React SDK closer to parity with the Next.js SDK
for Vite users who want to configure Clerk via environment variables.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…elper
Replace multiple individual env var getter functions with a single
mergeWithEnv helper that handles all env var fallbacks in one place.
This simplifies the isomorphicClerk code and mirrors the pattern used
in the Next.js SDK with mergeNextClerkPropsWithEnv.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ntextProvider
Move the mergeWithEnv call from IsomorphicClerk.getOrCreateInstance to
ClerkContextProvider, where the options enter the public API. This:
- Follows the same pattern as Next.js SDK (mergeNextClerkPropsWithEnv)
- Keeps IsomorphicClerk focused on initialization, not configuration resolution
- Makes the env var handling visible at the API boundary
- Maintains clearer separation of concerns
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move mergeWithEnv tests to dedicated file at src/utils/__tests__/envVariables.test.ts,
keeping isomorphicClerk.test.ts focused on IsomorphicClerk-specific behavior.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…lback
Remove explicit publishableKey props from ClerkProvider in react-vite and
custom-flows-react-vite templates since ClerkProvider now automatically
reads from VITE_CLERK_PUBLISHABLE_KEY env var.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
brkalowand others added 2 commits January 21, 2026 21:19
When environment variables are not set, return undefined instead of empty
string. This prevents overriding downstream defaults (like those in
@clerk/react-router) with empty strings, which can cause different behavior
than undefined.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ibrary mode
URL environment variable fallbacks (signInUrl, signUpUrl, etc.) were
causing compatibility issues with @clerk/react-router in library mode.
Only publishableKey env var fallback is now supported.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@brkalow
brkalow merged commit c77ca7e into mainJan 22, 2026
40 checks passed
@brkalow
brkalow deleted the brkalow/vite-env-fallback branch January 22, 2026 19:29
nikosdouvlis pushed a commit that referenced this pull request Jan 27, 2026
#7634)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Sign up for freeto 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

@brkalow@jacekradko@thiskevinwang