Sign-in card in a soft frame: GitHub and Google buttons, email and password with a show toggle, remember me and a sign-up footer.
Set your access key from API keys as NEXTUI_TOKEN in .env.local and add the @nextui namespace below to components.json once. Then every item installs by name. Each install counts as a copy on a free account.
$pnpm dlx shadcn@latest add @nextui/sign-in
1{2"registries": {3"@nextui": {4"url": "https://nextui.dev/r/{name}.json",5"headers": { "Authorization": "Bearer ${NEXTUI_TOKEN}" }6}7}8}
1"use client";23import { useState } from "react";4import { SignInCard } from "@/components/blocks/sign-in";56export function Login() {7const [pending, setPending] = useState(false);89return (10<SignInCard11title="Welcome back"12description="Sign in to your Kite workspace"13forgotHref="/reset"14signUpHref="/signup"15pending={pending}16onProviderClick={(id) => location.assign(`/auth/${id}`)}17onSubmit={async ({ email, password, remember }) => {18setPending(true);19await fetch("/api/login", { method: "POST", body: JSON.stringify({ email, password, remember }) });20setPending(false);21}}22/>23);24}
| Prop | Type | Default | Description |
|---|---|---|---|
| logo | ReactNode | cube mark | Mark above the title |
| title | string | "Sign in to continue" | Heading |
| description | string | "Please sign in to start your AI support" | Line under the heading |
| providers | LoginProvider[] | GitHub, Google | Social buttons: id, label, icon; empty hides them and the divider |
| onProviderClick | (id: string) => void | – | A social button was clicked |
| dividerLabel | string | "or" | Text in the divider |
| emailPlaceholder | string | "Your mail" | Email field placeholder |
| passwordPlaceholder | string | "Password" | Password field placeholder |
| rememberLabel | string | "Remember me" | Checkbox label |
| forgotLabel | string | "Forgot password?" | Reset link text |
| forgotHref | string | "#" | Reset link |
| submitLabel | string | "Sign In" | Submit button text |
| pending | boolean | false | Disables the submit button |
| onSubmit | (values: LoginValues, event: FormEvent) => void | – | Called with email, password and remember |
| signUpPrompt | string | "Don't have an account?" | Text before the sign-up link |
| signUpLabel | string | "Sign Up" | Sign-up link text |
| signUpHref | string | "#" | Sign-up link |
| className | string | – | Extra classes on the section |
Sign in to see the code
Preview it freely. A free account copies code and prompts a few times a day.