Variables prop
The variables property is used to adjust the general styles of the component's base theme, like colors, backgrounds, and typography.
Properties
- Name
- colorPrimary
- Type
- string
- Description
- The primary color used throughout the components. 
 
- Name
- colorDanger
- Type
- string
- Description
- The color used for error states. 
 
- Name
- colorSuccess
- Type
- string
- Description
- The color used for success states. 
 
- Name
- colorWarning
- Type
- string
- Description
- The color used for warning states. 
 
- Name
- colorNeutral
- Type
- string
- Description
- The color that will be used for all to generate the neutral shades the components use. This option applies to borders, backgrounds for hovered elements, hovered dropdown options. 
 
- Name
- colorText
- Type
- string
- Description
- The color used for text. 
 
- Name
- colorTextOnPrimaryBackground
- Type
- string
- Description
- The color used for text on the primary background. 
 
- Name
- colorTextSecondary
- Type
- string
- Description
- The color used for secondary text. 
 
- Name
- colorBackground
- Type
- string
- Description
- The background color for the card container. 
 
- Name
- colorInputText
- Type
- string
- Description
- The color used for text in input fields. 
 
- Name
- colorInputBackground
- Type
- string
- Description
- The background color used for input fields. 
 
- Name
- colorShimmer
- Type
- string
- Description
- The color of the avatar shimmer. 
 
- Name
- fontFamily
- Type
- string
- Description
- The font family used throughout the components. By default, it is set to - inherit.
 
- Name
- fontFamilyButtons
- Type
- string
- Description
- The font family used for buttons. By default, it is set to - inherit.
 
- Name
- fontSize
- Type
- string
- Description
- The font size used throughout the components. By default, this is set to - 0.8125rem.
 
- Name
- fontWeight
- Type
- {normal: number, medium: number, semibold: number, bold: number}
- Description
- The font weight used throughout the components. By default, this is set to - {normal: 400, medium: 500, semibold: 600, bold: 700}.
 
- Name
- borderRadius
- Type
- string
- Description
- The border radius used throughout the components. By default, this is set to - 0.375rem.
 
- Name
- spacingUnit
- Type
- string
- Description
- The spacing unit used throughout the components. By default, this is set to - 1rem.
 
Usage
You can customize Clerk components by passing an object of variables to the variables property of the appearance prop.
Apply variables to all Clerk components
To customize all Clerk components, pass the variables property to the appearance prop of the <ClerkProvider> component.
In the following example, the primary color is set to blue and the text color is set to white. Because these styles are applied to the <ClerkProvider>, which wraps the entire application, these styles will be applied to all Clerk components that use the primary color and text color.
import { ClerkProvider } from '@clerk/nextjs'
export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <ClerkProvider
      appearance={{
        variables: {
          colorPrimary: 'blue',
          colorText: 'black',
        },
      }}
    >
      <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
      appearance={{
        variables: {
          colorPrimary: 'blue',
          colorText: 'black',
        },
      }}
    >
      <Component {...pageProps} />
    </ClerkProvider>
  )
}
export default MyAppimport React from 'react'
import './App.css'
import { ClerkProvider } from '@clerk/clerk-react'
if (!process.env.REACT_APP_CLERK_PUBLISHABLE_KEY) {
  throw new Error('Missing Publishable Key')
}
const clerkPubKey = process.env.REACT_APP_CLERK_PUBLISHABLE_KEY
function App() {
  return (
    <ClerkProvider
      appearance={{
        variables: {
          colorPrimary: 'blue',
          colorText: 'black',
        },
      }}
      publishableKey={clerkPubKey}
    >
      <div>Hello from clerk</div>
    </ClerkProvider>
  )
}
export default App// Import ClerkApp
import { ClerkApp } from '@clerk/remix'
import type { MetaFunction, LoaderFunction } from '@remix-run/node'
import { Links, LiveReload, Meta, Outlet, Scripts, ScrollRestoration } from '@remix-run/react'
import { rootAuthLoader } from '@clerk/remix/ssr.server'
export const meta: MetaFunction = () => ({
  charset: 'utf-8',
  title: 'New Remix App',
  viewport: 'width=device-width,initial-scale=1',
})
export const loader: LoaderFunction = (args) => rootAuthLoader(args)
function App() {
  return (
    <html lang="en">
      <head>
        <Meta />
        <Links />
      </head>
      <body>
        <Outlet />
        <ScrollRestoration />
        <Scripts />
        <LiveReload />
      </body>
    </html>
  )
}
export default ClerkApp(App, {
  appearance: {
    variables: {
      colorPrimary: 'blue',
      colorText: 'black',
    },
  },
})import clerk from '@clerk/astro'
export default defineConfig({
  integrations: [
    clerk({
      appearance: {
        variables: {
          colorPrimary: 'blue',
          colorText: 'black',
        },
      },
    }),
  ],
})import { createApp } from 'vue'
import App from './App.vue'
import { clerkPlugin } from '@clerk/vue'
const app = createApp(App)
app.use(clerkPlugin, {
  appearance: {
    variables: {
      colorPrimary: 'blue',
      colorText: 'black',
    },
  },
})
app.mount('#app')export default defineNuxtConfig({
  modules: ['@clerk/nuxt'],
  clerk: {
    appearance: {
      variables: {
        colorPrimary: 'blue',
        colorText: 'black',
      },
    },
  },
})Apply variables to all instances of a Clerk component
You can customize all instances of a Clerk component by passing the component to the appearance prop of the <ClerkProvider>. The appearance prop accepts the name of the Clerk component you want to style as a key.
In the following example, the primary color is set to blue and the text color is set to white for all instances of the <SignIn /> component.
import { ClerkProvider } from '@clerk/nextjs'
export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <ClerkProvider
      appearance={{
        signIn: {
          variables: {
            colorPrimary: 'blue',
            colorText: 'black',
          },
        },
      }}
    >
      <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
      appearance={{
        signIn: {
          variables: {
            colorPrimary: 'blue',
            colorText: 'black',
          },
        },
      }}
    >
      <Component {...pageProps} />
    </ClerkProvider>
  )
}
export default MyAppimport React from 'react'
import './App.css'
import { ClerkProvider } from '@clerk/clerk-react'
if (!process.env.REACT_APP_CLERK_PUBLISHABLE_KEY) {
  throw new Error('Missing Publishable Key')
}
const clerkPubKey = process.env.REACT_APP_CLERK_PUBLISHABLE_KEY
function App() {
  return (
    <ClerkProvider
      appearance={{
        signIn: {
          variables: {
            colorPrimary: 'blue',
            colorText: 'black',
          },
        },
      }}
      publishableKey={clerkPubKey}
    >
      <div>Hello from clerk</div>
    </ClerkProvider>
  )
}
export default App// Import ClerkApp
import { ClerkApp } from '@clerk/remix'
import type { MetaFunction, LoaderFunction } from '@remix-run/node'
import { Links, LiveReload, Meta, Outlet, Scripts, ScrollRestoration } from '@remix-run/react'
import { rootAuthLoader } from '@clerk/remix/ssr.server'
export const meta: MetaFunction = () => ({
  charset: 'utf-8',
  title: 'New Remix App',
  viewport: 'width=device-width,initial-scale=1',
})
export const loader: LoaderFunction = (args) => rootAuthLoader(args)
function App() {
  return (
    <html lang="en">
      <head>
        <Meta />
        <Links />
      </head>
      <body>
        <Outlet />
        <ScrollRestoration />
        <Scripts />
        <LiveReload />
      </body>
    </html>
  )
}
export default ClerkApp(App, {
  appearance: {
    signIn: {
      variables: {
        colorPrimary: 'blue',
        colorText: 'black',
      },
    },
  },
})import clerk from '@clerk/astro'
export default defineConfig({
  integrations: [
    clerk({
      appearance: {
        signIn: {
          variables: {
            colorPrimary: 'blue',
            colorText: 'black',
          },
        },
      },
    }),
  ],
})import { createApp } from 'vue'
import App from './App.vue'
import { clerkPlugin } from '@clerk/vue'
const app = createApp(App)
app.use(clerkPlugin, {
  appearance: {
    signIn: {
      variables: {
        colorPrimary: 'blue',
        colorText: 'black',
      },
    },
  },
})
app.mount('#app')export default defineNuxtConfig({
  modules: ['@clerk/nuxt'],
  clerk: {
    appearance: {
      signIn: {
        variables: {
          colorPrimary: 'blue',
          colorText: 'black',
        },
      },
    },
  },
})Apply variables to a single Clerk component
To customize a single Clerk component, pass the variables property to the appearance prop of the Clerk component.
The following example shows how to customize the <SignIn /> component by setting the primary color to blue and the text color to white.
import { SignIn } from '@clerk/nextjs'
export default function Page() {
  return (
    <SignIn
      appearance={{
        variables: {
          colorPrimary: 'blue',
          colorText: 'black',
        },
      }}
    />
  )
}import { SignIn } from '@clerk/nextjs'
const SignInPage = () => (
  <SignIn
    appearance={{
      variables: {
        colorPrimary: 'blue',
        colorText: 'black',
      },
    }}
  />
)
export default SignInPageimport { SignIn } from '@clerk/clerk-react'
const SignInPage = () => (
  <SignIn
    appearance={{
      variables: {
        colorPrimary: 'blue',
        colorText: 'black',
      },
    }}
  />
)
export default SignInPageimport { SignIn } from '@clerk/remix'
export default function SignInPage() {
  return (
    <div style={{ border: '2px solid blue', padding: '2rem' }}>
      <h1>Sign In route</h1>
      <SignIn
        appearance={{
          variables: {
            colorPrimary: 'blue',
            colorText: 'black',
          },
        }}
      />
    </div>
  )
}---
import { SignIn } from '@clerk/astro/components'
---
<SignIn
  appearance={{
    colorPrimary: 'blue',
    colorText: 'black',
  }}
/><script setup lang="ts">
import { SignIn } from '@clerk/vue'
</script>
<template>
  <SignIn :appearance="{ colorPrimary: 'blue', colorText: 'black' }" />
</template><script setup lang="ts">
// Components are automatically imported
</script>
<template>
  <SignIn :appearance="{ colorPrimary: 'blue', colorText: 'black' }" />
</template>Feedback
Last updated on