clerk-custom-ui

작성자: clerk

커스텀 인증 흐름을 구축하고, 훅과 외형 스타일링을 사용하여 Clerk 컴포넌트를 시각적으로 브랜딩합니다. 커스텀 로그인/회원가입 UI를 구축하기 위한 useSignIn 및 useSignUp 훅을 제공합니다. API는 Core 2와 현재 SDK 버전 간에 차이가 있습니다. 변수(색상, 타이포그래피, 테두리), 옵션(로고, 소셜 버튼 레이아웃), 사전 구축된 테마(다크, 네오브루탈리즘, shadcn, 심플)를 통한 외형 커스터마이징. shadcn 테마는 components.json이 있을 때 shadcn/ui 프로젝트와 자동으로 일치합니다. 테마...

npx skills add https://github.com/clerk/skills --skill clerk-custom-ui

Custom UI

Prerequisite: Ensure ClerkProvider wraps your app. See clerk-setup skill.

Version: Check package.json for the SDK version — see clerk skill for the version table. This determines which custom flow references to use below.

This skill covers two areas:

  1. Custom authentication flows — build your own sign-in/sign-up UI with hooks
  2. Appearance customization — theme, style, and brand Clerk's pre-built components

What Do You Need?

TaskReference
Custom sign-in (Core 2 / LTS)core-2/custom-sign-in.md
Custom sign-up (Core 2 / LTS)core-2/custom-sign-up.md
Custom sign-in (Current SDK v7+)core-3/custom-sign-in.md
Custom sign-up (Current SDK v7+)core-3/custom-sign-up.md
Show component pattern (Current SDK)core-3/show-component.md

Custom Flow References

TaskCore 2Current
Custom sign-in (useSignIn)core-2/custom-sign-in.mdcore-3/custom-sign-in.md
Custom sign-up (useSignUp)core-2/custom-sign-up.mdcore-3/custom-sign-up.md
<Show> component(use <SignedIn>, <SignedOut>, <Protect>)core-3/show-component.md

Appearance Customization

Appearance customization applies to both Core 2 and the current SDK.

Component Customization Options

Appearance Pattern

<SignIn
  appearance={{
    variables: {
      colorPrimary: '#0000ff',
      borderRadius: '0.5rem',
    },
    options: {
      logoImageUrl: '/logo.png',
      socialButtonsVariant: 'iconButton',
    },
  }}
/>

Core 2 ONLY (skip if current SDK): The options property was named layout. Use layout: { logoImageUrl: '...', socialButtonsVariant: '...' } instead of options.

variables (colors, typography, borders)

PropertyDescription
colorPrimaryPrimary color throughout
colorBackgroundBackground color
borderRadiusBorder radius (default: 0.375rem)

Opacity change: colorRing and colorModalBackdrop now render at full opacity. Use explicit rgba() values if you need transparency.

Core 2 ONLY (skip if current SDK): colorRing and colorModalBackdrop rendered at 15% opacity by default.

options (structure, logo, social buttons)

PropertyDescription
logoImageUrlURL to custom logo
socialButtonsVariant'blockButton' | 'iconButton' | 'auto'
socialButtonsPlacement'top' | 'bottom'
showOptionalFieldsShow optional fields (default: false)

Core 2 ONLY (skip if current SDK): This property is called layout, not options. Also, showOptionalFields defaulted to true.

Themes

Install themes from @clerk/ui:

npm install @clerk/ui
import { dark } from '@clerk/ui/themes'

<ClerkProvider appearance={{ theme: dark }} />

Core 2 ONLY (skip if current SDK): Themes are imported from @clerk/themes (install @clerk/themes instead of @clerk/ui). Example: import { dark } from '@clerk/themes'.

Theme stacking — pass an array where the last theme takes precedence:

import { dark, neobrutalism } from '@clerk/ui/themes'

<ClerkProvider appearance={{ theme: [dark, neobrutalism] }} />

CSS color-scheme support — the default theme respects the CSS color-scheme property for automatic light/dark mode toggling.

Available themes: dark, neobrutalism, shadcn, simple

shadcn Theme

IMPORTANT: If the project has components.json (shadcn/ui installed), ALWAYS apply the shadcn theme as the FIRST customization step. This ensures Clerk components visually match the existing shadcn design system. Skip this only if the user explicitly requests a different theme.

If the project uses shadcn/ui (check for components.json in the project root), always use the shadcn theme:

import { shadcn } from '@clerk/ui/themes'

<ClerkProvider appearance={{ theme: shadcn }} />

Also import shadcn CSS in your global styles:

@import 'tailwindcss';
@import '@clerk/ui/themes/shadcn.css';

Core 2 ONLY (skip if current SDK): Import from @clerk/themes and @clerk/themes/shadcn.css:

import { shadcn } from '@clerk/themes'
@import '@clerk/themes/shadcn.css';

Workflow

  1. Identify customization needs (custom flow or appearance)
  2. For custom flows: check SDK version → read appropriate core-2/ or core-3/ reference
  3. For appearance: WebFetch the appropriate documentation above
  4. Apply appearance prop to your Clerk components or build custom flow with hooks

Common Pitfalls

IssueSolution
Colors not applyingUse colorPrimary not primaryColor
Logo not showingPut logoImageUrl inside options: {} (or layout: {} in Core 2)
Social buttons wrongAdd socialButtonsVariant: 'iconButton' in options (or layout in Core 2)
Styling not workingUse appearance prop, not direct CSS (unless with bring-your-own-css)
Hook returns different shapeCheck SDK version — Core 2 and current have completely different useSignIn/useSignUp APIs

See Also

  • clerk-setup - Initial Clerk install
  • clerk-nextjs-patterns - Next.js patterns
  • clerk-orgs - B2B organizations

clerk의 다른 스킬

clerk-testing
clerk
Clerk 인증 흐름을 위한 Playwright 및 Cypress E2E 테스트 유틸리티입니다. Playwright와 Cypress 프레임워크를 모두 지원하며, 각 프레임워크에 맞는 설정 패턴(Playwright의 globalSetup, Cypress의 커스텀 명령어)을 제공합니다. 테스트 환경을 초기화하고 봇 탐지를 우회하기 위해 clerkSetup()과 setupClerkTestingToken() 유틸리티를 제공합니다. 인증된 세션을 테스트 간에 재사용하여 테스트 실행 시간을 줄이는 storageState 지속성을 포함합니다. 테스트 API 키(pk_test_* ,...)가 필요합니다.
clerk-swift
clerk
ClerkKit을 사용한 네이티브 Swift/iOS 인증으로, 사전 구축된 인증 흐름 또는 맞춤형 인증 흐름을 지원합니다. 프로젝트 요구 사항에 따라 사전 구축된 AuthView 컴포넌트 또는 완전히 맞춤화된 네이티브 흐름 중 두 가지 구현 모드를 지원합니다. 앱 구성에 유효한 Clerk 퍼블리시 키를 직접 연결해야 하며, 기본적으로 plist나 환경 파일 간접 참조를 사용하지 않습니다. 패키지 설치 후 Apple Sign In 지원 등 기능 가용성을 확인하기 위해 /v1/environment 호출이 필수입니다.
mosaic
clerk
Work on Mosaic UI: styling a component with slot recipes (`defineSlotRecipe` / `useRecipe` / slots / variants), or building a flow — authoring a state machine…
clerk-billing
clerk
구독 관리를 위한 Clerk Billing - Clerk의 PricingTable을 렌더링합니다.
clerk-nextjs-patterns
clerk
Clerk를 사용한 인증, 미들웨어, 서버 액션, 사용자 범위 캐싱을 위한 고급 Next.js 패턴. 서버 측 await auth()와 클라이언트 측 useAuth() 훅을 구분하며, 이 둘을 혼용하는 것은 흔한 치명적 실수입니다. 미들웨어 전략(퍼블릭 우선 vs 보호 우선), API 라우트 보호, 적절한 HTTP 상태 코드(401 vs 403)를 다룹니다. unstable_cache를 사용한 사용자 범위 캐싱 패턴과 승인되지 않은 변이로부터 서버 액션을 보호하는 방법을 포함합니다. Core 2 호환성을 제공합니다...
clerk-expo-patterns
clerk
Expo / React Native 패턴과 Clerk — SecureStore 토큰 캐시, OAuth
changesets
clerk
Create or refresh a `.changeset/<slug>.md` for the current branch, or report that none is required. Triggers on "/changesets create", "add a changeset",…
clerk-astro-patterns
clerk
Clerk을 사용한 Astro 패턴 — 미들웨어, SSR 페이지, 아일랜드 컴포넌트