Skip to content

docs(expo): document native component theming#3285

Merged
chriscanin merged 8 commits intomainfrom
chris/native-components-theming
Apr 15, 2026
Merged

docs(expo): document native component theming#3285
chriscanin merged 8 commits intomainfrom
chris/native-components-theming

Conversation

@chriscanin
Copy link
Copy Markdown
Member

🔎 Previews:

What does this solve? What changed?

  • Adds a new Theming reference page (docs/reference/expo/native-components/theming.mdx) documenting the JSON-based theme system for Clerk's native Expo components (<AuthView />, <UserButton />, <UserProfileView />).
  • Adds theme to the Expo plugin options table in the native components overview page.
  • Adds the theming page to manifest.json under the native components nav section.

The theme JSON supports colors (15 semantic tokens), darkColors (automatic dark mode), design.borderRadius, and design.fontFamily (iOS only). Dark mode is controlled by the developer via Expo's userInterfaceStyle setting in app.json — the plugin does not modify it.

Source PR: clerk/javascript#8243

Deadline

  • Ships with the theming feature in @clerk/expo. No rush beyond that.

Other resources

@chriscanin chriscanin requested a review from a team as a code owner April 13, 2026 22:08
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 13, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
clerk-docs Ready Ready Preview Apr 15, 2026 9:08pm

Request Review

@chriscanin chriscanin requested a review from alexisintech April 13, 2026 22:10
@manovotny manovotny self-assigned this Apr 14, 2026
Add Oxford comma and point readers to the theming reference for
platform-specific details (fontFamily is iOS-only).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@manovotny manovotny left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pushed small fixes directly in ae4bb82:

  • Added Oxford comma and tweaked the theme property description in the overview to say "See the Theming reference for platform-specific details and the full schema". The previous wording could read as if fontFamily works on both platforms when it's iOS-only.

Also left one inline comment asking about whether <UserButton /> should be listed alongside the fully native components in the theming intro, since the avatar button itself is React Native and isn't styled by the theme (only the modal it opens is).


<Include src="_partials/expo/beta-callout" />

You can customize the appearance of Clerk's [Expo native components](/docs/reference/expo/native-components/overview) (`<AuthView />`, `<UserButton />`, and `<UserProfileView />`) by passing a `theme` option to the `@clerk/expo` config plugin. The plugin reads a JSON file at prebuild time and applies it to both iOS and Android.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is <UserButton /> intentionally included here?

Looking at UserButton.tsx in the SDK, the avatar button itself is a React Native component with hardcoded styles. The JSON theme applies to the native profile modal it opens (via UserProfileView), not the button circle itself.

This also creates a small tension with the statement on line 115:

Because the theme is applied at the native layer, it does not affect any web or JavaScript components.

If the intent is to describe the user-facing experience holistically (tapping the button shows a themed modal), that makes sense. Just wanted to flag the nuance. Otherwise, this could say something like "the profile modal opened by <UserButton />" instead of listing it alongside the fully native components.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have addressed this, let me know what you think!

Because the theme is applied at the native layer, it only affects the native views (<AuthView />, <UserProfileView />, and the profile modal opened by <UserButton />). It does not affect web components or React Native UI elements like the <UserButton /> avatar itself.

The avatar button itself is React Native — only the profile modal it
opens (UserProfileView) is styled by the JSON theme.
…ting linkable

Move the UserButton avatar disclaimer into a [!NOTE] callout for
visibility. Convert troubleshooting bullets into ### headings so each
item gets a linkable anchor.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@manovotny manovotny left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes look great @chriscanin! I pushed a couple more small tweaks in 93a548f:

  • Moved the <UserButton /> avatar caveat into a [!NOTE] callout so it's harder to miss.
  • Converted the troubleshooting bullets into ### headings so each item gets a linkable anchor. Useful for support links.

Looks great otherwise. Nice addition with the "removed theme prop" troubleshooting entry. 👍

@chriscanin chriscanin merged commit e49e37b into main Apr 15, 2026
8 checks passed
@chriscanin chriscanin deleted the chris/native-components-theming branch April 15, 2026 22:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants