releases.shpreview
Clerk/JavaScript SDK

JavaScript SDK

Mon
Wed
Fri
JunJulAugSepOctNovDecJanFebMarAprMayJun
Less
More
Releases602Avg184/moVersions@clerk/agent-toolkit@0.2.32 to @clerk/vue@2.4.2
@clerk/shared@4.17.1
Patch Changes
  • Migrate the build pipeline to tsdown and TypeScript 6.0. This is an internal tooling change with no intended changes to the public API or runtime behavior. (#8177) by @dstaley

  • Deprecate passing unsafeMetadata to user.update(). (#8587) by @brunol95

    Use user.updateMetadata() when you want to partially update unsafe metadata with deep-merge semantics:

    await user.updateMetadata({
      unsafeMetadata: { onboardingComplete: true },
    });

    user.update({ unsafeMetadata }) continues to work for now and preserves its existing full-replacement behavior:

    await user.update({
      unsafeMetadata: { theme: 'dark' },
    });

    New code should prefer user.updateMetadata({ unsafeMetadata }) for metadata-only updates.

  • Restore resolvable TypeScript declarations. Type declarations are now emitted per-module at stable public paths instead of being bundled into content-hashed internal chunk files. This fixes type resolution failures (or silent any degradation) in packages whose declarations reference @clerk/shared types, such as @clerk/vue, @clerk/react, @clerk/ui, and @clerk/testing, which previously pointed at unresolvable @clerk/shared/_chunks/* specifiers. (#8811) by @jacekradko

@clerk/backend@3.7.0
Minor Changes
  • Add clerkClient.organizations.replaceOrganizationMetadata(organizationId, params) for replacing an organization's metadata fields in full. (#8787) by @brunol95

    Use replaceOrganizationMetadata when the provided metadata should become the complete value for that metadata field:

    await clerkClient.organizations.replaceOrganizationMetadata(organizationId, {
      publicMetadata: { plan: 'pro' },
    });

    Use clerkClient.organizations.updateOrganizationMetadata(organizationId, params) when you want to partially update metadata with deep-merge semantics:

    await clerkClient.organizations.updateOrganizationMetadata(organizationId, {
      publicMetadata: { onboardingComplete: true },
    });

    The publicMetadata and privateMetadata parameters on clerkClient.organizations.updateOrganization() are now deprecated. They continue to work, but new code should use updateOrganizationMetadata() for partial updates or replaceOrganizationMetadata() for full replacement.

  • Add clerkClient.users.replaceUserMetadata(userId, params) for replacing a user's metadata fields in full. (#8587) by @brunol95

    Use replaceUserMetadata when the provided metadata should become the complete value for that metadata field:

    await clerkClient.users.replaceUserMetadata(userId, {
      publicMetadata: { plan: 'pro' },
    });

    Use clerkClient.users.updateUserMetadata(userId, params) when you want to partially update metadata with deep-merge semantics:

    await clerkClient.users.updateUserMetadata(userId, {
      publicMetadata: { onboardingComplete: true },
    });

    The publicMetadata, privateMetadata, and unsafeMetadata parameters on clerkClient.users.updateUser() are now deprecated. They continue to work, but new code should use updateUserMetadata() for partial updates or replaceUserMetadata() for full replacement.

Patch Changes
  • Migrate the build pipeline to tsdown and TypeScript 6.0. This is an internal tooling change with no intended changes to the public API or runtime behavior. (#8177) by @dstaley

  • Updated dependencies [f046c49, b5fa9f6, 3d5b2fe]:

    • @clerk/shared@4.17.1
@clerk/expo@3.4.2
Patch Changes
@clerk/clerk-js@6.16.1
Patch Changes
  • Migrate the build pipeline to tsdown and TypeScript 6.0. This is an internal tooling change with no intended changes to the public API or runtime behavior. (#8177) by @dstaley

  • Deprecate passing unsafeMetadata to user.update(). (#8587) by @brunol95

    Use user.updateMetadata() when you want to partially update unsafe metadata with deep-merge semantics:

    await user.updateMetadata({
      unsafeMetadata: { onboardingComplete: true },
    });

    user.update({ unsafeMetadata }) continues to work for now and preserves its existing full-replacement behavior:

    await user.update({
      unsafeMetadata: { theme: 'dark' },
    });

    New code should prefer user.updateMetadata({ unsafeMetadata }) for metadata-only updates.

  • Updated dependencies [f046c49, b5fa9f6, 3d5b2fe]:

    • @clerk/shared@4.17.1
@clerk/clerk-js@6.16.0
Minor Changes
  • Add support for Clerk Billing plans with per-seat costs. (#8629) by @dstaley
    • New invite-to-checkout flow when inviting members while on a plan that uses per-seat costs.
    • New localization values to support UI additions.
    • Support for the orgId and minSeats parameters to getPlans().
    • Support for the seatsQuantity and priceId parameters to checkout creation.
    • New totals field on payments.
    • New availablePrices field on plans.
    • New nextPayment field on subscription items.
    • New discounts field on checkouts.
    • Additional fields on nextPayment for more granularity.
Patch Changes
  • Updated dependencies [a5c7bc7]:
    • @clerk/shared@4.17.0
Last Checked
2h ago
Latest
@clerk/express@2.1.26
Tracking since Mar 20, 2026