From 0a99783e5bea3cd1fd690a67dc9d55f78ddf106a Mon Sep 17 00:00:00 2001 From: ChrisCanin Date: Wed, 4 Feb 2026 15:35:14 -0800 Subject: [PATCH] fix(react): conditionally load UI scripts to prevent document.createElement crash in React Native --- .changeset/modern-hornets-fold.md | 5 +++++ packages/react/src/isomorphicClerk.ts | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 .changeset/modern-hornets-fold.md diff --git a/.changeset/modern-hornets-fold.md b/.changeset/modern-hornets-fold.md new file mode 100644 index 00000000000..a0fb384685f --- /dev/null +++ b/.changeset/modern-hornets-fold.md @@ -0,0 +1,5 @@ +--- +"@clerk/react": patch +--- + +Fix `ReferenceError: Property 'document' doesn't exist` crash in React Native environments by conditionally loading UI scripts only in standard browser contexts. diff --git a/packages/react/src/isomorphicClerk.ts b/packages/react/src/isomorphicClerk.ts index 9a908485a2a..91b85c6b33e 100644 --- a/packages/react/src/isomorphicClerk.ts +++ b/packages/react/src/isomorphicClerk.ts @@ -468,12 +468,14 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk { } try { - const clerkUICtor = await this.getClerkUiEntryChunk(); const clerk = await this.getClerkJsEntryChunk(); if (!clerk.loaded) { this.beforeLoad(clerk); - await clerk.load({ ...this.options, clerkUICtor }); + // Only load UI scripts in standard browser environments (not native/headless) + const shouldLoadUi = !this.options.Clerk && this.options.standardBrowser !== false; + const clerkUiCtor = shouldLoadUi ? await this.getClerkUiEntryChunk() : undefined; + await clerk.load({ ...this.options, clerkUiCtor }); } if (clerk.loaded) { this.replayInterceptedInvocations(clerk);