Clerk's JavaScript SDK and library monorepo.
- Non-major releases in
packages/clerk-jsandpackages/uiare pushed out to consuming applications without requiring explicit package updates. This means a newclerk-jsruntime can load into an app pinned to an older@clerk/nextjs(or any other framework SDK) version, so changes must remain backwards-compatible with SDK versions already in the wild, not just the current monorepo state. Removing or renaming anything an older SDK still calls will break production for those users. Extra care must be put into any changes to these packages. - The API exposed from the core Clerk class in
packages/clerk-js/src/core/clerk.tsis a contract that is depended on by internal and external consumers (including older SDK versions still loading the latestclerk-js). Changes to this API must be done in a major version to avoid breakage. - Use
pnpmonly.npmandyarnare blocked bypreinstall. Node>=24.15, pnpm>=10.33. - Every PR needs a changeset.
pnpm changesetfor package changes,pnpm changeset:emptyfor tooling/repo-only. Empty changesets are two---delimiters with no body. - Commits must be conventional:
type(scope):(commitlint enforces).scopeis the package name without@clerk/, orrepo/release/e2e.clerk-jsuses scopejs.
- For questions about theming, appearance customization, or the styled system, see
references/theming-architecture.md. - For dev setup, testing, JSDoc/Typedoc, publishing, changesets, and commit conventions, see
docs/CONTRIBUTING.md.