Skip to content

feat(ui): Add unified ui prop with RSC support via conditional exports#7664

Open
jacekradko wants to merge 43 commits intomainfrom
jrad/ui-prop-cleanup
Open

feat(ui): Add unified ui prop with RSC support via conditional exports#7664
jacekradko wants to merge 43 commits intomainfrom
jrad/ui-prop-cleanup

Conversation

@jacekradko
Copy link
Member

@jacekradko jacekradko commented Jan 23, 2026

Summary

Refactors the UI loading architecture so users only interact with an opaque ui prop from @clerk/ui. Each SDK internally decides whether to use the bundled UI constructor or load from CDN.

Key addition: Added react-server conditional export so the ui prop works directly in Next.js App Router server components without requiring a client wrapper.

Key Changes

  • Public API: Users pass ui={ui} - the object is opaque and branded
  • Removed clerkUiCtor from public IsomorphicClerkOptions (kept internally as ui.ClerkUI for SDK use)
  • Default behavior: Bundled UI is used when available (ui.ClerkUI)
  • React Server Components support: Added react-server conditional export that provides a server-safe marker
  • Version pinning: CDN loading uses ui.version to pin the UI version

How It Works

The @clerk/ui package uses conditional exports:

".": {
  "react-server": "./dist/server.js",  // Server-safe marker (no ClerkUI)
  "default": "./dist/index.js"          // Full export (with ClerkUI)
}
Context Export Contains
Next.js RSC server.js { __brand, version }
Client / Other SDKs index.js { __brand, version, ClerkUI }

When IsomorphicClerk receives the ui prop:

  1. If ui.ClerkUI exists → use directly (bundled)
  2. If ui.__brand === '__clerkUI' but no ClerkUI → dynamic import from @clerk/ui/entry
  3. Otherwise → load from CDN

SDK Behavior

SDK UI Loading Implementation
Chrome Extension Bundled Passes ui={ui} directly
React Bundled Uses ui.ClerkUI directly
Next.js App Router Bundled Server gets marker, client dynamically imports
Vue Bundled Uses ui.ClerkUI directly
Astro Bundled Uses ui.ClerkUI directly

Usage

Next.js App Router (server component):

// app/layout.tsx - Works directly, no client wrapper needed!
import { ClerkProvider } from '@clerk/nextjs';
import { ui } from '@clerk/ui';

export default function Layout({ children }) {
  return <ClerkProvider ui={ui}>{children}</ClerkProvider>;
}

Other SDKs:

import { ClerkProvider } from '@clerk/react';
import { ui } from '@clerk/ui';

<ClerkProvider ui={ui}>{children}</ClerkProvider>

Test plan

  • Build passes
  • Unit tests pass
  • Integration test for bundled UI in Next.js App Router added
  • Verify Chrome Extension works with bundled UI
  • Verify React uses bundled UI by default
  • Verify Next.js App Router uses bundled UI via dynamic import
  • Verify Vue uses bundled UI by default
  • Verify Astro uses bundled UI by default

Summary by CodeRabbit

  • New Features

    • Added ui prop to ClerkProvider enabling bundled Clerk UI support across React, Vue, Astro, and Chrome Extension
    • New ui export from @clerk/ui package for direct UI bundling instead of CDN loading
    • Server-safe UI export for React Server Components
  • Tests

    • Added comprehensive test coverage for bundled UI scenarios and plugin loading

@vercel
Copy link

vercel bot commented Jan 23, 2026

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

Project Deployment Actions Updated (UTC)
clerk-js-sandbox Ready Ready Preview, Comment Feb 6, 2026 4:51am

Request Review

@changeset-bot
Copy link

changeset-bot bot commented Jan 23, 2026

🦋 Changeset detected

Latest commit: 41bc6f4

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 20 packages
Name Type
@clerk/ui Minor
@clerk/react Minor
@clerk/vue Minor
@clerk/astro Minor
@clerk/chrome-extension Minor
@clerk/shared Minor
@clerk/expo Patch
@clerk/nextjs Patch
@clerk/react-router Patch
@clerk/tanstack-react-start Patch
@clerk/nuxt Patch
@clerk/agent-toolkit Patch
@clerk/backend Patch
@clerk/clerk-js Patch
@clerk/expo-passkeys Patch
@clerk/express Patch
@clerk/fastify Patch
@clerk/localizations Patch
@clerk/msw Patch
@clerk/testing Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@pkg-pr-new
Copy link

pkg-pr-new bot commented Jan 23, 2026

Open in StackBlitz

@clerk/agent-toolkit

npm i https://pkg.pr.new/@clerk/agent-toolkit@7664

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@7664

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@7664

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@7664

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@7664

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@7664

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@7664

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@7664

@clerk/express

npm i https://pkg.pr.new/@clerk/express@7664

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@7664

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@7664

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@7664

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@7664

@clerk/react

npm i https://pkg.pr.new/@clerk/react@7664

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@7664

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@7664

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@7664

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@7664

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@7664

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@7664

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@7664

commit: 41bc6f4

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 23, 2026

📝 Walkthrough

Walkthrough

This PR introduces a new public UI API and refactors Clerk UI consumption across multiple packages. A new ui export from @clerk/ui includes a branded marker (__clerkUI) and optional ClerkUI constructor, alongside a server-safe variant at @clerk/ui/server that excludes the constructor. The changes update React, Vue, Astro, Chrome Extension, and Next.js packages to accept and use this new ui prop instead of internal mechanisms. An interface rename from ClerkUiConstructor to ClerkUIConstructor includes backward compatibility. New test coverage validates exports and UI loading behavior across packages, including Next.js integration tests with bundled UI.

Possibly related PRs

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 36.36% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title 'feat(ui): Add unified ui prop with RSC support via conditional exports' accurately and concisely describes the main change: introducing a unified ui prop with React Server Component support through conditional exports, which aligns with the core objective of refactoring UI loading and adding server-safe exports.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/vue/src/plugin.ts (1)

81-91: Misleading comment on fallback behavior.

The comment states "fall back to clerkUiCtor (deprecated)" but the actual fallback is loading from CDN via loadClerkUiScript, not checking a clerkUiCtor property. Consider updating the comment to accurately reflect the behavior:

-          // Check for ui.ctor first (new API), then fall back to clerkUiCtor (deprecated)
+          // Check for ui.ctor first (bundled UI), then fall back to loading from CDN
🧹 Nitpick comments (1)
packages/astro/src/internal/create-clerk-instance.ts (1)

118-122: Misleading comment: fallback is CDN loading, not clerkUiCtor.

The comment mentions "fall back to clerkUiCtor (deprecated)" but the actual fallback is loading from CDN via loadClerkUiScript. The clerkUiCtor option path was removed from this function.

Suggested fix
-  // Check for ui.ctor first (new API), then fall back to clerkUiCtor (deprecated)
+  // If ui.ctor is provided (bundled UI), use it directly; otherwise load from CDN
   const ctorFromUi = options?.ui?.ctor;
   if (ctorFromUi) {
     return ctorFromUi;
   }

Adds `ui` prop to ClerkProvider for specifying UI metadata.
Each SDK decides whether to use `ui.ctor` based on support level.

- `@clerk/ui` exports only `{ ui }` with version and ctor
- Chrome extension uses `ui.ctor` (verified to work)
- React, Vue, Astro use CDN loading (not verified for bundling yet)
- Omit `clerkUiCtor` from public ClerkProviderProps type
@jacekradko jacekradko force-pushed the jrad/ui-prop-cleanup branch from 431aa50 to c5ff0d1 Compare January 23, 2026 20:05
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/astro/src/internal/create-clerk-instance.ts (1)

111-124: ui.ctor is not being used when provided.

The PR objective states that when ui.ctor is provided, it should be used instead of loading from CDN. However, getClerkUiEntryChunk always loads the UI script from CDN and ignores options.ui?.ctor. This contradicts the JSDoc in packages/astro/src/types.ts (lines 39-43) which states: "When provided with a bundled UI via ui.ctor, it will be used instead of loading from CDN."

Suggested fix to honor ui.ctor when provided
 async function getClerkUiEntryChunk<TUi extends Ui = Ui>(
   options?: AstroClerkCreateInstanceParams<TUi>,
 ): Promise<ClerkUiConstructor> {
+  // Use bundled UI constructor if provided
+  if (options?.ui?.ctor) {
+    return options.ui.ctor;
+  }
+
   await loadClerkUiScript(options);

   if (!window.__internal_ClerkUiCtor) {
     throw new Error('Failed to download latest Clerk UI. Contact support@clerk.com.');
   }

   return window.__internal_ClerkUiCtor;
 }
🤖 Fix all issues with AI agents
In `@packages/vue/src/plugin.ts`:
- Around line 81-87: The code always calls loadClerkUiScript and ignores a
provided bundled constructor; update the clerkUiCtorPromise logic to first check
pluginOptions.ui?.ctor (or options.ui?.ctor) and resolve to that ctor if
present, otherwise call loadClerkUiScript and fall back to
window.__internal_ClerkUiCtor; ensure clerkUiCtorPromise returns the provided
ctor when available, and preserve the existing error throw if neither the
provided ctor nor the downloaded window.__internal_ClerkUiCtor is present.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@packages/chrome-extension/src/react/ClerkProvider.tsx`:
- Around line 38-40: The spread uses an unsafe cast ({...(rest as any)}) to
sneak in clerkUiCtor, hiding a type mismatch; replace this by declaring an
internal extended props type (e.g., InternalClerkProviderProps) that extends
ClerkProviderProps and includes clerkUiCtor with the correct type, update the
component signature to use that internal type, remove the as any cast, and pass
clerkUiCtor={ui.ctor} and Clerk={clerkInstance} with proper typing so TypeScript
enforces compatibility (locate symbols: ClerkProvider.tsx, rest, clerkUiCtor,
ui.ctor, ClerkReactProvider, ClerkProviderProps, clerkInstance).
♻️ Duplicate comments (1)
packages/vue/src/plugin.ts (1)

81-87: ui.ctor is not being used when provided.

Same issue as in the Astro integration: the code always loads the UI from CDN via loadClerkUiScript and ignores pluginOptions.ui?.ctor. This contradicts the documented behavior that bundled UI via ui.ctor should be used instead of CDN loading.

🧹 Nitpick comments (1)
.changeset/shiny-owls-dance.md (1)

10-23: Consider adding migration guidance.

The changeset describes the new ui prop but doesn't mention the deprecation or removal of clerkUiCtor. Since the PR objectives state "Omits clerkUiCtor from public ClerkProviderProps," consider adding explicit migration guidance to help users transition from the old API.

📝 Suggested addition for migration guidance
 Usage:
 ```tsx
 import { ui } from '@clerk/ui';
 
 <ClerkProvider ui={ui}>
   ...
 </ClerkProvider>

+Migration note: The clerkUiCtor prop has been removed from public types. Use the ui prop instead by importing the ui object from @clerk/ui.

</details>

</blockquote></details>

</blockquote></details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/react/src/isomorphicClerk.ts (1)

511-535: Add tests for the new bundled ui.ctor path and CDN fallback.

Line 511 introduces a new early-return path for ui.ctor. I don’t see tests in this PR; please add (or point to) coverage that validates the bundled constructor path and the CDN fallback to prevent regressions.

@clerk-cookie
Copy link
Collaborator

Hey @jacekradko - the snapshot version command generated the following package versions:

Package Version
@clerk/agent-toolkit 0.2.9-snapshot.v20260203033021
@clerk/astro 3.0.0-snapshot.v20260203033021
@clerk/backend 3.0.0-snapshot.v20260203033021
@clerk/chrome-extension 3.0.0-snapshot.v20260203033021
@clerk/clerk-js 6.0.0-snapshot.v20260203033021
@clerk/dev-cli 1.0.0-snapshot.v20260203033021
@clerk/expo 3.0.0-snapshot.v20260203033021
@clerk/expo-passkeys 1.0.0-snapshot.v20260203033021
@clerk/express 2.0.0-snapshot.v20260203033021
@clerk/fastify 2.7.0-snapshot.v20260203033021
@clerk/localizations 4.0.0-snapshot.v20260203033021
@clerk/msw 0.0.1-snapshot.v20260203033021
@clerk/nextjs 7.0.0-snapshot.v20260203033021
@clerk/nuxt 2.0.0-snapshot.v20260203033021
@clerk/react 6.0.0-snapshot.v20260203033021
@clerk/react-router 3.0.0-snapshot.v20260203033021
@clerk/shared 4.0.0-snapshot.v20260203033021
@clerk/tanstack-react-start 1.0.0-snapshot.v20260203033021
@clerk/testing 2.0.0-snapshot.v20260203033021
@clerk/ui 1.0.0-snapshot.v20260203033021
@clerk/upgrade 2.0.0-snapshot.v20260203033021
@clerk/vue 2.0.0-snapshot.v20260203033021

Tip: Use the snippet copy button below to quickly install the required packages.
@clerk/agent-toolkit

npm i @clerk/agent-toolkit@0.2.9-snapshot.v20260203033021 --save-exact

@clerk/astro

npm i @clerk/astro@3.0.0-snapshot.v20260203033021 --save-exact

@clerk/backend

npm i @clerk/backend@3.0.0-snapshot.v20260203033021 --save-exact

@clerk/chrome-extension

npm i @clerk/chrome-extension@3.0.0-snapshot.v20260203033021 --save-exact

@clerk/clerk-js

npm i @clerk/clerk-js@6.0.0-snapshot.v20260203033021 --save-exact

@clerk/dev-cli

npm i @clerk/dev-cli@1.0.0-snapshot.v20260203033021 --save-exact

@clerk/expo

npm i @clerk/expo@3.0.0-snapshot.v20260203033021 --save-exact

@clerk/expo-passkeys

npm i @clerk/expo-passkeys@1.0.0-snapshot.v20260203033021 --save-exact

@clerk/express

npm i @clerk/express@2.0.0-snapshot.v20260203033021 --save-exact

@clerk/fastify

npm i @clerk/fastify@2.7.0-snapshot.v20260203033021 --save-exact

@clerk/localizations

npm i @clerk/localizations@4.0.0-snapshot.v20260203033021 --save-exact

@clerk/msw

npm i @clerk/msw@0.0.1-snapshot.v20260203033021 --save-exact

@clerk/nextjs

npm i @clerk/nextjs@7.0.0-snapshot.v20260203033021 --save-exact

@clerk/nuxt

npm i @clerk/nuxt@2.0.0-snapshot.v20260203033021 --save-exact

@clerk/react

npm i @clerk/react@6.0.0-snapshot.v20260203033021 --save-exact

@clerk/react-router

npm i @clerk/react-router@3.0.0-snapshot.v20260203033021 --save-exact

@clerk/shared

npm i @clerk/shared@4.0.0-snapshot.v20260203033021 --save-exact

@clerk/tanstack-react-start

npm i @clerk/tanstack-react-start@1.0.0-snapshot.v20260203033021 --save-exact

@clerk/testing

npm i @clerk/testing@2.0.0-snapshot.v20260203033021 --save-exact

@clerk/ui

npm i @clerk/ui@1.0.0-snapshot.v20260203033021 --save-exact

@clerk/upgrade

npm i @clerk/upgrade@2.0.0-snapshot.v20260203033021 --save-exact

@clerk/vue

npm i @clerk/vue@2.0.0-snapshot.v20260203033021 --save-exact

Simplify the ui prop to only accept the bundled ClerkUI constructor
from @clerk/ui. Users can no longer pass version or url to override
CDN loading through the ui prop.

- Update Ui type to require ClerkUI and make version optional
- Remove version/url params from loadClerkUIScript calls in React/Vue
- Update Vue plugin tests to cover new behavior
- CDN loading still works as default when ui prop is not provided
@jacekradko
Copy link
Member Author

!snapshot

@clerk-cookie
Copy link
Collaborator

Hey @jacekradko - the snapshot version command generated the following package versions:

Package Version
@clerk/agent-toolkit 0.2.9-snapshot.v20260204043403
@clerk/astro 3.0.0-snapshot.v20260204043403
@clerk/backend 3.0.0-snapshot.v20260204043403
@clerk/chrome-extension 3.0.0-snapshot.v20260204043403
@clerk/clerk-js 6.0.0-snapshot.v20260204043403
@clerk/dev-cli 1.0.0-snapshot.v20260204043403
@clerk/expo 3.0.0-snapshot.v20260204043403
@clerk/expo-passkeys 1.0.0-snapshot.v20260204043403
@clerk/express 2.0.0-snapshot.v20260204043403
@clerk/fastify 2.7.0-snapshot.v20260204043403
@clerk/localizations 4.0.0-snapshot.v20260204043403
@clerk/msw 0.0.1-snapshot.v20260204043403
@clerk/nextjs 7.0.0-snapshot.v20260204043403
@clerk/nuxt 2.0.0-snapshot.v20260204043403
@clerk/react 6.0.0-snapshot.v20260204043403
@clerk/react-router 3.0.0-snapshot.v20260204043403
@clerk/shared 4.0.0-snapshot.v20260204043403
@clerk/tanstack-react-start 1.0.0-snapshot.v20260204043403
@clerk/testing 2.0.0-snapshot.v20260204043403
@clerk/ui 1.0.0-snapshot.v20260204043403
@clerk/upgrade 2.0.0-snapshot.v20260204043403
@clerk/vue 2.0.0-snapshot.v20260204043403

Tip: Use the snippet copy button below to quickly install the required packages.
@clerk/agent-toolkit

npm i @clerk/agent-toolkit@0.2.9-snapshot.v20260204043403 --save-exact

@clerk/astro

npm i @clerk/astro@3.0.0-snapshot.v20260204043403 --save-exact

@clerk/backend

npm i @clerk/backend@3.0.0-snapshot.v20260204043403 --save-exact

@clerk/chrome-extension

npm i @clerk/chrome-extension@3.0.0-snapshot.v20260204043403 --save-exact

@clerk/clerk-js

npm i @clerk/clerk-js@6.0.0-snapshot.v20260204043403 --save-exact

@clerk/dev-cli

npm i @clerk/dev-cli@1.0.0-snapshot.v20260204043403 --save-exact

@clerk/expo

npm i @clerk/expo@3.0.0-snapshot.v20260204043403 --save-exact

@clerk/expo-passkeys

npm i @clerk/expo-passkeys@1.0.0-snapshot.v20260204043403 --save-exact

@clerk/express

npm i @clerk/express@2.0.0-snapshot.v20260204043403 --save-exact

@clerk/fastify

npm i @clerk/fastify@2.7.0-snapshot.v20260204043403 --save-exact

@clerk/localizations

npm i @clerk/localizations@4.0.0-snapshot.v20260204043403 --save-exact

@clerk/msw

npm i @clerk/msw@0.0.1-snapshot.v20260204043403 --save-exact

@clerk/nextjs

npm i @clerk/nextjs@7.0.0-snapshot.v20260204043403 --save-exact

@clerk/nuxt

npm i @clerk/nuxt@2.0.0-snapshot.v20260204043403 --save-exact

@clerk/react

npm i @clerk/react@6.0.0-snapshot.v20260204043403 --save-exact

@clerk/react-router

npm i @clerk/react-router@3.0.0-snapshot.v20260204043403 --save-exact

@clerk/shared

npm i @clerk/shared@4.0.0-snapshot.v20260204043403 --save-exact

@clerk/tanstack-react-start

npm i @clerk/tanstack-react-start@1.0.0-snapshot.v20260204043403 --save-exact

@clerk/testing

npm i @clerk/testing@2.0.0-snapshot.v20260204043403 --save-exact

@clerk/ui

npm i @clerk/ui@1.0.0-snapshot.v20260204043403 --save-exact

@clerk/upgrade

npm i @clerk/upgrade@2.0.0-snapshot.v20260204043403 --save-exact

@clerk/vue

npm i @clerk/vue@2.0.0-snapshot.v20260204043403 --save-exact

The Vue plugin was passing `ui: { ClerkUI: ... }` to clerk.load(), but
clerk-js expects `clerkUICtor` to initialize the UI. This caused Vue and
Nuxt integration tests to fail as components never rendered.

Also fixes Prettier formatting in @clerk/ui.
Enable users to import `ui` from `@clerk/ui` in Next.js App Router server
components without requiring a separate client wrapper.

- Add `server.ts` export without ClerkUI constructor (server-safe)
- Add `react-server` condition to package.json exports
- Add `__brand` runtime marker to identify valid UI objects
- Update IsomorphicClerk to dynamically import ClerkUI when marker is detected
- Make `ClerkUI` optional in `Ui` type to support marker exports
…ition

- Add @clerk/ui dependency to Next.js App Router preset
- Update layout.tsx to use ui prop from @clerk/ui
- Add test verifying bundled UI build succeeds in server components
@jacekradko jacekradko changed the title feat(react,vue,astro): Replace clerkUiCtor prop with ui prop feat(ui): Add unified ui prop with RSC support via conditional exports Feb 5, 2026
@jacekradko
Copy link
Member Author

!snapshot

@clerk-cookie
Copy link
Collaborator

Hey @jacekradko - the snapshot version command generated the following package versions:

Package Version
@clerk/agent-toolkit 0.3.0-snapshot.v20260205174408
@clerk/astro 3.0.0-snapshot.v20260205174408
@clerk/backend 3.0.0-snapshot.v20260205174408
@clerk/chrome-extension 3.0.0-snapshot.v20260205174408
@clerk/clerk-js 6.0.0-snapshot.v20260205174408
@clerk/dev-cli 1.0.0-snapshot.v20260205174408
@clerk/expo 3.0.0-snapshot.v20260205174408
@clerk/expo-passkeys 1.0.0-snapshot.v20260205174408
@clerk/express 2.0.0-snapshot.v20260205174408
@clerk/fastify 2.7.0-snapshot.v20260205174408
@clerk/localizations 4.0.0-snapshot.v20260205174408
@clerk/msw 0.0.1-snapshot.v20260205174408
@clerk/nextjs 7.0.0-snapshot.v20260205174408
@clerk/nuxt 2.0.0-snapshot.v20260205174408
@clerk/react 6.0.0-snapshot.v20260205174408
@clerk/react-router 3.0.0-snapshot.v20260205174408
@clerk/shared 4.0.0-snapshot.v20260205174408
@clerk/tanstack-react-start 1.0.0-snapshot.v20260205174408
@clerk/testing 2.0.0-snapshot.v20260205174408
@clerk/ui 1.0.0-snapshot.v20260205174408
@clerk/upgrade 2.0.0-snapshot.v20260205174408
@clerk/vue 2.0.0-snapshot.v20260205174408

Tip: Use the snippet copy button below to quickly install the required packages.
@clerk/agent-toolkit

npm i @clerk/agent-toolkit@0.3.0-snapshot.v20260205174408 --save-exact

@clerk/astro

npm i @clerk/astro@3.0.0-snapshot.v20260205174408 --save-exact

@clerk/backend

npm i @clerk/backend@3.0.0-snapshot.v20260205174408 --save-exact

@clerk/chrome-extension

npm i @clerk/chrome-extension@3.0.0-snapshot.v20260205174408 --save-exact

@clerk/clerk-js

npm i @clerk/clerk-js@6.0.0-snapshot.v20260205174408 --save-exact

@clerk/dev-cli

npm i @clerk/dev-cli@1.0.0-snapshot.v20260205174408 --save-exact

@clerk/expo

npm i @clerk/expo@3.0.0-snapshot.v20260205174408 --save-exact

@clerk/expo-passkeys

npm i @clerk/expo-passkeys@1.0.0-snapshot.v20260205174408 --save-exact

@clerk/express

npm i @clerk/express@2.0.0-snapshot.v20260205174408 --save-exact

@clerk/fastify

npm i @clerk/fastify@2.7.0-snapshot.v20260205174408 --save-exact

@clerk/localizations

npm i @clerk/localizations@4.0.0-snapshot.v20260205174408 --save-exact

@clerk/msw

npm i @clerk/msw@0.0.1-snapshot.v20260205174408 --save-exact

@clerk/nextjs

npm i @clerk/nextjs@7.0.0-snapshot.v20260205174408 --save-exact

@clerk/nuxt

npm i @clerk/nuxt@2.0.0-snapshot.v20260205174408 --save-exact

@clerk/react

npm i @clerk/react@6.0.0-snapshot.v20260205174408 --save-exact

@clerk/react-router

npm i @clerk/react-router@3.0.0-snapshot.v20260205174408 --save-exact

@clerk/shared

npm i @clerk/shared@4.0.0-snapshot.v20260205174408 --save-exact

@clerk/tanstack-react-start

npm i @clerk/tanstack-react-start@1.0.0-snapshot.v20260205174408 --save-exact

@clerk/testing

npm i @clerk/testing@2.0.0-snapshot.v20260205174408 --save-exact

@clerk/ui

npm i @clerk/ui@1.0.0-snapshot.v20260205174408 --save-exact

@clerk/upgrade

npm i @clerk/upgrade@2.0.0-snapshot.v20260205174408 --save-exact

@clerk/vue

npm i @clerk/vue@2.0.0-snapshot.v20260205174408 --save-exact

When the ui prop is passed to ClerkProvider, the bundled UI will be
used instead of the CDN bundle. Skip rendering the preload link in
this case to avoid unnecessary network requests.
@jacekradko
Copy link
Member Author

!snapshot

@clerk-cookie
Copy link
Collaborator

Hey @jacekradko - the snapshot version command generated the following package versions:

Package Version
@clerk/agent-toolkit 0.3.0-snapshot.v20260205220511
@clerk/astro 3.0.0-snapshot.v20260205220511
@clerk/backend 3.0.0-snapshot.v20260205220511
@clerk/chrome-extension 3.0.0-snapshot.v20260205220511
@clerk/clerk-js 6.0.0-snapshot.v20260205220511
@clerk/dev-cli 1.0.0-snapshot.v20260205220511
@clerk/expo 3.0.0-snapshot.v20260205220511
@clerk/expo-passkeys 1.0.0-snapshot.v20260205220511
@clerk/express 2.0.0-snapshot.v20260205220511
@clerk/fastify 2.7.0-snapshot.v20260205220511
@clerk/localizations 4.0.0-snapshot.v20260205220511
@clerk/msw 0.0.1-snapshot.v20260205220511
@clerk/nextjs 7.0.0-snapshot.v20260205220511
@clerk/nuxt 2.0.0-snapshot.v20260205220511
@clerk/react 6.0.0-snapshot.v20260205220511
@clerk/react-router 3.0.0-snapshot.v20260205220511
@clerk/shared 4.0.0-snapshot.v20260205220511
@clerk/tanstack-react-start 1.0.0-snapshot.v20260205220511
@clerk/testing 2.0.0-snapshot.v20260205220511
@clerk/ui 1.0.0-snapshot.v20260205220511
@clerk/upgrade 2.0.0-snapshot.v20260205220511
@clerk/vue 2.0.0-snapshot.v20260205220511

Tip: Use the snippet copy button below to quickly install the required packages.
@clerk/agent-toolkit

npm i @clerk/agent-toolkit@0.3.0-snapshot.v20260205220511 --save-exact

@clerk/astro

npm i @clerk/astro@3.0.0-snapshot.v20260205220511 --save-exact

@clerk/backend

npm i @clerk/backend@3.0.0-snapshot.v20260205220511 --save-exact

@clerk/chrome-extension

npm i @clerk/chrome-extension@3.0.0-snapshot.v20260205220511 --save-exact

@clerk/clerk-js

npm i @clerk/clerk-js@6.0.0-snapshot.v20260205220511 --save-exact

@clerk/dev-cli

npm i @clerk/dev-cli@1.0.0-snapshot.v20260205220511 --save-exact

@clerk/expo

npm i @clerk/expo@3.0.0-snapshot.v20260205220511 --save-exact

@clerk/expo-passkeys

npm i @clerk/expo-passkeys@1.0.0-snapshot.v20260205220511 --save-exact

@clerk/express

npm i @clerk/express@2.0.0-snapshot.v20260205220511 --save-exact

@clerk/fastify

npm i @clerk/fastify@2.7.0-snapshot.v20260205220511 --save-exact

@clerk/localizations

npm i @clerk/localizations@4.0.0-snapshot.v20260205220511 --save-exact

@clerk/msw

npm i @clerk/msw@0.0.1-snapshot.v20260205220511 --save-exact

@clerk/nextjs

npm i @clerk/nextjs@7.0.0-snapshot.v20260205220511 --save-exact

@clerk/nuxt

npm i @clerk/nuxt@2.0.0-snapshot.v20260205220511 --save-exact

@clerk/react

npm i @clerk/react@6.0.0-snapshot.v20260205220511 --save-exact

@clerk/react-router

npm i @clerk/react-router@3.0.0-snapshot.v20260205220511 --save-exact

@clerk/shared

npm i @clerk/shared@4.0.0-snapshot.v20260205220511 --save-exact

@clerk/tanstack-react-start

npm i @clerk/tanstack-react-start@1.0.0-snapshot.v20260205220511 --save-exact

@clerk/testing

npm i @clerk/testing@2.0.0-snapshot.v20260205220511 --save-exact

@clerk/ui

npm i @clerk/ui@1.0.0-snapshot.v20260205220511 --save-exact

@clerk/upgrade

npm i @clerk/upgrade@2.0.0-snapshot.v20260205220511 --save-exact

@clerk/vue

npm i @clerk/vue@2.0.0-snapshot.v20260205220511 --save-exact

- Replace clerkUICtor with the new ui prop from @clerk/ui
- Remove unnecessary generic type parameter
- Add migration note to changeset
Remove @clerk/ui dependency from the shared appRouter preset and
the shared layout template to prevent Next.js 15 integration tests
from hanging. The bundled UI build test now adds its own dependency
and layout file inline.
Copy link
Member

@nikosdouvlis nikosdouvlis left a comment

Choose a reason for hiding this comment

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

Really like the direction! approving to unblock, left a comment below

'@clerk/ui': minor
'@clerk/react': minor
'@clerk/vue': minor
'@clerk/astro': minor
Copy link
Member

Choose a reason for hiding this comment

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

Does the Astro integration support the ui prop already or is this planned? I think getClerkUIEntryChunk for Astro doesn't check for ui.ClerkUI like React and Vue do

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants