Skip to content

feat(expo): Chris/mobile 405 react native components release#7843

Open
chriscanin wants to merge 83 commits intomainfrom
chris/mobile-405-react-native-components-release
Open

feat(expo): Chris/mobile 405 react native components release#7843
chriscanin wants to merge 83 commits intomainfrom
chris/mobile-405-react-native-components-release

Conversation

@chriscanin
Copy link
Member

@chriscanin chriscanin commented Feb 13, 2026

Description

These changes can be tested by using the snapshot that will be commented in this PR discussion, and installing that into the expo quickstart repo on the branch: chris/mobile-343-bridge-android-to-a-native-module-that-is-available-in-the
(same branch name as here).

https://linear.app/clerk/issue/MOBILE-342/bridge-ios-to-a-native-module-that-is-available-in-the-expo-sdk
MOBILE-289
https://linear.app/clerk/issue/MOBILE-289/expo-google-universal-sign-in

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

  • New Features

    • Native Expo UI: AuthView, InlineAuthView, UserButton, UserProfileView (modal & inline) and native plugin support
    • Native auth flows: Google Sign‑In and Apple Sign‑In; new native session/events hooks and client token access
  • Bug Fixes

    • More reliable native↔JS session sync, improved lifecycle/unmount guards, and clearer error handling
  • Documentation

    • Native iOS setup guide and native components README
  • Chores

    • Expo plugin, packaging, podspec and package version updates

- Implemented UserButton component to open UserProfileView on press.
- Created UserProfile component for comprehensive profile management.
- Integrated native ClerkExpo module for iOS functionality.
- Updated ClerkProvider to configure Clerk iOS SDK.
- Added exports for new components in the native index file.
- Adjusted TypeScript configuration to include additional files.
- Modified build process to temporarily skip declaration generation.
- Updated dependencies in pnpm-lock.yaml for compatibility.
…ge-ios-to-a-native-module-that-is-available-in-the-expo
…ge-android-to-a-native-module-that-is-available-in-the
…ling and UI presentation

- Consolidated Clerk SDK initialization and session management in ClerkExpoModule.
- Removed ClerkProfileActivity and replaced it with ClerkUserProfileActivity for better clarity and functionality.
- Introduced ClerkViewFactory to manage creation of intents for authentication and user profile activities.
- Enhanced error handling and promise management for asynchronous operations.
- Updated SignIn and UserProfile components to synchronize native and JS session states effectively.
- Improved user experience by ensuring the auth modal is always presented, allowing native UI to manage signed-in state.
- Added backward-compatible wrappers for SignedIn and SignedOut components.
- Updated `clerk-android` versions in `build.gradle` to `0.1.30` for API and `0.1.4` for UI.
- Added Kotlin metadata version check skip to address compatibility issues.
- Introduced packaging exclusions for duplicate META-INF files in Android.
- Enhanced `ClerkAuthActivity` to improve session handling and logging.
- Updated `ClerkExpoModule` to include detailed logging for session retrieval.
- Improved `ClerkUserProfileActivity` to handle sign-out detection and logging.
- Refined `SignIn` and `UserProfile` components to prevent duplicate auth callbacks and improve user state management.
- Added packaging exclusions in the Expo config plugin for Android to resolve dependency conflicts.
- Introduced AuthView component to handle sign-in and sign-up using native UI.
- Added AuthView types for better type safety.
- Removed deprecated SignIn component and its types.
- Updated UserButton and UserProfileView components with enhanced documentation.
- Refactored ClerkProvider to sync native sessions with JS SDK.
- Adjusted TypeScript configurations for improved declaration generation.
- packages/expo/package.json: merge new exports (./types) and file entries (google, apple)
- packages/expo/src/hooks/index.ts: use main's standard re-exports for useSignIn/useSignUp/useWaitlist
- packages/expo/src/provider/singleton/createClerkInstance.ts: use @clerk/clerk-js import (not headless subpath)
- packages/react/src/isomorphicClerk.ts: use main's ClerkUI loading pattern via options.ui
@vercel
Copy link

vercel bot commented Feb 13, 2026

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

Project Deployment Actions Updated (UTC)
clerk-js-sandbox Ready Ready Preview, Comment Mar 5, 2026 10:30pm

Request Review

@changeset-bot
Copy link

changeset-bot bot commented Feb 13, 2026

🦋 Changeset detected

Latest commit: 0962a90

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

This PR includes changesets to release 1 package
Name Type
@clerk/expo Minor

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

@chriscanin
Copy link
Member Author

image Trying to resolve this problem. After resetting password, we are told "you're already signed in". This is a problem.

…ode flows

The iOS native auth wrappers silently dropped signInCompleted/signUpCompleted
events when createdSessionId was nil, which happens during password reset and
email code verification flows. Now falls back to Clerk.shared.session?.id and
handles .sessionChanged as a catch-all, matching the Android approach.

Removes polling fallback from AuthView and InlineAuthView — session sync is
now purely event-driven via the native bridge.
clerk-android 1.0.1 sent emailAddressId in camelCase instead of
snake_case (email_address_id) when preparing reset password first
factor, causing "emailAddressId is not a valid parameter" errors.
Fixed in clerk-android v1.0.2 (clerk/clerk-android#539).
@chriscanin
Copy link
Member Author

!snapshot

@chriscanin
Copy link
Member Author

!snapshot

Includes fix for reset password flow requiring 2 button presses on
second attempt.
@wobsoriano
Copy link
Member

!snapshot

@chriscanin
Copy link
Member Author

!snapshot

@wobsoriano
Copy link
Member

!snapshot

@wobsoriano
Copy link
Member

!snapshot

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants