Skip to main content

Clerk Changelog

Redesigned Dashboard Overview

Category
Dashboard
Published

We're launching a fresh new look for the dashboard overview, making it easier to monitor what matters.

We've completely redesigned the Clerk Dashboard's overview page to focus on User Growth. Previously, we only tracked basic data points, but now we provide comprehensive retention and churn metrics that give you deeper insights into your user base.

In the new charts we now show detailed insights like...

  • New Users - New Users
  • Reactivated Users - Inactive users who became active again
  • Retained Users - Existing users who remained active this period
  • Retained churned - Retained users who became inactive this period
  • Reactivated churned - Reactivated users that churned this period
  • New users churned - New users who churned this period

Beyond the enhanced growth charts, we've introduced flexible time-based filtering options. You can now analyze your data across different time periods (Daily, Weekly, Monthly) and customize date ranges to gain deeper insights into your application's performance and user behavior patterns.

Stay tuned for more planned improvements.

Contributor
Austin Calvelage

Share this article

Global support for Clerk Billing

Category
Company
Published

We're excited to announce that Clerk Billing now supports international Stripe accounts.

When we launched Billing, the Connect to Stripe flow was locked to US-only businesses. Today, we've removed that constraint and Billing is now available in any country that's supported by Stripe (see global availability).

Select your Business Location in the Connect to Stripe flow. If you find that the Business Location drop-down is still locked, you may need to disconnect the associated Stripe account and set up a fresh connection.

Start building your global business with Clerk Billing today.

Contributor
Clerk

Share this article

Session Token JWT v2

Category
Product
Published

Announcing the release of Session Token JWT v2, featuring a more compact and structured claim format.

Key changes in v2 include a revamped structure for organization-related claims, now nested under the o claim for improved clarity and reduced token size. Additionally, a new v claim explicitly identifies the token version.

As of today, April 14, 2025, version 1 of the session token format is deprecated. You can update to version 2 via the Updates page in your Clerk Dashboard.

For a detailed breakdown of all claims available in v2 and how they differ from v1, please refer to our Session Tokens documentation.

We strongly recommend using one of our SDKs that support API version 2025-04-10 to handle decoding reliably.

Contributor
Clerk

Share this article

Supabase Third-Party Auth Integration

Category
Integrations
Published

Integrate Clerk with Supabase as a third-party authentication provider.

Clerk is now supported as a Supabase third-party authentication provider. This first-class integration allows Supabase to accept Clerk-signed session tokens, removing the need to create a custom JWT template and generate a specific token when interacting with Supabase's APIs.

Now, all you need to do is pass Clerk's session token to Supabase's client:

import { createClient } from '@supabase/supabase-js'
import { auth } from '@clerk/nextjs/server'

const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,
  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
  {
    async accessToken() {
      return (await auth()).getToken()
    },
  },
)

Enable the integration

To get started with Clerk and Supabase:

  1. Visit the Clerk dashboard and go through the setup flow
  2. Copy your Clerk instance domain into Supabase's Third-party auth settings

For more information, visit the Supabase Integration documentation page. We can't wait to see what you build with Clerk and Supabase!

Contributors
Ben Werner
Bryce Kalow
Mery Kaftar

Share this article

Reverification

Category
Product
Published

Protect sensitive actions by prompting users to reverify their identity.

Reverification is officially out of beta and is a great way to protect sensitive actions by requiring users to provide a step-up verification.

As part of this release, we've also updated the <UserProfile /> component to require reverification for actions like password changes and email updates, you can find the complete list on our documentation.

How it works

Our SDK includes straightforward hooks to manage reverification smoothly. Here's how to secure a Next.js server action:

app/actions.ts
'use server'

import { auth, reverificationError } from '@clerk/nextjs/server'

export const myAction = async () => {
  const { has } = await auth.protect()

  // Confirm the user's credentials have been recently verified
  const shouldUserRevalidate = !has({ reverification: 'strict' })

  // Prompt reverification if recent verification is missing
  if (shouldUserRevalidate) {
    return reverificationError('strict')
  }

  // Proceed if reverification is successful
  return { success: true }
}
app/page.tsx
'use client'

import { useReverification } from '@clerk/nextjs'
import { isReverificationCancelledError } from '@clerk/nextjs/errors'
import { myAction } from '../actions'

export default function Page() {
  const performAction = useReverification(myAction)

  const handleClick = async () => {
    try {
      const myData = await performAction()
      //     ^ this is typed as { success: boolean }
    } catch (error) {
      if (isReverificationCancelledError(error)) {
        // Handle the case where the user cancels reverification
      }

      // Handle any errors that occur during the action
    }
  }

  return <button onClick={handleClick}>Perform action</button>
}

Compatibility

  • Support for Reverification is enabled for all new Clerk applications
  • For existing applications that want to enable Reverification, you will need to activate the Reverification APIs within the Clerk Dashboard
  • Native and mobile app support within our SDKs is still actively underway and will be available soon

For all of the details around Reverification, explore our documentation.

Contributors
Haris Chaniotakis
Pantelis Eleftheriadis
Konstantinos Pittas
Vaggelis Yfantis

Share this article

Flutter SDK Public Beta

Category
SDK
Published

We're excited to announce the beta release of our official Flutter SDK, bringing Clerk's powerful authentication and user management capabilities to Flutter applications.

This release includes both frontend (clerk_flutter) and backend (clerk_backend_api, clerk_auth) packages, enabling developers to build secure, cross-platform applications with ease.

Key Features

  • Complete Authentication Flow: Sign up, sign in, and manage user profiles directly from your Flutter code
  • Organization Support: Full implementation of Clerk's organization features for managing multi-tenant applications
  • Cross-Platform Compatibility: Works seamlessly across iOS, Android, and web platforms
  • Type-Safe API: Built with Dart's strong typing system for better development experience
  • Secure Backend Integration: Separate backend package for secure server-side operations

Getting Started

Add the package to your pubspec.yaml:

dependencies:
  clerk_flutter: ^0.0.8-beta

Flutter Implementation

Here's an example for how to initialize Clerk in your Flutter app:

class ExampleApp extends StatelessWidget {
  const ExampleApp({super.key, required this.publishableKey});

  final String publishableKey;

  @override
  Widget build(BuildContext context) {
    return ClerkAuth(
      config: ClerkAuthConfig(publishableKey: publishableKey),
      child: MaterialApp(
        theme: ThemeData.light(),
        debugShowCheckedModeBanner: false,
        home: Scaffold(
          body: SafeArea(
            child: ClerkErrorListener(
              child: ClerkAuthBuilder(
                signedInBuilder: (context, authState) {
                  return const ClerkUserButton();
                },
                signedOutBuilder: (context, authState) {
                  return const ClerkAuthentication();
                },
              ),
            ),
          ),
        ),
      ),
    );
  }
}

Server-side Usage

The clerk_auth package also allows interaction with Clerk via dart on the server side, if necessary:

import 'dart:io';

import 'package:clerk_auth/clerk_auth.dart';

Future<void> main() async {
  final auth = Auth(
    config: const AuthConfig(
      publishableKey: '<YOUR-PUBLISHABLE-KEY>',
    ),
    persistor: await DefaultPersistor.create(
      storageDirectory: Directory.current,
    ),
  );

  await auth.initialize();

  await auth.attemptSignIn(
    strategy: Strategy.password,
    identifier: '<USER-EMAIL>',
    password: '<PASSWORD>',
  );

  print('Signed in as ${auth.user}');

  await auth.signOut();

  auth.terminate();
}

Requirements

  • Flutter >= 3.10.0
  • Dart >= 3.0.0

Beta Status

This SDK is currently in beta. While we're confident in its functionality, we recommend:

  • Hard pinning to the patch version in your pubspec.yaml
  • Exercising caution before deploying to production
  • Testing thoroughly in your development environment

Feedback

We welcome your feedback during this beta period. Please share your thoughts, report issues, or suggest improvements on our GitHub repository.

Acknowledgments

Special thanks to DevAngels for their exceptional work in developing this SDK. Their expertise in Flutter development has been instrumental in bringing Clerk's authentication capabilities to the Flutter ecosystem.

Contributor
Jeff Escalante

Share this article