Skip to main content
We do not recommend Auth.js, it is not stable at the moment
Here’s how to switch from Clerk to Auth.js.

1. Replace the dependencies

Uninstall the existing Clerk dependencies from the auth package…
Terminal
… and install the Auth.js dependencies.
Terminal

2. Generate an Auth.js secret

Auth.js requires a random value secret, used by the library to encrypt tokens and email verification hashes. In each of the relevant app directories, generate a secret with the following command:
Terminal
This will automatically add an AUTH_SECRET environment variable to the .env.local file in each directory.

3. Replace the relevant files

Delete the existing client.ts and server.ts files in the auth package. Then, create the following file:
packages/auth/index.ts

4. Update the middleware

Update the middleware.ts file in the auth package with the following content:
packages/auth/middleware.ts

5. Update the auth components

Auth.js has no concept of “sign up”, so we’ll use the signIn function to sign up users. Update both the sign-in.tsx and sign-up.tsx components in the auth package with the same content:

6. Update the Provider file

Auth.js has no concept of a Provider as a higher-order component, so you can either remove it entirely or just replace it with a stub, like so:
packages/auth/provider.tsx

7. Create an auth route handler

In your app application, create an auth route handler file with the following content:
apps/app/api/auth/[...nextauth]/route.ts

8. Update your apps

From here, you’ll need to replace any remaining Clerk implementations in your apps with Auth.js references. This means swapping out references like:
page.tsx
Keep in mind that you’ll need to build your own “organization” logic as Auth.js doesn’t have a concept of organizations.