<ClerkProvider>
The <ClerkProvider>
component is required to integrate Clerk into your React application, providing session and user context to Clerk's hooks and components.
The recommended approach is to wrap your entire app with <ClerkProvider>
at the entry point to make authentication globally accessible. If you only need authentication for specific routes or pieces of your application, render <ClerkProvider>
deeper in the component tree. This allows you to implement Clerk's functionality precisely where required without impacting the rest of your app.
Usage
import React from 'react'
import { ClerkProvider } from '@clerk/nextjs'
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<ClerkProvider>
<html lang="en">
<body>{children}</body>
</html>
</ClerkProvider>
)
}
import { ClerkProvider } from '@clerk/nextjs'
import type { AppProps } from 'next/app'
function MyApp({ Component, pageProps }: AppProps) {
return (
<ClerkProvider {...pageProps}>
<Component {...pageProps} />
</ClerkProvider>
)
}
export default MyApp
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.tsx'
import { ClerkProvider } from '@clerk/clerk-react'
// Import your Publishable Key
const PUBLISHABLE_KEY = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY
if (!PUBLISHABLE_KEY) {
throw new Error('Add your Clerk Publishable Key to the .env.local file')
}
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<ClerkProvider publishableKey={PUBLISHABLE_KEY} afterSignOutUrl="/">
<App />
</ClerkProvider>
</React.StrictMode>,
)
import { ClerkProvider } from '@clerk/clerk-expo'
import { Slot } from 'expo-router'
export default function Layout() {
const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
if (publishableKey === undefined) {
throw new Error('Add EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY to your .env file')
}
return (
<ClerkProvider publishableKey={publishableKey}>
<Slot />
</ClerkProvider>
)
}
// Other imports
import { ClerkProvider, SignedIn, SignedOut, UserButton, SignInButton } from '@clerk/react-router'
export default function App({ loaderData }: Route.ComponentProps) {
return (
<ClerkProvider
loaderData={loaderData}
signUpFallbackRedirectUrl="/"
signInFallbackRedirectUrl="/"
>
<header className="flex items-center justify-center py-8 px-4">
<SignedOut>
<SignInButton />
</SignedOut>
<SignedIn>
<UserButton />
</SignedIn>
</header>
<main>
<Outlet />
</main>
</ClerkProvider>
)
}
// Rest of the root.tsx code
import { Outlet, createRootRoute } from '@tanstack/react-router'
import { Meta, Scripts } from '@tanstack/start'
import * as React from 'react'
import { ClerkProvider } from '@clerk/tanstack-start'
export const Route = createRootRoute({
component: () => {
return (
<RootDocument>
<Outlet />
</RootDocument>
)
},
})
function RootDocument({ children }: { children: React.ReactNode }) {
return (
<ClerkProvider>
<html>
<head>
<Meta />
</head>
<body>
{children}
<Scripts />
</body>
</html>
</ClerkProvider>
)
}
- Name
afterMultiSessionSingleSignOutUrl
- Type
string
- Description
The full URL or path to navigate to after a signing out from a currently active account in a multi-session app.
- Name
afterSignOutUrl
- Type
string
- Description
The full URL or path to navigate to after a successful sign-out.
- Name
allowedRedirectOrigins
- Type
Array<string | RegExp>
- Description
An optional array of domains to validate user-provided redirect URLs against. If no match is made, the redirect is considered unsafe and the default redirect will be used with a warning logged in the console.
- Name
allowedRedirectProtocols
- Type
Array<string>
- Description
An optional array of protocols to validate user-provided redirect URLs against. If no match is made, the redirect is considered unsafe and the default redirect will be used with a warning logged in the console.
- Name
appearance
- Type
Appearance | undefined
- Description
Optional object to style your components. Will only affect Clerk components and not Account Portal pages.
- Name
clerkJSUrl
- Type
string
- Description
Define the URL that
@clerk/clerk-js
should be hot-loaded from.
- Name
clerkJSVariant
- Type
'headless' | ''
- Description
If your web application only uses control components, you can set this value to
headless
and load a minimal ClerkJS bundle for optimal page performance.
- Name
clerkJSVersion
- Type
string
- Description
Define the npm version for
@clerk/clerk-js
.
- Name
domain
- Type
string | ((url: URL) => boolean)
- Description
Required if your application is a satellite application. Sets the domain of the satellite application.
- Name
dynamic
- Type
boolean
- Description
(For Next.js only) Indicates whether or not Clerk should make dynamic auth data available based on the current request. Defaults to
false
. Opts the application into dynamic rendering whentrue
. For more information, see Next.js rendering modes and Clerk.
- Name
initialState
- Type
InitialState
- Description
Provide an initial state of the Clerk client during server-side rendering. You don't need to set this value yourself unless you're developing an SDK.
- Name
isSatellite
- Type
boolean | ((url: URL) => boolean)
- Description
Whether the application is a satellite application.
- Name
localization
- Type
Localization | undefined
- Description
Optional object to localize your components. Will only affect Clerk components and not Account Portal pages.
- Name
nonce
- Type
string
- Description
This nonce value will be passed to the
@clerk/clerk-js
script tag. Use it to implement a strict-dynamic CSP. Requires thedynamic
prop to also be set.
- Name
publishableKey
- Type
string
- Description
The Clerk Publishable Key for your instance. This can be found on the API keys page in the Clerk Dashboard.
- Name
proxyUrl
- Type
string | ((url: URL) => string)
- Description
The URL that Clerk will proxy requests to. Required for applications that run behind a reverse proxy. Can be either a relative path (
/__clerk
) or a full URL (https://<your-domain>/__clerk
).
- Name
routerPush
- Type
(to: string) => Promise<unknown> | void
- Description
A function which takes the destination path as an argument and performs a "push" navigation.
- Name
routerReplace
- Type
(to: string) => Promise<unknown> | void
- Description
A function which takes the destination path as an argument and performs a "replace" navigation.
- Name
sdkMetadata
- Type
{ name: string; version: string; environment: string }
- Description
Contains information about the SDK that the host application is using. You don't need to set this value yourself unless you're developing an SDK.
- Name
selectInitialSession
- Type
(client: ClientResource) => ActiveSessionResource | null
- Description
By default, the last active session is used during client initialization. This option allows you to override that behavior, e.g. by selecting a specific session.
- Name
signInFallbackRedirectUrl
- Type
string
- Description
The fallback URL to redirect to after the user signs in, if there's no
redirect_url
in the path already. Defaults to/
. It's recommended to use the environment variable instead.
- Name
signUpFallbackRedirectUrl
- Type
string
- Description
The fallback URL to redirect to after the user signs up, if there's no
redirect_url
in the path already. Defaults to/
. It's recommended to use the environment variable instead.
- Name
signInForceRedirectUrl
- Type
string
- Description
If provided, this URL will always be redirected to after the user signs in. It's recommended to use the environment variable instead.
- Name
signUpForceRedirectUrl
- Type
string
- Description
If provided, this URL will always be redirected to after the user signs up. It's recommended to use the environment variable instead.
- Name
signInUrl
- Type
string
- Description
This URL will be used for any redirects that might happen and needs to point to your primary application on the client-side. This option is optional for production instances. It is required to be set for a satellite application in a development instance. It's recommended to use the environment variable instead.
- Name
signUpUrl
- Type
string
- Description
This URL will be used for any redirects that might happen and needs to point to your primary application on the client-side. This option is optional for production instances but must be set for a satellite application in a development instance. It's recommended to use the environment variable instead.
- Name
standardBrowser
- Type
boolean
- Description
By default, ClerkJS is loaded with the assumption that cookies can be set (browser setup). On native platforms this value must be set to
false
.
- Name
supportEmail
- Type
string
- Description
Optional support email for display in authentication screens. Will only affect Clerk components and not Account Portal pages.
- Name
syncHost
- Type
string
- Description
Chrome Extension only To enable, pass the URL of the web application that the extension will sync the authentication state from. See the dedicated guide for more information.
- Name
telemetry
- Type
false | { disabled: boolean; debug: boolean } | undefined
- Description
Controls whether or not Clerk will collect telemetry data. If set to
debug
, telemetry events are only logged to the console and not sent to Clerk.
- Name
touchSession
- Type
boolean
- Description
By default, the Clerk Frontend API
touch
endpoint is called during page focus to keep the last active session alive. This option allows you to disable this behavior.
- Name
waitlistUrl
- Type
string
- Description
The full URL or path to the waitlist page. If
undefined
, will redirect to the Account Portal waitlist page.
Feedback
Last updated on