npm / @better-auth/passkey
@better-auth/passkey
What changed in @better-auth/passkey 1, from its official release notes, upgrade guides and advisories. Sources checked 2026-11-03.
5 breaking5 security7 new APIs and options1 behavior and defaults6 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@better-auth/passkey 124 changes
Breaking changes 5
userVerification now applies to authentication as well as registration; with required, registration and sign-in reject responses without user verification.
The expected WebAuthn origin now comes from server configuration: the origin option, or the baseURL origin plus a frontend origin listed exactly in trustedOrigins. Set origin when rpID is set and a wildcard in baseURL.allowedHosts covers it.
Sessions created from API keys are now refused on passkey registration routes.
Registration and authentication challenges can no longer be used interchangeably, preventing a registration from completing with an authentication challenge or vice versa.
Returns error message strings instead of error code objects.
Security 5
Passkey registration now rejects sessions revoked in the database or secondary storage, even when cookie caching is enabled.
@better-auth/drizzle-adapter: Concurrent requests can exceed rate limits on PostgreSQL
@better-auth/scim: account takeover and stale access via SCIM provider-id collision
@better-auth/stripe: cross-organization billing tampering in organization subscription actions
OAuth 2.1 Provider: Unprivileged users can register OAuth clients
New APIs and options 7
Adds an optional passkey registration setting that signs the user in after successful registration, sets the session cookie, and returns the session and user with the registered passkey.
Exports an extensible map of common authenticator names for displaying provider names when rendering passkeys.
Exports a function that resolves a friendly authenticator name from an AAGUID for rendering passkeys.
Can return a server-side default passkey name when the client supplies none.
Adds a pre-auth registration flow for passkeys.
The plugin interface gains an optional version field, and built-in plugins expose their version.
Adds WebAuthn extension support for passkeys.
Behavior and default changes 1
Official package peers accept @better-auth/utils versions ^0.4.2 or ^0.5.0, allowing compatibility across those versions.
Fixes and other changes 6
Fixed invalid OpenAPI output for passkey routes so client generators can consume the schema.
Passkey registration is rejected when the target user cannot be resolved.
Passkey names are trimmed during registration and update.
When passkey autofill authentication cannot start, the package returns a handled auth cancellation.
Passkey registration endpoint declarations now emit use: Middleware[] instead of Middleware[] | undefined, restoring compatibility and preserving plugin and client API inference when exactOptionalPropertyTypes is enabled.
The JSON response now includes user, matching the endpoint's declared OpenAPI schema and the client-side { session, user } return type.