From 18ccf3119c0ea68b728e5140c97c34b0efbfeaa8 Mon Sep 17 00:00:00 2001 From: ChrisCanin Date: Fri, 13 Mar 2026 08:58:04 -0700 Subject: [PATCH 1/3] fix(expo): prevent crash when importing @clerk/expo in web environments Add .web.ts variants for NativeClerkModule spec and polyfills so the bundler skips TurboModuleRegistry and react-native-url-polyfill on web. --- .changeset/fix-expo-web-crash.md | 5 +++++ packages/expo/src/polyfills/index.web.ts | 1 + packages/expo/src/specs/NativeClerkModule.web.ts | 2 ++ 3 files changed, 8 insertions(+) create mode 100644 .changeset/fix-expo-web-crash.md create mode 100644 packages/expo/src/polyfills/index.web.ts create mode 100644 packages/expo/src/specs/NativeClerkModule.web.ts diff --git a/.changeset/fix-expo-web-crash.md b/.changeset/fix-expo-web-crash.md new file mode 100644 index 00000000000..690189be927 --- /dev/null +++ b/.changeset/fix-expo-web-crash.md @@ -0,0 +1,5 @@ +--- +"@clerk/expo": patch +--- + +Fix `@clerk/expo` crashing in web environments by adding web-safe variants for native module imports and polyfills diff --git a/packages/expo/src/polyfills/index.web.ts b/packages/expo/src/polyfills/index.web.ts new file mode 100644 index 00000000000..609c9f28e78 --- /dev/null +++ b/packages/expo/src/polyfills/index.web.ts @@ -0,0 +1 @@ +// No polyfills needed on web - browsers have native URL and base64 support diff --git a/packages/expo/src/specs/NativeClerkModule.web.ts b/packages/expo/src/specs/NativeClerkModule.web.ts new file mode 100644 index 00000000000..d121e9965b4 --- /dev/null +++ b/packages/expo/src/specs/NativeClerkModule.web.ts @@ -0,0 +1,2 @@ +// TurboModules are not available on web - export null to avoid import-time crash +export default null; From 0c88601d3a9b3d12498f1b85b50400e554f540b8 Mon Sep 17 00:00:00 2001 From: ChrisCanin Date: Fri, 13 Mar 2026 09:10:52 -0700 Subject: [PATCH 2/3] fix(expo): use optional chaining for TurboModuleRegistry on web Replace .web.ts approach with optional chaining in the original spec file. This avoids TypeScript build issues from moduleSuffixes while still preventing the crash when TurboModuleRegistry is undefined on web. --- packages/expo/src/specs/NativeClerkModule.ts | 2 +- packages/expo/src/specs/NativeClerkModule.web.ts | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 packages/expo/src/specs/NativeClerkModule.web.ts diff --git a/packages/expo/src/specs/NativeClerkModule.ts b/packages/expo/src/specs/NativeClerkModule.ts index 1c38d2c1f92..ad1464ebdc5 100644 --- a/packages/expo/src/specs/NativeClerkModule.ts +++ b/packages/expo/src/specs/NativeClerkModule.ts @@ -11,4 +11,4 @@ export interface Spec extends TurboModule { signOut(): Promise; } -export default TurboModuleRegistry.get('ClerkExpo'); +export default TurboModuleRegistry?.get('ClerkExpo') ?? null; diff --git a/packages/expo/src/specs/NativeClerkModule.web.ts b/packages/expo/src/specs/NativeClerkModule.web.ts deleted file mode 100644 index d121e9965b4..00000000000 --- a/packages/expo/src/specs/NativeClerkModule.web.ts +++ /dev/null @@ -1,2 +0,0 @@ -// TurboModules are not available on web - export null to avoid import-time crash -export default null; From a4f23d20adc0b8e90d5b86c3cfe321d0ee410ace Mon Sep 17 00:00:00 2001 From: ChrisCanin Date: Fri, 13 Mar 2026 09:13:04 -0700 Subject: [PATCH 3/3] remove unnecessary polyfills web variant --- packages/expo/src/polyfills/index.web.ts | 1 - 1 file changed, 1 deletion(-) delete mode 100644 packages/expo/src/polyfills/index.web.ts diff --git a/packages/expo/src/polyfills/index.web.ts b/packages/expo/src/polyfills/index.web.ts deleted file mode 100644 index 609c9f28e78..00000000000 --- a/packages/expo/src/polyfills/index.web.ts +++ /dev/null @@ -1 +0,0 @@ -// No polyfills needed on web - browsers have native URL and base64 support