Skip to main content

Clerk Changelog

Clerk Convex integration for Swift and Kotlin

Category
Integrations
Published

Clerk now provides a native integration with Convex for Swift and Kotlin mobile apps.

These libraries connect Clerk authentication with Convex clients, keeping auth state in sync without requiring custom token handling.

For integration and configuration details, refer to the following repositories:

Each repository includes example apps and setup instructions.

Contributors
Sam Wolfand
Sean Perez

Share this article

Require multi-factor authentication (MFA)

Category
Security
Published

Enforce multi-factor authentication for all users in your application

Securing your user base even more just got a lot easier. You can now require multi-factor authentication (MFA) across your entire application with a single toggle.

This ensures that every user, whether they are signing up for the first time or returning to an existing account, adds a critical layer of protection before they can access your application.

What's new

The require multi-factor authentication (MFA) setting eliminates the "opt-in" gap. Previously, users had to manually choose to secure their accounts. Now you can make it a requirement for entry.

If a user signs-in or signs-up without multi-factor authentication (MFA) enabled, they’ll be guided through the setup flow before proceeding.

This works seamlessly with Clerk’s prebuilt components. Users can choose from the available application MFA methods, including Authenticator application (TOTP) and SMS verification code.

Getting started

To require multi-factor authentication (MFA) across your application:

  1. Ensure your Clerk SDKs meet the minimum required versions. Refer to the setup-mfa session task guide for version requirements.
  2. Navigate to Multi-factor in the Clerk Dashboard
  3. Enable one or more MFA strategies (Authenticator application or SMS verification code).
  4. Turn on Require multi-factor authentication

Once enabled, new users will be prompted to set up MFA during sign-up, and existing users without MFA will be prompted the next time they sign-in.

To learn more, visit the setup MFA guide.

Contributors
Vaggelis Yfantis
Nikos Makropoulos
Haris Chaniotakis

Share this article

Share Dashboard Analytics

Category
Dashboard
Published

Export and share your Clerk Dashboard analytics charts as high-quality images

Communicating your growth is crucial for building confidence in your product.

That's why we've added export capabilities to every chart in the Clerk dashboard, making it easier than ever to share insights with your team, stakeholders, or potential customers.

  • Export any chart from your dashboard as a high-quality PNG image
  • Copy charts directly to your clipboard for quick sharing
  • Export any chart type: line charts, bar charts, and more

You can also customize the way your charts look when exported:

  1. Set the desired date range and interval in your Clerk dashboard, including whether to show the incomplete period or not
  2. Click the share button on any report to view a preview of the export
  3. Toggle the y-axis display, show or hide growth rate total, include or exclude churned user data and more
  4. All exports maintain your dashboard's light or dark mode theme and application branding
Contributors
Chase Austin
Nate Watkin

Share this article

Stay ahead of payment disruptions with our new Stripe account status warnings in Dashboard.

  • Proactive alerts are now available. A warning icon and banner appear when Stripe reports outstanding account requirements.

  • Issues can be resolved directly from the Dashboard. Clicking the warning banner opens Stripe so you can complete required items.

  • Warnings are visible in key billing areas. They appear in the Billing tab and in Billing settings under the Configure section.

Warning banner shown in Billing tab Warning icon indicator
  • Early resolution helps prevent payment interruptions for Clerk Billing.
Contributors
Lamone Armstrong
Austin Calvelage

Share this article

iOS and Android SDKs v1

Category
SDK
Published

The Clerk iOS and Android SDKs are now v1, with a clearer, more consistent auth surface across both platforms.

Clerk's iOS and Android SDKs are now at v1, focused on a better developer experience and a simplified API across both platforms. The biggest change is a unified entry point: all auth methods now live under .auth in each SDK, so everything related to authentication is in one place — with simpler, easier-to-use APIs throughout.

If you're upgrading from v0, follow the migration guides: iOS v1 migration guide and Android v1 migration guide.

What's new in iOS

Some highlights:

  • Unified auth entry point: All auth flows live under clerk.auth, so sign-in, sign-up, and sign-out share one consistent surface.

    var signIn = try await Clerk.shared.auth.signInWithEmailCode(
      emailAddress: "newuser@clerk.com"
    )
    struct ContentView: View {
      @Environment(Clerk.self) private var clerk
    
      var body: some View {
        Button("Send code") {
          Task {
            await sendEmailCode()
          }
        }
      }
    
      private func sendEmailCode() async {
        do {
          var signIn = try await clerk.auth.signInWithEmailCode(
            emailAddress: "newuser@clerk.com"
          )
        } catch {
          // Handle error
        }
      }
    }
  • Import only what you need: v1 splits the iOS SDK into ClerkKit (core APIs) and ClerkKitUI (prebuilt views), so you only import what you use.

    import ClerkKit
    import ClerkKitUI
  • Simpler, more flexible configuration: Configure Clerk once at launch with Clerk.configure(...).

    Clerk.configure(publishableKey: "YOUR_PUBLISHABLE_KEY")
  • More modern SwiftUI wiring: Inject Clerk.shared directly into the environment instead of the old custom key, and read it with @Environment(Clerk.self).

    ContentView()
      .environment(Clerk.shared)
    @Environment(Clerk.self) private var clerk

Check out the iOS docs for full details.

What's new in Android

Some highlights:

  • Unified auth entry point: All auth flows live under Clerk.auth, so sign-in, sign-up, and sign-out stay in one place.

    val signIn = Clerk.auth.signInWithOtp {
      email = "newuser@clerk.com"
    }
    @Composable
    fun SignInView() {
      val scope = rememberCoroutineScope()
    
      Button(onClick = {
        scope.launch {
          sendEmailCode()
        }
      }) {
        Text("Send code")
      }
    }
    
    private suspend fun sendEmailCode() {
      Clerk.auth.signInWithOtp { email = "newuser@clerk.com" }
        .onSuccess { signIn ->
          // Continue the flow
        }
        .onFailure { error ->
          // Handle error
        }
    }
  • Clearer auth state naming: signIn and signUp state are now currentSignIn and currentSignUp to avoid method-name confusion.

  • Builder pattern for auth methods: Auth flows adopt builders for cleaner call sites and more explicit parameter grouping, including MFA steps.

Check out the Android docs for full details.

Get started

v1 makes it easier to build consistent native experiences across iOS and Android. Follow the platform quickstarts to get set up: iOS quickstart and Android quickstart. If you're upgrading, use the migration guides above to update imports, config, and auth flow calls.

Need help? Reach us on Clerk Discord or explore the source on GitHub: clerk-ios and clerk-android.

Contributors
Mike Pitre
Sam Wolfand

Share this article