Create Passkey Account

{#if step === 'info'} Create an ultra-secure account using a passkey instead of a password. {:else if step === 'passkey'} Register your passkey to secure your account. {:else if step === 'app-password'} Save your app password for third-party apps. {:else if step === 'verify'} Verify your {channelLabel(verificationChannel)} to complete registration. {:else} Your account has been created successfully! {/if}

{#if error}
{error}
{/if} {#if loadingServerInfo}

Loading...

{:else if step === 'info'}
{#if handle.includes('.')}

Custom domain handles can be set up after account creation.

{:else if fullHandle()}

Your full handle will be: @{fullHandle()}

{/if}
Contact Method

Choose how you'd like to verify your account and receive notifications.

{#if verificationChannel === 'email'}
{:else if verificationChannel === 'discord'}

Your numeric Discord user ID (enable Developer Mode to find it)

{:else if verificationChannel === 'telegram'}
{:else if verificationChannel === 'signal'}

Include country code (e.g., +1 for US)

{/if}
Identity Type

Choose how your decentralized identity will be managed.

{#if didType === 'web'}
Important: Understand the trade-offs
  • Permanent tie to this PDS: Your identity will be did:web:yourhandle.{serverInfo?.availableUserDomains?.[0] || 'this-pds.com'}. Even if you migrate to another PDS later, this server must continue hosting your DID document.
  • No recovery mechanism: Unlike did:plc, did:web has no rotation keys. If this PDS goes offline permanently, your identity cannot be recovered.
  • We commit to you: If you migrate away, we will continue serving a minimal DID document pointing to your new PDS. Your identity will remain functional.
  • Recommendation: Choose did:plc unless you have a specific reason to prefer did:web.
{/if} {#if didType === 'web-external'}

Your domain must serve a valid DID document at /.well-known/did.json pointing to this PDS

{/if}
{#if serverInfo?.inviteCodeRequired}
{/if}
Why passkey-only?

Passkey accounts are more secure than password-based accounts because they:

  • Cannot be phished or stolen in data breaches
  • Use hardware-backed cryptographic keys
  • Require your biometric or device PIN to use
{:else if step === 'passkey'}

A friendly name to identify this passkey

Click the button below to create your passkey. You'll be prompted to use:

  • Touch ID or Face ID
  • Your device PIN or password
  • A security key (if you have one)
{:else if step === 'app-password'}
Important: Save this app password!

This app password is required to sign into apps that don't support passkeys yet (like bsky.app). You will only see this password once.

App Password for: {appPasswordResult?.appPasswordName}
{appPasswordResult?.appPassword}
{:else if step === 'verify'}

We've sent a verification code to your {channelLabel(verificationChannel)}. Enter it below to complete your account setup.

{#if resendMessage}
{resendMessage}
{/if}
{ e.preventDefault(); handleVerification(); }}>
{:else if step === 'success'}

Account Created!

Your passkey-only account has been created successfully.

@{setupData?.handle}

{/if}