Skip to Content
Clerk logo

Clerk Docs

Ctrl + K
Go to clerk.com

<SignUp /> component

Sign up component example

The <SignUp /> component renders a UI for signing up users. The functionality of the <SignUp /> component is controlled by the instance settings you specify in your Clerk Dashboard(opens in a new tab), such as sign-in and sign-up options and social connections. You can further customize your <SignUp /> component by passing additional properties at the time of rendering.

Properties

All props are optional.

NameTypeDescription
appearanceAppearance | undefinedOptional object to style your components. Will only affect Clerk Components and not Account Portal pages.
routing'hash' | 'path' | 'virtual'The routing strategy for your pages.
Note: If you are using environment variables for Next.js or Remix to specify your routes, such as NEXT_PUBLIC_CLERK_SIGN_IN_URL, this will be set to path.
pathstringThe path where the component is mounted on when path-based routing is used
For example: /sign-up.
This prop is ignored in hash- and virtual-based routing.
redirectUrlstringFull URL or path to navigate to after successful sign in or sign up.
The same as setting afterSignInUrl and afterSignUpUrl to the same value.
afterSignInUrlstringThe full URL or path to navigate to after a successful sign in.
signInUrlstringFull URL or path to the sign in page. Use this property to provide the target of the 'Sign In' link that's rendered.
afterSignUpUrlstringThe full URL or path to navigate to after a successful sign up.
unsafeMetadataobjectAn object with the key and value for unsafeMetadata that will be saved to the user after sign up.
For example: { "company": "companyID1234" }
initialValuesSignUpInitialValuesThe values used to prefill the sign-up fields with.

Usage with frameworks

The following example includes basic implementation of the <SignIn /> component. You can use this as a starting point for your own implementation.

You can embed the <SignUp /> component using the Next.js optional catch-all route(opens in a new tab). This allows you to redirect the user inside your application. The <SignUp /> component should be mounted on a public page.

/app/sign-up/[[...sign-up]]/page.tsx
import { SignUp } from "@clerk/nextjs"; export default function Page() { return <SignUp />; }
/pages/sign-up/[[...index]].tsx
import { SignUp } from "@clerk/nextjs"; const SignUpPage = () => ( <SignUp path="/sign-up" routing="path" signInUrl="/sign-in" /> ); export default SignUpPage;

Usage with JavaScript

The following methods available on an instance of the Clerk class are used to render and control the <SignUp /> component:

The following examples assume that you have followed the quickstart in order to add Clerk to your JavaScript application.

mountSignUp()

Render the <SignUp /> component to an HTML <div> element.

function mountSignUp(node: HTMLDivElement, props?: SignUpProps): void;

mountSignUp() params

NameTypeDescription
node HTMLDivElement(opens in a new tab)The <div> element used to render in the <SignUp /> component
props?SignUpPropsThe properties to pass to the <SignUp /> component.

mountSignUp() usage

index.ts
import Clerk from '@clerk/clerk-js'; // Initialize Clerk with your Clerk publishable key const clerk = new Clerk('{{pub_key}}'); await clerk.load(); document.getElementById("app").innerHTML = ` <div id="sign-up"></div> `; const signUpDiv = document.getElementById("sign-up"); clerk.mountSignUp(signUpDiv);
index.js
<!-- Add a <div id="sign-up"> element to your HTML --> <div id="sign-up"></div> <!-- Initialize Clerk with your Clerk Publishable key and Frontend API URL --> <script async crossorigin="anonymous" data-clerk-publishable-key="{{pub_key}}" src="https://{{fapi_url}}/npm/@clerk/clerk-js@latest/dist/clerk.browser.js" type="text/javascript" ></script> <script> window.addEventListener("load", async function () { await Clerk.load(); const signUpDiv = document.getElementById('sign-up'); Clerk.mountSignUp(signUpDiv); }); </script>

unmountSignUp()

Unmount and run cleanup on an existing <SignUp /> component instance.

function unmountSignUp(node: HTMLDivElement): void;

unmountSignUp() params

NameTypeDescription
node HTMLDivElement(opens in a new tab)The container <div> element with a rendered <SignUp /> component instance

unmountSignUp() usage

index.ts
import Clerk from '@clerk/clerk-js'; // Initialize Clerk with your Clerk publishable key const clerk = new Clerk('{{pub_key}}'); await clerk.load(); document.getElementById("app").innerHTML = ` <div id="sign-up"></div> `; const signUpDiv = document.getElementById("sign-up"); clerk.mountSignUp(signUpDiv); // ... clerk.unmountSignUp(signUpDiv);
index.js
<!-- Add a <div id="sign-up"> element to your HTML --> <div id="sign-up"></div> <!-- Initialize Clerk with your Clerk Publishable key and Frontend API URL --> <script async crossorigin="anonymous" data-clerk-publishable-key="{{pub_key}}" src="https://{{fapi_url}}/npm/@clerk/clerk-js@latest/dist/clerk.browser.js" type="text/javascript" ></script> <script> window.addEventListener("load", async function () { await Clerk.load(); const signUpDiv = document.getElementById('sign-up'); Clerk.mountSignUp(signUpDiv); // ... Clerk.unmountSignUp(signUpDiv); }); </script>

openSignUp()

Opens the <SignUp /> component as an overlay at the root of your HTML body element.

function openSignUp(props?: SignUpProps): void;

openSignUp() params

NameTypeDescription
props?SignUpPropsThe properties to pass to the <SignUp /> component

openSignUp() usage

index.ts
import Clerk from '@clerk/clerk-js'; // Initialize Clerk with your Clerk publishable key const clerk = new Clerk('{{pub_key}}'); await clerk.load(); clerk.openSignUp();
index.html
<!-- Initialize Clerk with your Clerk Publishable key and Frontend API URL --> <script async crossorigin="anonymous" data-clerk-publishable-key="{{pub_key}}" src="https://{{fapi_url}}/npm/@clerk/clerk-js@latest/dist/clerk.browser.js" type="text/javascript" ></script> <script> window.addEventListener("load", async function () { await Clerk.load(); Clerk.openSignUp(); }); </script>

closeSignUp()

Closes the sign up overlay.

function closeSignUp(): void;

closeSignUp() usage

index.ts
import Clerk from '@clerk/clerk-js'; // Initialize Clerk with your Clerk publishable key const clerk = new Clerk('{{pub_key}}'); await clerk.load(); clerk.openSignUp(); // ... clerk.closeSignUp();
index.html
<!-- Initialize Clerk with your Clerk Publishable key and Frontend API URL --> <script async crossorigin="anonymous" data-clerk-publishable-key="{{pub_key}}" src="https://{{fapi_url}}/npm/@clerk/clerk-js@latest/dist/clerk.browser.js" type="text/javascript" ></script> <script> window.addEventListener("load", async function () { await Clerk.load(); Clerk.openSignUp(); // ... Clerk.closeSignUp(); }); </script>

Customization

To learn about how to customize Clerk components, see the customization documentation.

Last updated on March 26, 2024

What did you think of this content?

Clerk © 2024