šŸ“ Sign Up | šŸ” Log In

← Root | ↑ Up

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ šŸ“„ shadcn/directory/clerk/clerk-docs/reference/components/authentication/waitlist │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

╔══════════════════════════════════════════════════════════════════════════════════════════════╗
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘

title: '<Waitlist /> component' description: The <Waitlist /> component renders a waitlist form that allows users to join for early access to your application. sdk: astro, chrome-extension, expo, nextjs, nuxt, react, react-router, remix, tanstack-react-start, vue, js-frontend

The <Waitlist /> component renders a form that allows users to join for early access to your app.{{ style: { maxWidth: '460px' } }}

In Waitlist mode, users can register their interest in your app by joining a waitlist. This mode is ideal for apps in early development stages or those wanting to generate interest before launch. Learn more about additional features available in Waitlist mode.

The <Waitlist /> component renders a form that allows users to join for early access to your app.

<If sdk="nextjs"> > [!NOTE] > If you're using Next.js, the`<Waitlist />` component is available in `@clerk/nextjs@6.2.0` and above. </If>

Enable Waitlist mode

Before using the <Waitlist /> component, you must enable Waitlist mode in the Clerk Dashboard:

  1. In the Clerk Dashboard, navigate to the Restrictions page.
  2. Under the Sign-up modes section, enable Waitlist.

<If sdk={["astro", "chrome-extension", "expo", "nextjs", "nuxt", "react", "react-router", "remix", "tanstack-react-start", "vue"]}

Example

[!WARNING] Before using the <Waitlist /> component, you must provide the waitlistUrl prop either in the <ClerkProvider> or <SignIn /> component to ensure proper functionality.

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

<If sdk="nextjs"> ```tsx {{ filename: 'app/waitlist/[[...waitlist]]/page.tsx' }} import { Waitlist } from '@clerk/nextjs'
export default function WaitlistPage() {
  return <Waitlist />
}
```
</If> <If sdk="react"> ```tsx {{ filename: 'src/App.tsx' }} import { Waitlist } from '@clerk/clerk-react'
function App() {
  return <Waitlist />
}

export default App
```
</If> <If sdk="astro"> ```astro {{ filename: 'pages/waitlist.astro' }} --- import { Waitlist as WaitlistAstro } from '@clerk/astro/components' ---
<WaitlistAstro />
```
</If> <If sdk="expo"> <Include src="_partials/expo/web-only-callout" />
```jsx {{ filename: '/app/waitlist.web.tsx' }}
import { Waitlist } from '@clerk/clerk-expo/web'

export default function WaitlistPage() {
  return <Waitlist />
}
```
</If> <If sdk="chrome-extension"> ```jsx {{ filename: 'src/routes/waitlist.tsx' }} import { Waitlist } from '@clerk/chrome-extension'
export default function WaitlistPage() {
  return <Waitlist />
}
```
</If> <If sdk="react-router"> ```tsx {{ filename: 'app/routes/waitlist.tsx' }} import { Waitlist } from '@clerk/react-router'
export default function WaitlistPage() {
  return <Waitlist />
}
```
</If> <If sdk="remix"> ```tsx {{ filename: 'app/routes/waitlist.tsx' }} import { Waitlist } from '@clerk/remix'
export default function WaitlistPage() {
  return <Waitlist />
}
```
</If> <If sdk="tanstack-react-start"> ```tsx {{ filename: 'app/routes/waitlist.tsx' }} import { Waitlist } from '@clerk/tanstack-react-start' import { createFileRoute } from '@tanstack/react-router'
export const Route = createFileRoute('/waitlist')({
  component: WaitlistPage,
})

function WaitlistPage() {
  return <Waitlist />
}
```
</If> <If sdk="nuxt"> ```vue {{ filename: 'pages/waitlist.vue' }} <script setup> // Components are automatically imported </script>
<template>
  <Waitlist />
</template>
```
</If> <If sdk="vue"> ```vue {{ filename: 'waitlist.vue' }} <script setup lang="ts"> import { Waitlist } from '@clerk/vue' </script>
<template>
  <Waitlist />
</template>
```
</If> </If> <If sdk="js-frontend"> ## Usage with JavaScript

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

The following examples assume that you followed the quickstart to add Clerk to your JavaScript app.

<code>mount<wbr />Waitlist()</code>

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

function mountWaitlist(node: HTMLDivElement, props?: WaitlistProps): void

<code>mount<wbr />Waitlist()</code> params

<Properties> - `node` - [`HTMLDivElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLDivElement)
The `<div>` element used to render in the `<Waitlist />` component

---

- `props?`
- [`WaitlistProps`](#properties)

The properties to pass to the `<Waitlist />` component
</Properties>

mountWaitlist() usage

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="waitlist"></div>
`

const waitlistDiv = document.getElementById('waitlist')

clerk.mountWaitlist(waitlistDiv)

<code>unmount<wbr />Waitlist()</code>

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

function unmountWaitlist(node: HTMLDivElement): void

unmountWaitlist() params

<Properties> - `node` - [`HTMLDivElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLDivElement)
The container `<div>` element with a rendered `<Waitlist />` component instance
</Properties>

unmountWaitlist() usage

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="waitlist"></div>
`

const waitlistDiv = document.getElementById('waitlist')

clerk.mountWaitlist(waitlistDiv)

// ...

clerk.unmountWaitlist(waitlistDiv)

openWaitlist()

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

function openWaitlist(props?: WaitlistProps): void

openWaitlist() params

<Properties> - `props?` - [`WaitlistProps`](#properties)
The properties to pass to the `<Waitlist />` component
</Properties>

openWaitlist() usage

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="waitlist"></div>
`

const waitlistDiv = document.getElementById('waitlist')

clerk.openWaitlist(waitlistDiv)

closeWaitlist()

Closes the waitlist overlay.

function closeWaitlist(): void

closeWaitlist() usage

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="waitlist"></div>
`

const waitlistDiv = document.getElementById('waitlist')

clerk.openWaitlist(waitlistDiv)

// ...

clerk.closeWaitlist(waitlistDiv)
</If>

Properties

All props are optional.

<Properties> - `afterJoinWaitlistUrl` - `string`

The full URL or path to navigate to after joining the waitlist.


Optional object to style your components. Will only affect Clerk components and not Account Portal pages.


  • fallback?
  • ReactNode

An optional element to be rendered while the component is mounting.


  • signInUrl
  • string

The full URL or path to the sign in page. Used for the 'Already have an account? Sign in' link that's rendered. It's recommended to use the environment variable instead. </Properties>

Customization

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

ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•

← Root | ↑ Up