BlocksUpdated September 14, 2026

Password recovery

A presentation-only recovery panel with consumer-owned form, status, errors and help content.

Present account recovery without issuing reset credentialsLink to section

PasswordRecoveryPanel gives an application a bounded recovery surface while keeping the sensitive work outside the Block. Supply your own form, error/status copy, help content and footer navigation; your application owns reset-link issuance, email delivery, tokens and password updates.

No recovery behavior is hidden inside the Block

This component never generates a token, sends email, checks an account, changes a password or redirects a user. Those operations remain application-owned.

Canonical identityLink to section

  • Category: Authentication, slug auth.
  • Block: password-recovery, export PasswordRecoveryPanel.
  • Canonical source: apps/marketing/content/blocks/auth/password-recovery/.
  • Complete entry point: index.tsx.

Copy sourceLink to section

Configure the public UI package and tokens, then create src/components/blocks/password-recovery/index.tsx in your application. Use the Source tab's copy button when available.

If clipboard access is unavailable, select the code manually.

Recover your account

Enter the email associated with your workspace account.
Use the address your application recognizes.

Interactive preview only. No network request is performed.

The Preview tab renders the real canonical PasswordRecoveryPanel through a deterministic local fixture. It creates no token, sends no email and performs no network request. The Source tab is the complete canonical file included at build time, not a duplicated implementation.

Install by copying sourceLink to section

Keep the complete file at the application-owned path above. Connect it to your own recovery endpoint or auth provider only after copying, then validate it in your application.

src/components/password-recovery-screen.tsx
"use client";

import { PasswordRecoveryPanel } from "./blocks/password-recovery";

export function PasswordRecoveryScreen() {
  return (
    <PasswordRecoveryPanel
      description="Enter the email associated with your account."
      form={
        <form
          className="space-y-4"
          onSubmit={(event) => event.preventDefault()}
        >
          <label className="grid gap-2 text-sm">
            Email
            <input
              className="rounded-md border bg-background px-3 py-2"
              name="email"
              type="email"
              autoComplete="email"
            />
          </label>
          <button className="rounded-md border px-4 py-2" type="submit">
            Request recovery link
          </button>
        </form>
      }
      help={<span>Use the address your application recognizes.</span>}
      footer={<a href="/sign-in">Back to sign in</a>}
    />
  );
}

Use "use client" only in the consumer component that owns interactive state or handlers. The canonical Block remains presentation-only.

What the application ownsLink to section

form is required. error, status, help, footer, title, description and className are optional. Use error for an actual failed recovery attempt and status for truthful consumer-owned progress or success copy.

Do not reveal whether an account exists unless your security policy explicitly permits it. Token lifetime, replay protection, rate limiting, password policy, email delivery, recovery URLs and account updates belong to your auth/backend implementation.

Responsive and accessibility notesLink to section

The Block keeps a narrow readable layout and semantic theme classes. Keep every input labelled and preserve visible focus. Error content uses role="alert"; status content uses role="status". Avoid conflicting simultaneous messages unless your application has a clear reason and test the real flow with keyboard and assistive technology.

Ownership and updatesLink to section

Your application owns the copied source and does not receive automatic updates. Review future canonical changes deliberately, preserve local customizations and validate it in your application before adoption.

Boundaries and next stepsLink to section

No password-reset token generation, email delivery, account lookup, password mutation, session update, Auth.js configuration, authorization, persistence, analytics or production secret is implemented here.

Explore the Blocks catalog, return to Sign in, or compare Starters for a complete application foundation.