@better-auth/core
1.7.12 · 20 Oct 2026MIT7.8M / weekRepositoryHomepagenpmAtom feed
91 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
1.7.12
20 Oct 2026Fixed
mapProfileToUserfailing to typecheck underexactOptionalPropertyTypeswhen it returnsundefinedforname,email, orimageFixed ID token sign-in to reject tokens when the provider has no client ID, since their audience cannot be checked
Fixed a custom Facebook
getUserInfoto no longer receive client-submitted access tokens issued to another Facebook app, and ID tokens missingexporiatare now rejected
Bug Fixes
Fixed
mapProfileToUserfailing to typecheck underexactOptionalPropertyTypeswhen it returnsundefinedforname,email, orimageFixed ID token sign-in to reject tokens when the provider has no client ID, since their audience cannot be checked
Fixed a custom Facebook
getUserInfoto no longer receive client-submitted access tokens issued to another Facebook app, and ID tokens missingexporiatare now rejectedRestored the Twitch and Paybin ID token handling from before 1.7.11, which made account info fail once the ID token stored at sign-in expired
Added a
causeoption as a third argument toAPIError.from()to keep the underlying error for server-side callers without exposing it in the response
For detailed changes, see
CHANGELOG1.7.11
19 Oct 2026Fixed plugin
initreturns withoptions: undefinedfailing type checks underexactOptionalPropertyTypes.Fixed ID token signature and claim validation for Twitch and Paybin sign-in. Custom Paybin issuers must publish RS256 signing keys at
<issuer>/.well-known/jwks.json.Reduced installation size while preserving OpenTelemetry instrumentation attributes.
Bug Fixes
Fixed plugin
initreturns withoptions: undefinedfailing type checks underexactOptionalPropertyTypes.Fixed ID token signature and claim validation for Twitch and Paybin sign-in. Custom Paybin issuers must publish RS256 signing keys at
<issuer>/.well-known/jwks.json.Reduced installation size while preserving OpenTelemetry instrumentation attributes.
For detailed changes, see
CHANGELOG1.7.10
15 Oct 2026Limited JWKS refetches for unknown key IDs to protect servers from repeated requests.
Fixed unreachable JWKS endpoints being reported as invalid tokens instead of server errors.
Bug Fixes
Limited JWKS refetches for unknown key IDs to protect servers from repeated requests.
Fixed unreachable JWKS endpoints being reported as invalid tokens instead of server errors.
For detailed changes, see
CHANGELOG1.7.9
15 Oct 2026Fixed
onAPIError.onErrorhandlers to finish before responses are sent and log failures without interrupting requestsAdded
isContinuationtopostLogin.shouldRedirectso users can complete authorization after selecting an organizationFixed DPoP validation for token and UserInfo requests behind proxies that rewrite request URLs
better-authBug Fixes
Fixed
onAPIError.onErrorhandlers to finish before responses are sent and log failures without interrupting requests
For detailed changes, see
CHANGELOGBug Fixes
Added
isContinuationtopostLogin.shouldRedirectso users can complete authorization after selecting an organizationFixed DPoP validation for token and UserInfo requests behind proxies that rewrite request URLs
For detailed changes, see
CHANGELOG1.7.8
14 Oct 2026Fixed ID token sign-in failures caused by up to 30 seconds of clock difference with identity providers
Fixed Atlassian user info errors being mislabeled as Figma errors in logs
Fixed authentication requests hanging after interrupted async context initialization
Bug Fixes
Fixed ID token sign-in failures caused by up to 30 seconds of clock difference with identity providers
Fixed Atlassian user info errors being mislabeled as Figma errors in logs
Fixed authentication requests hanging after interrupted async context initialization
Fixed recognition of valid
AsyncLocalStorageinitialized after importing Better Auth but before first use, and corrected misleading errors for invalid runtime-provided values in edge and browser fallbacks.Fixed after hooks being skipped for writes retained after a failed request on adapters without transactions
Fixed Microsoft Entra ID sign-in and account linking with ID tokens when signing keys omit
algFixed sign-in failures, replay checks, and SIWE email handling with
generateId: "uuid"Aligned
@better-auth/utilsandbetter-calldependency versions across official packagesFixed concurrent MongoDB writes failing with transaction conflicts by retrying transient errors
Added support for host-bearing custom-scheme redirect URIs for native OAuth clients
Fixed password resets and changes retaining the new password when database session revocation fails
Fixed secondary-storage session failures leaving sign-ups, passkey registrations, or SSO sign-ins in an inconsistent state
Fixed missing device sessions and failed automatic session switching after cache eviction
For detailed changes, see
CHANGELOG1.7.7
30 Sep 2026- security
Fixed a critical Magic Link account-takeover vulnerability.
Fixed ID-token sign-in ignoring the social provider’s
disableSignUpsetting.Fixed OAuth Proxy accepting sign-in state as a provider profile.
Upgrade all OAuth Proxy participants together; see the OAuth Proxy upgrade guidance.
better-authMagic Link upgrade: Upgrade servers sharing verification storage together, request new Magic Links, and restart pending OAuth/SAML sign-ins. No database migration is required. See the critical advisory for affected configurations and custom storage changes.
Bug Fixes
- security
Fixed a critical Magic Link account-takeover vulnerability.
Fixed ID-token sign-in ignoring the social provider’s
disableSignUpsetting.Fixed OAuth Proxy accepting sign-in state as a provider profile.
Upgrade all OAuth Proxy participants together; see the OAuth Proxy upgrade guidance.Fixed CAPTCHA errors missing the JSON
Content-Typeheader.Fixed the active organization failing to refresh after sign-in when a session hook selects the initial organization.
Fixed rate-limit errors missing the JSON
Content-Typeheader.
For detailed changes, see
CHANGELOGFeatures
Added optional
validateRedirectUrivalidation for trusted deployments with dynamic OAuth redirect URIs.Added
verifyOAuthQueryParamsto verify signed authorization queries before rendering a custom consent page.
For detailed changes, see
CHANGELOGBug Fixes
Fixed concurrent PostgreSQL requests exceeding database-backed rate limits.
For detailed changes, see
CHANGELOGBug Fixes
Fixed
consumeOnedeleting a record after a concurrent write invalidates its original condition.
For detailed changes, see
CHANGELOG1.7.5
14 Sep 2026Added
database.schemaNamesupport for direct PostgreSQL connections.Fixed database option type inference outside Cloudflare Workers.
Features
Added
database.schemaNamesupport for direct PostgreSQL connections.
Bug Fixes
Fixed database option type inference outside Cloudflare Workers.
For detailed changes, see
CHANGELOG1.7.4
10 Sep 2026Added
experimental.instrumentation.enabledto disable OpenTelemetry span creation per auth instance.Fixed Metro bundling when the optional OpenTelemetry API is not installed.
Features
Added
experimental.instrumentation.enabledto disable OpenTelemetry span creation per auth instance.
Bug Fixes
Fixed Metro bundling when the optional OpenTelemetry API is not installed.
For detailed changes, see
CHANGELOG1.7.3
6 Sep 2026Added Cloudflare as a built-in social provider with client-secret and PKCE support.
Added initialization-time schema validation and actionable mismatch guidance for Drizzle and Prisma adapters.
Enabled schema validation during initialization by default, including in production, and rejected authentication requests on detected mismatches.
Features
Added Cloudflare as a built-in social provider with client-secret and PKCE support.
Added initialization-time schema validation and actionable mismatch guidance for Drizzle and Prisma adapters.
Enabled schema validation during initialization by default, including in production, and rejected authentication requests on detected mismatches.
Added custom token endpoint authentication strategies for providers with non-standard request parameters.
Bug Fixes
Restored optional
consumeOneandincrementOnemethods for custom database adapters.Fixed TikTok sign-in and token refresh with the documented
clientKeyandclientSecretoptions.Improved request IP validation performance.
Improved PayPal authorization code and refresh token requests, including PKCE handling.
Improved Reddit token requests with OAuth-compliant Basic authentication and redirect protection.
Restored compatibility with 1.6 account schemas by identifying accounts with
(providerId, accountId)instead of issuer.
For detailed changes, see
CHANGELOG1.7.2
26 Aug 2026Fixed async context loss in Cloudflare Workers bundles with multiple runtime conditions.
Fixed auth request logs to respect the configured logger, log level, and disabled setting.
Improved validation of relative callback and redirect URLs with paths, queries, and fragments.
Bug Fixes
Fixed async context loss in Cloudflare Workers bundles with multiple runtime conditions.
Fixed auth request logs to respect the configured logger, log level, and disabled setting.
Improved validation of relative callback and redirect URLs with paths, queries, and fragments.
Standardized built-in placeholder emails to the namespaced
{identifier}@{namespace}.placeholder.invalidformat.Added synchronous and optional access to the current auth endpoint context.
For detailed changes, see
CHANGELOG1.7.1
18 Aug 2026Added native database transaction support to test instances for PostgreSQL and MySQL.
Updated bundled dependencies (
jose, nanostores, noble crypto packages, SimpleWebAuthn) to their latest compatible releases, with no changes required to existing projects.Fixed case-insensitive parsing of string Boolean values for SCIM User
activeand theprimarysub-attribute ofemails,phoneNumbers,addresses,roles, andentitlementsat the HTTP ingress, improving Microsoft Entra interoperability.
better-authBug Fixes
Added native database transaction support to test instances for PostgreSQL and MySQL.
Updated bundled dependencies (
jose, nanostores, noble crypto packages, SimpleWebAuthn) to their latest compatible releases, with no changes required to existing projects.
For detailed changes, see
CHANGELOGBug Fixes
Fixed case-insensitive parsing of string Boolean values for SCIM User
activeand theprimarysub-attribute ofemails,phoneNumbers,addresses,roles, andentitlementsat the HTTP ingress, improving Microsoft Entra interoperability.Added an optional SCIM-owned connection and credential catalog: configure
managedConnectionsto allow trusted server code to create runtime tenant connections and issue, rotate, and revoke bearer credentials through server-onlyauth.apimethods, without a code-defined connection or an application-owned verifier.Fixed an issue where trusted server code could not retain a terminal connection binding before a dynamic SCIM connection's first authenticated request when supplying a provisioning domain during decommissioning.
For detailed changes, see
CHANGELOGBug Fixes
Fixed SSO provider registration to allow reusing a SCIM connection ID, as SCIM connections no longer participate in the authentication provider namespace.
Fixed SAML assertion signature verification to validate signatures on the raw assertion instead of trusting an already-parsed response, and enforced signing policy and size limits on SP metadata.
wantAssertionsSignednow correctly controls whether the SP requires signed assertions, matching real-world IdP signing behavior.
For detailed changes, see
CHANGELOGBug Fixes
Fixed Client ID Metadata Document caching to follow shared-cache freshness rules: the plugin now prefers
s-maxageovermax-ageandExpires, honorss-maxage=0, conditionally revalidates withETagorLast-Modified, and treats invalid or duplicate freshness directives as immediately stale. Concurrent refreshes now converge on a single client-resource link instead of failing on a unique constraint.
For detailed changes, see
CHANGELOGBug Fixes
Fixed native adapter transactions for raw database instances (better-sqlite3,
node:sqlite,bun:sqlite,mysql2,pg) passed directly asdatabase, matching the behavior of the explicit{ db }/{ dialect }config shapes. Plugins requiring native transactions (such as@better-auth/scim) now work correctly when using the quickstartdatabase: new Database(...)form.
For detailed changes, see
CHANGELOGBug Fixes
Fixed scope error responses so MCP clients now receive a
403with an RFC 6750insufficient_scopeWWW-Authenticatechallenge naming every missing scope, allowing clients to request all needed scopes in a single authorization request.
For detailed changes, see
CHANGELOGauthBug Fixes
Fixed the CLI to refuse adding required columns without default values to already-populated tables
For detailed changes, see
CHANGELOG1.7.0
18 Aug 2026- breaking
Moved database joins out of
experimentalinto the stableadvanced.database.joinsoptionMigration: Replace
experimental: { joins: true }withadvanced: { database: { joins: true } }. Drizzle and Prisma users should regenerate their schema (npx auth@latest generate) so it includes the required relations. - breaking
Scoped account identity by trusted issuer, keying accounts on
(issuer, accountId)Migration: Accounts now require
Account.issuer. Read provider identity fromaccountInfo.account.accountId, dropmapping.idfrom SSO configs, and give themicrosoftEntraIdhelper a concrete tenant GUID. Apply the account-identity backfill in the 1.7 upgrade guide before deploying. - breaking
Decoupled SCIM provisioning from the organization plugin
Migration: SCIM configuration, client APIs, database schema, and the Group model are all replaced, and provisioning state cannot migrate in place. Follow the SCIM cutover in the 1.7 upgrade guide, including a full directory reprovision, before resuming traffic.
Breaking Changes
- breaking
Moved database joins out of
experimentalinto the stableadvanced.database.joinsoptionMigration: Replace
experimental: { joins: true }withadvanced: { database: { joins: true } }. Drizzle and Prisma users should regenerate their schema (npx auth@latest generate) so it includes the required relations. - breaking
Scoped account identity by trusted issuer, keying accounts on
(issuer, accountId)Migration: Accounts now require
Account.issuer. Read provider identity fromaccountInfo.account.accountId, dropmapping.idfrom SSO configs, and give themicrosoftEntraIdhelper a concrete tenant GUID. Apply the account-identity backfill in the 1.7 upgrade guide before deploying. - breaking
Decoupled SCIM provisioning from the organization plugin
Migration: SCIM configuration, client APIs, database schema, and the Group model are all replaced, and provisioning state cannot migrate in place. Follow the SCIM cutover in the 1.7 upgrade guide, including a full directory reprovision, before resuming traffic.
- breaking
Identified Microsoft Entra accounts by the stable
oidclaimMigration: Migrate existing Microsoft account rows created from
subbefore upgrading. Tokens without a validoidare rejected. - breaking
Verified provider
id_tokenswith a single shared verifierMigration: Custom
UpstreamProviderimplementations replace the removedverifyIdTokenmethod with anidTokenconfig carrying a JWKS source, issuer, and audience. PayPal clientid_tokensign-in now returnsID_TOKEN_NOT_SUPPORTED; its redirect flow is unchanged.
Features
Added
clientAssertionsupport to the Microsoft Entra ID social providerAdded per-provider
requireEmailVerificationfor social sign-inAdded a
user.validateUserInfogate for rejecting an identity before a user is created or linkedAdded compound table indexes to plugin database schemas
Added
allowIdpInitiatedsupport for IdP-initiated flows through a secure server-side bounceAdded RP-initiated logout so
signOut()can also sign users out of the OpenID providerAdded
refreshTokenParamsfor forwarding extra parameters on generic OAuth token refreshAdded an
includeGrantedScopesoption to the Google providerAdded DPoP sender-constrained access tokens (RFC 9449)
Added
private_key_jwtclient authentication for token endpoint requests (RFC 7523)Sent
Cache-Control: no-storeon every OAuth response that carries credentialsAdded per-request
additionalParamsandloginHintacrosssignIn.social,linkSocial, andsignIn.ssoAdded JWKS-backed asymmetric JWTs for the session cookie cache
Added transactional OIDC user resolution for SSO sign-ins
Bug Fixes
- security
Routed CIMD
client_idSSRF checks through the shared host classifier, which now rejects IPv4-compatible IPv6, the 6to4 relay prefix, and site-local addresses Derived the OAuth
redirect_urifrom the per-request base URL in multi-host deploymentsPreserved previously granted
account.scopevalues across re-authentication and token refreshFixed client plugin composition so One Tap, Electron, and Expo type-check with
createAuthClientSingle-sourced HTTP Basic credential encoding and decoding for OAuth client authentication
For detailed changes, see
CHANGELOG1.6.30
17 Aug 2026Fixed concurrent cold-start requests from intermittently losing authentication or transaction context due to an async storage initialization race
Fixed automatic organization assignment via email domain to require both a verified provider domain and a verified stored user email, preventing social sign-in from joining an organization whose SSO provider merely claims that domain.
Fixed domain verification to snapshot the provider's domains at request start, returning
409withSSO_PROVIDER_CHANGEDif the provider changes during DNS resolution so callers can reload and retry.
better-authBug Fixes
Fixed concurrent cold-start requests from intermittently losing authentication or transaction context due to an async storage initialization race
For detailed changes, see
CHANGELOGBug Fixes
Fixed automatic organization assignment via email domain to require both a verified provider domain and a verified stored user email, preventing social sign-in from joining an organization whose SSO provider merely claims that domain.
Fixed domain verification to snapshot the provider's domains at request start, returning
409withSSO_PROVIDER_CHANGEDif the provider changes during DNS resolution so callers can reload and retry.
For detailed changes, see
CHANGELOG1.6.29
14 Aug 2026Improved
deleteSessionsperformance by running deletes in parallel instead of sequentiallyFixed automatic email-domain organization assignment to require both a verified provider domain and a verified user email, preventing social sign-in from granting access when an SSO provider merely claims a domain.
Fixed domain verification to snapshot the provider's domains at request start, returning
409withSSO_PROVIDER_CHANGEDif the provider changes during DNS verification so callers can reload and retry.
better-authBug Fixes
Improved
deleteSessionsperformance by running deletes in parallel instead of sequentially
For detailed changes, see
CHANGELOGBug Fixes
Fixed automatic email-domain organization assignment to require both a verified provider domain and a verified user email, preventing social sign-in from granting access when an SSO provider merely claims a domain.
Fixed domain verification to snapshot the provider's domains at request start, returning
409withSSO_PROVIDER_CHANGEDif the provider changes during DNS verification so callers can reload and retry.
For detailed changes, see
CHANGELOG1.6.28
13 Aug 2026Prevented duplicate session requests during React Suspense retries while preserving revalidation for interrupted refreshes
Restored client plugin declaration compatibility for downstream TypeScript consumers
Restored client plugin declaration compatibility for downstream TypeScript consumers
better-authBug Fixes
Prevented duplicate session requests during React Suspense retries while preserving revalidation for interrupted refreshes
Restored client plugin declaration compatibility for downstream TypeScript consumers
For detailed changes, see the
CHANGELOG.Bug Fixes
Restored client plugin declaration compatibility for downstream TypeScript consumers
For detailed changes, see the
CHANGELOG.Bug Fixes
Restored client plugin declaration compatibility for downstream TypeScript consumers
For detailed changes, see the
CHANGELOG.1.6.27
11 Aug 2026Fixed duplicate session requests being made across Suspense retries
Fixed auth endpoint types to align with
better-callFixed the CLI to align installed packages with the running CLI version
better-authBug Fixes
Fixed duplicate session requests being made across Suspense retries
For detailed changes, see
CHANGELOGBug Fixes
Fixed auth endpoint types to align with
better-call
For detailed changes, see
CHANGELOGauthBug Fixes
Fixed the CLI to align installed packages with the running CLI version
For detailed changes, see
CHANGELOG1.6.25
23 Jul 2026Reading the note…
1.6.24
22 Jul 2026Reading the note…
1.6.23
29 Jun 2026Reading the note…
1.6.22
26 Jun 2026Reading the note…
1.6.21
26 Jun 2026Reading the note…
1.6.20
20 Jun 2026Reading the note…
1.6.19
16 Jun 2026Reading the note…
1.6.18
12 Jun 2026Reading the note…
1.6.17
12 Jun 2026Reading the note…
1.6.16
10 Jun 2026Reading the note…
1.6.15
8 Jun 2026Reading the note…
1.6.14
2 Jun 2026Reading the note…
1.6.13
31 May 2026Reading the note…
1.6.12
29 May 2026Reading the note…
1.6.11
12 May 2026Reading the note…
1.6.10
9 May 2026Reading the note…
1.6.9
24 Apr 2026Reading the note…
1.6.8
23 Apr 2026Reading the note…
1.6.7
22 Apr 2026Reading the note…
1.6.6
21 Apr 2026Reading the note…
1.6.5
16 Apr 2026Reading the note…
1.6.4
15 Apr 2026Reading the note…
1.6.3
14 Apr 2026Reading the note…
1.6.2
9 Apr 2026Reading the note…
1.6.1
8 Apr 2026Reading the note…
1.6.0
6 Apr 2026Reading the note…
1.5.6
22 Mar 2026Reading the note…
1.5.5
11 Mar 2026Reading the note…
1.5.4
6 Mar 2026Reading the note…