Skip to content

Changelog

New updates and improvements to Clerk

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.

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.

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.

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.