Clerk

These example posts were automatically generated by PersonaBox from GitHub pull requests.

Want posts like this?

Turn your GitHub PRs into polished product updates.

Powered by PersonaBox

Next.js 16 cache component support with clear error guidance#

Next.js 16 cache component support with clear error guidance

@clerk/nextjs now detects when auth() or currentUser() is called inside a Next.js 16 "use cache" function and throws a clear, actionable error with a code example showing the correct pattern. No more cryptic headers() failures when adopting cache components.

Email link verification for sign-up flows#

Email link verification for sign-up flows

SignUp now supports email link verification through sendEmailLink() and waitForEmailLinkVerification(). Users receive a verification link instead of a code, and the flow completes automatically once they click. Verification status (verified, expired, client mismatch) is exposed on the verifications object, and relative redirect URLs are safely resolved to absolute URLs per environment.

Async initial state support for React 19#

Async initial state support for React 19

<ClerkProvider dynamic> now supports async initialState on React 19+. Instead of awaiting auth state at the top-level provider, session data resolves where it's consumed in hooks via React.use(). No Suspense boundary needed around your provider, and root layouts stay static and predictable.

Bulk create waitlist entries in a single API call#

Bulk create waitlist entries in a single API call

The Backend SDK now includes createBulk() on WaitlistEntryAPI, so you can create multiple waitlist entries in a single API call. Pass an array of entries with optional notify flags per entry. Ideal for CSV imports, CRM syncs, and batch replay during traffic spikes.

Polished scrollbar styling across all browsers#

Polished scrollbar styling across all browsers

Custom scrollbar styling in @clerk/ui is now consistent across Chrome, Safari, Firefox, and Edge. Scrollbars use a slimmer profile with rounded corners, smooth hover transitions, and theme-aware colors, so embedded components like <UserProfile/> and <OrganizationProfile/> look polished on every browser without custom CSS overrides.

Mandatory MFA setup as a session task#

Mandatory MFA setup as a session task

When "Require multi-factor authentication" is enabled, users without MFA are now prompted to complete setup on their next sign-in or immediately after sign-up via a new setup_mfa session task, with full UI for SMS and authenticator app enrollment plus backup codes.

HandleSSOCallback component for custom SSO flows#

HandleSSOCallback component for custom SSO flows

New <HandleSSOCallback /> component for React and Next.js: handles the full SSO callback flow in custom auth UIs, including sign-in/sign-up finalization, automatic transfer between flows, MFA and password branching, existing session activation, and routing to the correct destination. Drop it into your callback route instead of writing the state machine yourself.

New providerUserId field on external accounts#

New providerUserId field on external accounts

ExternalAccount now includes providerUserId, a clearly named field for the unique user ID from the OAuth provider. Use it to correlate provider identities, deduplicate accounts, and build reliable analytics joins. The previous externalId field is deprecated in favor of providerUserId.

Native Google Sign-In for Expo#

Native Google Sign-In for Expo

@clerk/expo now supports native Google Sign-In on iOS and Android with useSignInWithGoogle(), using built-in native modules for a platform-native authentication experience.

App name in Coinbase Wallet#

App name in Coinbase Wallet

Coinbase Wallet requests now include your application name, so the Coinbase connection sheet can display the correct app identity (matching the Base flow).

Add password from user profile#

Add password from user profile

Users can now add a password from User Profile → Security when password authentication is enabled for your instance, even if it isn’t required at sign-up.

Email code MFA support#

Email code MFA support

SignInFuture now supports email code MFA. Use signIn.mfa.sendEmailCode() and signIn.mfa.verifyEmailCode({ code }) to send and verify email-based second-factor codes.

Standalone getToken() function#

Standalone getToken() function

Standalone getToken() is now available across Clerk’s framework SDKs. Call it from anywhere in the browser (interceptors, data fetching, vanilla JS). It waits for Clerk initialization and returns null when there’s no session.

Keyless mode for TanStack Start#

Keyless mode for TanStack Start

@clerk/tanstack-react-start now supports keyless mode in development, so you can start a TanStack Start app with Clerk without adding API keys first. Includes a claim flow and an opt-out via VITE_CLERK_KEYLESS_DISABLED / CLERK_KEYLESS_DISABLED.

Automatic light and dark mode#

Automatic light and dark mode

New lightDark theme for Clerk UI: automatically adapts to the user’s system color scheme (via CSS light-dark()). Also improved provider icon theming—Apple/GitHub/Vercel/OKX now support customizable fills with --cl-icon-fill (no dark-mode inversion).

Cleaner OAuth consent for offline access#

Cleaner OAuth consent for offline access

OAuth Consent screen: offline_access is now filtered out of the displayed permissions list, and when present we show an extra note clarifying duration (“You’ll stay signed in until you sign out or revoke access.”).