Skip to content

fix(expo): Make publishableKey prop required and remove env var fallb… - #7655

Merged
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop
Jan 27, 2026
Merged

fix(expo): Make publishableKey prop required and remove env var fallb…#7655
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop

Conversation

@chriscanin

@chriscaninchriscanin commented Jan 22, 2026

Copy link
Copy Markdown
Contributor

Description

  • Make publishableKey a required prop since env vars in node_modules aren't inlined in production builds
  • Fixes issue reported by Kadi regarding TestFlight/Google Play crashes

https://linear.app/clerk/issue/MOBILE-393/remove-env-var-fallback-require-publishablekey-prop

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Summary by CodeRabbit

  • Breaking Changes
    • The publishableKey prop on ClerkProvider is now required (was optional).
    • Environment variable fallbacks for the publishable key are removed — supply the key explicitly when configuring ClerkProvider.
    • Migration: update app initialization to pass your publishable key directly into ClerkProvider.

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

@changeset-bot

changeset-botBot commented Jan 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 7cae015

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

This PR includes changesets to release 1 package
NameType
@clerk/expoMajor

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 22, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 26, 2026 4:12pm

Request Review

@pkg-pr-new

pkg-pr-newBot commented Jan 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 7cae015

@coderabbitai

coderabbitaiBot commented Jan 22, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR makes publishableKey a required prop on ClerkProvider and removes runtime environment-variable fallbacks (EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY / CLERK_PUBLISHABLE_KEY). Initialization now uses the explicit prop value; the singleton default publishable key was changed from environment-variable fallbacks to an empty string. A changeset documents this breaking change and provides migration guidance.

🚥 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: making publishableKey required and removing environment variable fallbacks, which directly addresses the primary objective.
Linked Issues check✅ PassedThe pull request fully implements the MOBILE-393 objective: publishableKey is now required in ClerkProviderProps, environment variable fallbacks are removed, and the fix addresses production build crashes.
Out of Scope Changes check✅ PassedAll changes directly address MOBILE-393 requirements: ClerkProvider prop updates, environment variable fallback removal, and createClerkInstance default changes. No out-of-scope modifications detected.

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


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/expo/src/provider/singleton/createClerkInstance.ts (1)

30-40: Add regression tests for required publishableKey behavior.

This is a breaking change removing env fallbacks; please add/adjust tests to cover missing-key errors and instance reuse to prevent regressions before merge. As per coding guidelines, add tests for this change.

Comment thread.changeset/kadi-env-var-fix.md Outdated

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Looking good! Let's provide a clear migration instruction

chriscaninand others added 2 commits January 26, 2026 08:11
Co-authored-by: Robert Soriano <sorianorobertc@gmail.com>

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @.changeset/kadi-env-var-fix.md:
- Around line 11-16: Replace the unchecked non-null assertion on
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by validating it before use: read
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY into publishableKey, check that
publishableKey is defined/non-empty and if not either throw a clear error (with
context) or provide a safe fallback, and only then pass publishableKey into
<ClerkProvider> so the app won't crash at runtime; locate the usage by the
publishableKey variable and the <ClerkProvider> component to apply the check.

Comment on lines +11 to +16
```tsx
const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;

<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>

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.

⚠️ Potential issue | 🔴 Critical

Add validation to prevent undefined publishableKey.

The migration example uses the non-null assertion operator (!) without validation. If EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY is not set, the app will crash—exactly the issue this PR aims to prevent.

✅ Proposed fix with proper error handling
-const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;+const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY;++if (!publishableKey) {+ throw new Error('Missing Publishable Key. Please set EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY in your .env file.');+}
<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>
🤖 Prompt for AI Agents
In @.changeset/kadi-env-var-fix.md around lines 11 - 16, Replace the unchecked
non-null assertion on process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by
validating it before use: read process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
into publishableKey, check that publishableKey is defined/non-empty and if not
either throw a clear error (with context) or provide a safe fallback, and only
then pass publishableKey into <ClerkProvider> so the app won't crash at runtime;
locate the usage by the publishableKey variable and the <ClerkProvider>
component to apply the check.

@wobsoriano

Copy link
Copy Markdown
Member

!allow-major

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Awesome, thank you for fixing this!

@wobsoriano
wobsoriano merged commit cc799e6 into mainJan 27, 2026
39 of 42 checks passed
@wobsoriano
wobsoriano deleted the chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop branch January 27, 2026 16:28
@chriscanin

Copy link
Copy Markdown
ContributorAuthor

Hi @SarahSoutoul I realized this morning that we will need a docs update because of this change, as the docs currently show examples where the publishable key is not passed to the clerkprovider. That is now required.

Added a docs PR here:
clerk/clerk-docs#3008

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

fix(expo): Make publishableKey prop required and remove env var fallb… - #7655

Merged
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop
Jan 27, 2026
Merged

fix(expo): Make publishableKey prop required and remove env var fallb…#7655
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop

Conversation

@chriscanin

@chriscaninchriscanin commented Jan 22, 2026

Copy link
Copy Markdown
Contributor

Description

  • Make publishableKey a required prop since env vars in node_modules aren't inlined in production builds
  • Fixes issue reported by Kadi regarding TestFlight/Google Play crashes

https://linear.app/clerk/issue/MOBILE-393/remove-env-var-fallback-require-publishablekey-prop

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Summary by CodeRabbit

  • Breaking Changes
    • The publishableKey prop on ClerkProvider is now required (was optional).
    • Environment variable fallbacks for the publishable key are removed — supply the key explicitly when configuring ClerkProvider.
    • Migration: update app initialization to pass your publishable key directly into ClerkProvider.

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

@changeset-bot

changeset-botBot commented Jan 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 7cae015

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

This PR includes changesets to release 1 package
NameType
@clerk/expoMajor

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 22, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 26, 2026 4:12pm

Request Review

@pkg-pr-new

pkg-pr-newBot commented Jan 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 7cae015

@coderabbitai

coderabbitaiBot commented Jan 22, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR makes publishableKey a required prop on ClerkProvider and removes runtime environment-variable fallbacks (EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY / CLERK_PUBLISHABLE_KEY). Initialization now uses the explicit prop value; the singleton default publishable key was changed from environment-variable fallbacks to an empty string. A changeset documents this breaking change and provides migration guidance.

🚥 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: making publishableKey required and removing environment variable fallbacks, which directly addresses the primary objective.
Linked Issues check✅ PassedThe pull request fully implements the MOBILE-393 objective: publishableKey is now required in ClerkProviderProps, environment variable fallbacks are removed, and the fix addresses production build crashes.
Out of Scope Changes check✅ PassedAll changes directly address MOBILE-393 requirements: ClerkProvider prop updates, environment variable fallback removal, and createClerkInstance default changes. No out-of-scope modifications detected.

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


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/expo/src/provider/singleton/createClerkInstance.ts (1)

30-40: Add regression tests for required publishableKey behavior.

This is a breaking change removing env fallbacks; please add/adjust tests to cover missing-key errors and instance reuse to prevent regressions before merge. As per coding guidelines, add tests for this change.

Comment thread.changeset/kadi-env-var-fix.md Outdated

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Looking good! Let's provide a clear migration instruction

chriscaninand others added 2 commits January 26, 2026 08:11
Co-authored-by: Robert Soriano <sorianorobertc@gmail.com>

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @.changeset/kadi-env-var-fix.md:
- Around line 11-16: Replace the unchecked non-null assertion on
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by validating it before use: read
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY into publishableKey, check that
publishableKey is defined/non-empty and if not either throw a clear error (with
context) or provide a safe fallback, and only then pass publishableKey into
<ClerkProvider> so the app won't crash at runtime; locate the usage by the
publishableKey variable and the <ClerkProvider> component to apply the check.

Comment on lines +11 to +16
```tsx
const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;

<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>

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.

⚠️ Potential issue | 🔴 Critical

Add validation to prevent undefined publishableKey.

The migration example uses the non-null assertion operator (!) without validation. If EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY is not set, the app will crash—exactly the issue this PR aims to prevent.

✅ Proposed fix with proper error handling
-const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;+const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY;++if (!publishableKey) {+ throw new Error('Missing Publishable Key. Please set EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY in your .env file.');+}
<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>
🤖 Prompt for AI Agents
In @.changeset/kadi-env-var-fix.md around lines 11 - 16, Replace the unchecked
non-null assertion on process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by
validating it before use: read process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
into publishableKey, check that publishableKey is defined/non-empty and if not
either throw a clear error (with context) or provide a safe fallback, and only
then pass publishableKey into <ClerkProvider> so the app won't crash at runtime;
locate the usage by the publishableKey variable and the <ClerkProvider>
component to apply the check.

@wobsoriano

Copy link
Copy Markdown
Member

!allow-major

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Awesome, thank you for fixing this!

@wobsoriano
wobsoriano merged commit cc799e6 into mainJan 27, 2026
39 of 42 checks passed
@wobsoriano
wobsoriano deleted the chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop branch January 27, 2026 16:28
@chriscanin

Copy link
Copy Markdown
ContributorAuthor

Hi @SarahSoutoul I realized this morning that we will need a docs update because of this change, as the docs currently show examples where the publishable key is not passed to the clerkprovider. That is now required.

Added a docs PR here:
clerk/clerk-docs#3008

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

fix(expo): Make publishableKey prop required and remove env var fallb… - #7655

Merged
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop
Jan 27, 2026
Merged

fix(expo): Make publishableKey prop required and remove env var fallb…#7655
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop

Conversation

@chriscanin

@chriscaninchriscanin commented Jan 22, 2026

Copy link
Copy Markdown
Contributor

Description

  • Make publishableKey a required prop since env vars in node_modules aren't inlined in production builds
  • Fixes issue reported by Kadi regarding TestFlight/Google Play crashes

https://linear.app/clerk/issue/MOBILE-393/remove-env-var-fallback-require-publishablekey-prop

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Summary by CodeRabbit

  • Breaking Changes
    • The publishableKey prop on ClerkProvider is now required (was optional).
    • Environment variable fallbacks for the publishable key are removed — supply the key explicitly when configuring ClerkProvider.
    • Migration: update app initialization to pass your publishable key directly into ClerkProvider.

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

@changeset-bot

changeset-botBot commented Jan 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 7cae015

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

This PR includes changesets to release 1 package
NameType
@clerk/expoMajor

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 22, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 26, 2026 4:12pm

Request Review

@pkg-pr-new

pkg-pr-newBot commented Jan 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 7cae015

@coderabbitai

coderabbitaiBot commented Jan 22, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR makes publishableKey a required prop on ClerkProvider and removes runtime environment-variable fallbacks (EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY / CLERK_PUBLISHABLE_KEY). Initialization now uses the explicit prop value; the singleton default publishable key was changed from environment-variable fallbacks to an empty string. A changeset documents this breaking change and provides migration guidance.

🚥 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: making publishableKey required and removing environment variable fallbacks, which directly addresses the primary objective.
Linked Issues check✅ PassedThe pull request fully implements the MOBILE-393 objective: publishableKey is now required in ClerkProviderProps, environment variable fallbacks are removed, and the fix addresses production build crashes.
Out of Scope Changes check✅ PassedAll changes directly address MOBILE-393 requirements: ClerkProvider prop updates, environment variable fallback removal, and createClerkInstance default changes. No out-of-scope modifications detected.

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


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/expo/src/provider/singleton/createClerkInstance.ts (1)

30-40: Add regression tests for required publishableKey behavior.

This is a breaking change removing env fallbacks; please add/adjust tests to cover missing-key errors and instance reuse to prevent regressions before merge. As per coding guidelines, add tests for this change.

Comment thread.changeset/kadi-env-var-fix.md Outdated

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Looking good! Let's provide a clear migration instruction

chriscaninand others added 2 commits January 26, 2026 08:11
Co-authored-by: Robert Soriano <sorianorobertc@gmail.com>

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @.changeset/kadi-env-var-fix.md:
- Around line 11-16: Replace the unchecked non-null assertion on
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by validating it before use: read
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY into publishableKey, check that
publishableKey is defined/non-empty and if not either throw a clear error (with
context) or provide a safe fallback, and only then pass publishableKey into
<ClerkProvider> so the app won't crash at runtime; locate the usage by the
publishableKey variable and the <ClerkProvider> component to apply the check.

Comment on lines +11 to +16
```tsx
const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;

<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>

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.

⚠️ Potential issue | 🔴 Critical

Add validation to prevent undefined publishableKey.

The migration example uses the non-null assertion operator (!) without validation. If EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY is not set, the app will crash—exactly the issue this PR aims to prevent.

✅ Proposed fix with proper error handling
-const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;+const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY;++if (!publishableKey) {+ throw new Error('Missing Publishable Key. Please set EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY in your .env file.');+}
<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>
🤖 Prompt for AI Agents
In @.changeset/kadi-env-var-fix.md around lines 11 - 16, Replace the unchecked
non-null assertion on process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by
validating it before use: read process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
into publishableKey, check that publishableKey is defined/non-empty and if not
either throw a clear error (with context) or provide a safe fallback, and only
then pass publishableKey into <ClerkProvider> so the app won't crash at runtime;
locate the usage by the publishableKey variable and the <ClerkProvider>
component to apply the check.

@wobsoriano

Copy link
Copy Markdown
Member

!allow-major

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Awesome, thank you for fixing this!

@wobsoriano
wobsoriano merged commit cc799e6 into mainJan 27, 2026
39 of 42 checks passed
@wobsoriano
wobsoriano deleted the chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop branch January 27, 2026 16:28
@chriscanin

Copy link
Copy Markdown
ContributorAuthor

Hi @SarahSoutoul I realized this morning that we will need a docs update because of this change, as the docs currently show examples where the publishable key is not passed to the clerkprovider. That is now required.

Added a docs PR here:
clerk/clerk-docs#3008

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

fix(expo): Make publishableKey prop required and remove env var fallb… - #7655

Merged
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop
Jan 27, 2026
Merged

fix(expo): Make publishableKey prop required and remove env var fallb…#7655
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop

Conversation

@chriscanin

@chriscaninchriscanin commented Jan 22, 2026

Copy link
Copy Markdown
Contributor

Description

  • Make publishableKey a required prop since env vars in node_modules aren't inlined in production builds
  • Fixes issue reported by Kadi regarding TestFlight/Google Play crashes

https://linear.app/clerk/issue/MOBILE-393/remove-env-var-fallback-require-publishablekey-prop

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Summary by CodeRabbit

  • Breaking Changes
    • The publishableKey prop on ClerkProvider is now required (was optional).
    • Environment variable fallbacks for the publishable key are removed — supply the key explicitly when configuring ClerkProvider.
    • Migration: update app initialization to pass your publishable key directly into ClerkProvider.

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

@changeset-bot

changeset-botBot commented Jan 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 7cae015

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

This PR includes changesets to release 1 package
NameType
@clerk/expoMajor

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 22, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 26, 2026 4:12pm

Request Review

@pkg-pr-new

pkg-pr-newBot commented Jan 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 7cae015

@coderabbitai

coderabbitaiBot commented Jan 22, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR makes publishableKey a required prop on ClerkProvider and removes runtime environment-variable fallbacks (EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY / CLERK_PUBLISHABLE_KEY). Initialization now uses the explicit prop value; the singleton default publishable key was changed from environment-variable fallbacks to an empty string. A changeset documents this breaking change and provides migration guidance.

🚥 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: making publishableKey required and removing environment variable fallbacks, which directly addresses the primary objective.
Linked Issues check✅ PassedThe pull request fully implements the MOBILE-393 objective: publishableKey is now required in ClerkProviderProps, environment variable fallbacks are removed, and the fix addresses production build crashes.
Out of Scope Changes check✅ PassedAll changes directly address MOBILE-393 requirements: ClerkProvider prop updates, environment variable fallback removal, and createClerkInstance default changes. No out-of-scope modifications detected.

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


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/expo/src/provider/singleton/createClerkInstance.ts (1)

30-40: Add regression tests for required publishableKey behavior.

This is a breaking change removing env fallbacks; please add/adjust tests to cover missing-key errors and instance reuse to prevent regressions before merge. As per coding guidelines, add tests for this change.

Comment thread.changeset/kadi-env-var-fix.md Outdated

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Looking good! Let's provide a clear migration instruction

chriscaninand others added 2 commits January 26, 2026 08:11
Co-authored-by: Robert Soriano <sorianorobertc@gmail.com>

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @.changeset/kadi-env-var-fix.md:
- Around line 11-16: Replace the unchecked non-null assertion on
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by validating it before use: read
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY into publishableKey, check that
publishableKey is defined/non-empty and if not either throw a clear error (with
context) or provide a safe fallback, and only then pass publishableKey into
<ClerkProvider> so the app won't crash at runtime; locate the usage by the
publishableKey variable and the <ClerkProvider> component to apply the check.

Comment on lines +11 to +16
```tsx
const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;

<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>

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.

⚠️ Potential issue | 🔴 Critical

Add validation to prevent undefined publishableKey.

The migration example uses the non-null assertion operator (!) without validation. If EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY is not set, the app will crash—exactly the issue this PR aims to prevent.

✅ Proposed fix with proper error handling
-const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;+const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY;++if (!publishableKey) {+ throw new Error('Missing Publishable Key. Please set EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY in your .env file.');+}
<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>
🤖 Prompt for AI Agents
In @.changeset/kadi-env-var-fix.md around lines 11 - 16, Replace the unchecked
non-null assertion on process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by
validating it before use: read process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
into publishableKey, check that publishableKey is defined/non-empty and if not
either throw a clear error (with context) or provide a safe fallback, and only
then pass publishableKey into <ClerkProvider> so the app won't crash at runtime;
locate the usage by the publishableKey variable and the <ClerkProvider>
component to apply the check.

@wobsoriano

Copy link
Copy Markdown
Member

!allow-major

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Awesome, thank you for fixing this!

@wobsoriano
wobsoriano merged commit cc799e6 into mainJan 27, 2026
39 of 42 checks passed
@wobsoriano
wobsoriano deleted the chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop branch January 27, 2026 16:28
@chriscanin

Copy link
Copy Markdown
ContributorAuthor

Hi @SarahSoutoul I realized this morning that we will need a docs update because of this change, as the docs currently show examples where the publishable key is not passed to the clerkprovider. That is now required.

Added a docs PR here:
clerk/clerk-docs#3008

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

fix(expo): Make publishableKey prop required and remove env var fallb… - #7655

Merged
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop
Jan 27, 2026
Merged

fix(expo): Make publishableKey prop required and remove env var fallb…#7655
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop

Conversation

@chriscanin

@chriscaninchriscanin commented Jan 22, 2026

Copy link
Copy Markdown
Contributor

Description

  • Make publishableKey a required prop since env vars in node_modules aren't inlined in production builds
  • Fixes issue reported by Kadi regarding TestFlight/Google Play crashes

https://linear.app/clerk/issue/MOBILE-393/remove-env-var-fallback-require-publishablekey-prop

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Summary by CodeRabbit

  • Breaking Changes
    • The publishableKey prop on ClerkProvider is now required (was optional).
    • Environment variable fallbacks for the publishable key are removed — supply the key explicitly when configuring ClerkProvider.
    • Migration: update app initialization to pass your publishable key directly into ClerkProvider.

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

@changeset-bot

changeset-botBot commented Jan 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 7cae015

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

This PR includes changesets to release 1 package
NameType
@clerk/expoMajor

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 22, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 26, 2026 4:12pm

Request Review

@pkg-pr-new

pkg-pr-newBot commented Jan 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 7cae015

@coderabbitai

coderabbitaiBot commented Jan 22, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR makes publishableKey a required prop on ClerkProvider and removes runtime environment-variable fallbacks (EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY / CLERK_PUBLISHABLE_KEY). Initialization now uses the explicit prop value; the singleton default publishable key was changed from environment-variable fallbacks to an empty string. A changeset documents this breaking change and provides migration guidance.

🚥 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: making publishableKey required and removing environment variable fallbacks, which directly addresses the primary objective.
Linked Issues check✅ PassedThe pull request fully implements the MOBILE-393 objective: publishableKey is now required in ClerkProviderProps, environment variable fallbacks are removed, and the fix addresses production build crashes.
Out of Scope Changes check✅ PassedAll changes directly address MOBILE-393 requirements: ClerkProvider prop updates, environment variable fallback removal, and createClerkInstance default changes. No out-of-scope modifications detected.

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


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/expo/src/provider/singleton/createClerkInstance.ts (1)

30-40: Add regression tests for required publishableKey behavior.

This is a breaking change removing env fallbacks; please add/adjust tests to cover missing-key errors and instance reuse to prevent regressions before merge. As per coding guidelines, add tests for this change.

Comment thread.changeset/kadi-env-var-fix.md Outdated

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Looking good! Let's provide a clear migration instruction

chriscaninand others added 2 commits January 26, 2026 08:11
Co-authored-by: Robert Soriano <sorianorobertc@gmail.com>

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @.changeset/kadi-env-var-fix.md:
- Around line 11-16: Replace the unchecked non-null assertion on
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by validating it before use: read
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY into publishableKey, check that
publishableKey is defined/non-empty and if not either throw a clear error (with
context) or provide a safe fallback, and only then pass publishableKey into
<ClerkProvider> so the app won't crash at runtime; locate the usage by the
publishableKey variable and the <ClerkProvider> component to apply the check.

Comment on lines +11 to +16
```tsx
const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;

<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>

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.

⚠️ Potential issue | 🔴 Critical

Add validation to prevent undefined publishableKey.

The migration example uses the non-null assertion operator (!) without validation. If EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY is not set, the app will crash—exactly the issue this PR aims to prevent.

✅ Proposed fix with proper error handling
-const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;+const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY;++if (!publishableKey) {+ throw new Error('Missing Publishable Key. Please set EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY in your .env file.');+}
<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>
🤖 Prompt for AI Agents
In @.changeset/kadi-env-var-fix.md around lines 11 - 16, Replace the unchecked
non-null assertion on process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by
validating it before use: read process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
into publishableKey, check that publishableKey is defined/non-empty and if not
either throw a clear error (with context) or provide a safe fallback, and only
then pass publishableKey into <ClerkProvider> so the app won't crash at runtime;
locate the usage by the publishableKey variable and the <ClerkProvider>
component to apply the check.

@wobsoriano

Copy link
Copy Markdown
Member

!allow-major

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Awesome, thank you for fixing this!

@wobsoriano
wobsoriano merged commit cc799e6 into mainJan 27, 2026
39 of 42 checks passed
@wobsoriano
wobsoriano deleted the chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop branch January 27, 2026 16:28
@chriscanin

Copy link
Copy Markdown
ContributorAuthor

Hi @SarahSoutoul I realized this morning that we will need a docs update because of this change, as the docs currently show examples where the publishable key is not passed to the clerkprovider. That is now required.

Added a docs PR here:
clerk/clerk-docs#3008

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

fix(expo): Make publishableKey prop required and remove env var fallb… - #7655

Merged
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop
Jan 27, 2026
Merged

fix(expo): Make publishableKey prop required and remove env var fallb…#7655
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop

Conversation

@chriscanin

@chriscaninchriscanin commented Jan 22, 2026

Copy link
Copy Markdown
Contributor

Description

  • Make publishableKey a required prop since env vars in node_modules aren't inlined in production builds
  • Fixes issue reported by Kadi regarding TestFlight/Google Play crashes

https://linear.app/clerk/issue/MOBILE-393/remove-env-var-fallback-require-publishablekey-prop

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Summary by CodeRabbit

  • Breaking Changes
    • The publishableKey prop on ClerkProvider is now required (was optional).
    • Environment variable fallbacks for the publishable key are removed — supply the key explicitly when configuring ClerkProvider.
    • Migration: update app initialization to pass your publishable key directly into ClerkProvider.

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

@changeset-bot

changeset-botBot commented Jan 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 7cae015

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

This PR includes changesets to release 1 package
NameType
@clerk/expoMajor

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 22, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 26, 2026 4:12pm

Request Review

@pkg-pr-new

pkg-pr-newBot commented Jan 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 7cae015

@coderabbitai

coderabbitaiBot commented Jan 22, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR makes publishableKey a required prop on ClerkProvider and removes runtime environment-variable fallbacks (EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY / CLERK_PUBLISHABLE_KEY). Initialization now uses the explicit prop value; the singleton default publishable key was changed from environment-variable fallbacks to an empty string. A changeset documents this breaking change and provides migration guidance.

🚥 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: making publishableKey required and removing environment variable fallbacks, which directly addresses the primary objective.
Linked Issues check✅ PassedThe pull request fully implements the MOBILE-393 objective: publishableKey is now required in ClerkProviderProps, environment variable fallbacks are removed, and the fix addresses production build crashes.
Out of Scope Changes check✅ PassedAll changes directly address MOBILE-393 requirements: ClerkProvider prop updates, environment variable fallback removal, and createClerkInstance default changes. No out-of-scope modifications detected.

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


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/expo/src/provider/singleton/createClerkInstance.ts (1)

30-40: Add regression tests for required publishableKey behavior.

This is a breaking change removing env fallbacks; please add/adjust tests to cover missing-key errors and instance reuse to prevent regressions before merge. As per coding guidelines, add tests for this change.

Comment thread.changeset/kadi-env-var-fix.md Outdated

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Looking good! Let's provide a clear migration instruction

chriscaninand others added 2 commits January 26, 2026 08:11
Co-authored-by: Robert Soriano <sorianorobertc@gmail.com>

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @.changeset/kadi-env-var-fix.md:
- Around line 11-16: Replace the unchecked non-null assertion on
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by validating it before use: read
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY into publishableKey, check that
publishableKey is defined/non-empty and if not either throw a clear error (with
context) or provide a safe fallback, and only then pass publishableKey into
<ClerkProvider> so the app won't crash at runtime; locate the usage by the
publishableKey variable and the <ClerkProvider> component to apply the check.

Comment on lines +11 to +16
```tsx
const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;

<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>

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.

⚠️ Potential issue | 🔴 Critical

Add validation to prevent undefined publishableKey.

The migration example uses the non-null assertion operator (!) without validation. If EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY is not set, the app will crash—exactly the issue this PR aims to prevent.

✅ Proposed fix with proper error handling
-const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;+const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY;++if (!publishableKey) {+ throw new Error('Missing Publishable Key. Please set EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY in your .env file.');+}
<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>
🤖 Prompt for AI Agents
In @.changeset/kadi-env-var-fix.md around lines 11 - 16, Replace the unchecked
non-null assertion on process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by
validating it before use: read process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
into publishableKey, check that publishableKey is defined/non-empty and if not
either throw a clear error (with context) or provide a safe fallback, and only
then pass publishableKey into <ClerkProvider> so the app won't crash at runtime;
locate the usage by the publishableKey variable and the <ClerkProvider>
component to apply the check.

@wobsoriano

Copy link
Copy Markdown
Member

!allow-major

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Awesome, thank you for fixing this!

@wobsoriano
wobsoriano merged commit cc799e6 into mainJan 27, 2026
39 of 42 checks passed
@wobsoriano
wobsoriano deleted the chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop branch January 27, 2026 16:28
@chriscanin

Copy link
Copy Markdown
ContributorAuthor

Hi @SarahSoutoul I realized this morning that we will need a docs update because of this change, as the docs currently show examples where the publishable key is not passed to the clerkprovider. That is now required.

Added a docs PR here:
clerk/clerk-docs#3008

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@chriscanin@wobsoriano
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(expo): Make publishableKey prop required and remove env var fallb… by chriscanin · Pull Request #7655 · clerk/javascript · GitHub
Skip to content

fix(expo): Make publishableKey prop required and remove env var fallb… - #7655

Merged
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop
Jan 27, 2026
Merged

fix(expo): Make publishableKey prop required and remove env var fallb…#7655
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop

Conversation

@chriscanin

@chriscaninchriscanin commented Jan 22, 2026

Copy link
Copy Markdown
Contributor

Description

  • Make publishableKey a required prop since env vars in node_modules aren't inlined in production builds
  • Fixes issue reported by Kadi regarding TestFlight/Google Play crashes

https://linear.app/clerk/issue/MOBILE-393/remove-env-var-fallback-require-publishablekey-prop

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Summary by CodeRabbit

  • Breaking Changes
    • The publishableKey prop on ClerkProvider is now required (was optional).
    • Environment variable fallbacks for the publishable key are removed — supply the key explicitly when configuring ClerkProvider.
    • Migration: update app initialization to pass your publishable key directly into ClerkProvider.

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

@changeset-bot

changeset-botBot commented Jan 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 7cae015

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

This PR includes changesets to release 1 package
NameType
@clerk/expoMajor

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 22, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 26, 2026 4:12pm

Request Review

@pkg-pr-new

pkg-pr-newBot commented Jan 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 7cae015

@coderabbitai

coderabbitaiBot commented Jan 22, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR makes publishableKey a required prop on ClerkProvider and removes runtime environment-variable fallbacks (EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY / CLERK_PUBLISHABLE_KEY). Initialization now uses the explicit prop value; the singleton default publishable key was changed from environment-variable fallbacks to an empty string. A changeset documents this breaking change and provides migration guidance.

🚥 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: making publishableKey required and removing environment variable fallbacks, which directly addresses the primary objective.
Linked Issues check✅ PassedThe pull request fully implements the MOBILE-393 objective: publishableKey is now required in ClerkProviderProps, environment variable fallbacks are removed, and the fix addresses production build crashes.
Out of Scope Changes check✅ PassedAll changes directly address MOBILE-393 requirements: ClerkProvider prop updates, environment variable fallback removal, and createClerkInstance default changes. No out-of-scope modifications detected.

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


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/expo/src/provider/singleton/createClerkInstance.ts (1)

30-40: Add regression tests for required publishableKey behavior.

This is a breaking change removing env fallbacks; please add/adjust tests to cover missing-key errors and instance reuse to prevent regressions before merge. As per coding guidelines, add tests for this change.

Comment thread.changeset/kadi-env-var-fix.md Outdated

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Looking good! Let's provide a clear migration instruction

chriscaninand others added 2 commits January 26, 2026 08:11
Co-authored-by: Robert Soriano <sorianorobertc@gmail.com>

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @.changeset/kadi-env-var-fix.md:
- Around line 11-16: Replace the unchecked non-null assertion on
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by validating it before use: read
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY into publishableKey, check that
publishableKey is defined/non-empty and if not either throw a clear error (with
context) or provide a safe fallback, and only then pass publishableKey into
<ClerkProvider> so the app won't crash at runtime; locate the usage by the
publishableKey variable and the <ClerkProvider> component to apply the check.

Comment on lines +11 to +16
```tsx
const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;

<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>

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.

⚠️ Potential issue | 🔴 Critical

Add validation to prevent undefined publishableKey.

The migration example uses the non-null assertion operator (!) without validation. If EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY is not set, the app will crash—exactly the issue this PR aims to prevent.

✅ Proposed fix with proper error handling
-const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;+const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY;++if (!publishableKey) {+ throw new Error('Missing Publishable Key. Please set EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY in your .env file.');+}
<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>
🤖 Prompt for AI Agents
In @.changeset/kadi-env-var-fix.md around lines 11 - 16, Replace the unchecked
non-null assertion on process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by
validating it before use: read process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
into publishableKey, check that publishableKey is defined/non-empty and if not
either throw a clear error (with context) or provide a safe fallback, and only
then pass publishableKey into <ClerkProvider> so the app won't crash at runtime;
locate the usage by the publishableKey variable and the <ClerkProvider>
component to apply the check.

@wobsoriano

Copy link
Copy Markdown
Member

!allow-major

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Awesome, thank you for fixing this!

@wobsoriano
wobsoriano merged commit cc799e6 into mainJan 27, 2026
39 of 42 checks passed
@wobsoriano
wobsoriano deleted the chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop branch January 27, 2026 16:28
@chriscanin

Copy link
Copy Markdown
ContributorAuthor

Hi @SarahSoutoul I realized this morning that we will need a docs update because of this change, as the docs currently show examples where the publishable key is not passed to the clerkprovider. That is now required.

Added a docs PR here:
clerk/clerk-docs#3008

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@chriscanin@wobsoriano
, '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); } })(); })(); fix(expo): Make publishableKey prop required and remove env var fallb… by chriscanin · Pull Request #7655 · clerk/javascript · GitHub
Skip to content

fix(expo): Make publishableKey prop required and remove env var fallb… - #7655

Merged
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop
Jan 27, 2026
Merged

fix(expo): Make publishableKey prop required and remove env var fallb…#7655
wobsoriano merged 5 commits into
mainfrom
chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop

Conversation

@chriscanin

@chriscaninchriscanin commented Jan 22, 2026

Copy link
Copy Markdown
Contributor

Description

  • Make publishableKey a required prop since env vars in node_modules aren't inlined in production builds
  • Fixes issue reported by Kadi regarding TestFlight/Google Play crashes

https://linear.app/clerk/issue/MOBILE-393/remove-env-var-fallback-require-publishablekey-prop

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Summary by CodeRabbit

  • Breaking Changes
    • The publishableKey prop on ClerkProvider is now required (was optional).
    • Environment variable fallbacks for the publishable key are removed — supply the key explicitly when configuring ClerkProvider.
    • Migration: update app initialization to pass your publishable key directly into ClerkProvider.

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

@changeset-bot

changeset-botBot commented Jan 22, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 7cae015

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

This PR includes changesets to release 1 package
NameType
@clerk/expoMajor

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 22, 2026

Copy link
Copy Markdown

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

ProjectDeploymentReviewUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJan 26, 2026 4:12pm

Request Review

@pkg-pr-new

pkg-pr-newBot commented Jan 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

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

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/dev-cli

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 7cae015

@coderabbitai

coderabbitaiBot commented Jan 22, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR makes publishableKey a required prop on ClerkProvider and removes runtime environment-variable fallbacks (EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY / CLERK_PUBLISHABLE_KEY). Initialization now uses the explicit prop value; the singleton default publishable key was changed from environment-variable fallbacks to an empty string. A changeset documents this breaking change and provides migration guidance.

🚥 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: making publishableKey required and removing environment variable fallbacks, which directly addresses the primary objective.
Linked Issues check✅ PassedThe pull request fully implements the MOBILE-393 objective: publishableKey is now required in ClerkProviderProps, environment variable fallbacks are removed, and the fix addresses production build crashes.
Out of Scope Changes check✅ PassedAll changes directly address MOBILE-393 requirements: ClerkProvider prop updates, environment variable fallback removal, and createClerkInstance default changes. No out-of-scope modifications detected.

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


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/expo/src/provider/singleton/createClerkInstance.ts (1)

30-40: Add regression tests for required publishableKey behavior.

This is a breaking change removing env fallbacks; please add/adjust tests to cover missing-key errors and instance reuse to prevent regressions before merge. As per coding guidelines, add tests for this change.

Comment thread.changeset/kadi-env-var-fix.md Outdated

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Looking good! Let's provide a clear migration instruction

chriscaninand others added 2 commits January 26, 2026 08:11
Co-authored-by: Robert Soriano <sorianorobertc@gmail.com>

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @.changeset/kadi-env-var-fix.md:
- Around line 11-16: Replace the unchecked non-null assertion on
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by validating it before use: read
process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY into publishableKey, check that
publishableKey is defined/non-empty and if not either throw a clear error (with
context) or provide a safe fallback, and only then pass publishableKey into
<ClerkProvider> so the app won't crash at runtime; locate the usage by the
publishableKey variable and the <ClerkProvider> component to apply the check.

Comment on lines +11 to +16
```tsx
const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;

<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>

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.

⚠️ Potential issue | 🔴 Critical

Add validation to prevent undefined publishableKey.

The migration example uses the non-null assertion operator (!) without validation. If EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY is not set, the app will crash—exactly the issue this PR aims to prevent.

✅ Proposed fix with proper error handling
-const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY!;+const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY;++if (!publishableKey) {+ throw new Error('Missing Publishable Key. Please set EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY in your .env file.');+}
<ClerkProvider publishableKey={publishableKey}>
{/* Your app */}
</ClerkProvider>
🤖 Prompt for AI Agents
In @.changeset/kadi-env-var-fix.md around lines 11 - 16, Replace the unchecked
non-null assertion on process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY by
validating it before use: read process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
into publishableKey, check that publishableKey is defined/non-empty and if not
either throw a clear error (with context) or provide a safe fallback, and only
then pass publishableKey into <ClerkProvider> so the app won't crash at runtime;
locate the usage by the publishableKey variable and the <ClerkProvider>
component to apply the check.

@wobsoriano

Copy link
Copy Markdown
Member

!allow-major

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Awesome, thank you for fixing this!

@wobsoriano
wobsoriano merged commit cc799e6 into mainJan 27, 2026
39 of 42 checks passed
@wobsoriano
wobsoriano deleted the chris/mobile-393-remove-env-var-fallback-require-publishablekey-prop branch January 27, 2026 16:28
@chriscanin

Copy link
Copy Markdown
ContributorAuthor

Hi @SarahSoutoul I realized this morning that we will need a docs update because of this change, as the docs currently show examples where the publishable key is not passed to the clerkprovider. That is now required.

Added a docs PR here:
clerk/clerk-docs#3008

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@chriscanin@wobsoriano