@better-auth/electron
1.7.12 · 20 Oct 2026MIT263.6k / weekRepositoryHomepagenpmAtom feed
54 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
1.7.12
20 Oct 2026Fixed the JWT plugin to verify JWTs and session cookie-cache JWTs with the stored key's algorithm instead of the token header's, and to warn when signing or verifying a JWT without an issuer or audience
Fixed OAuth callbacks completed through the OAuth proxy to run the same checks as the standard OAuth callback, including issuer and ID token nonce validation
Fixed
auth.api.getSession()to keep the original database error aserror.causewhen the session lookup fails
[!IMPORTANT]
Action requiredIf you use ID token sign-in with a provider that has no
clientId, setclientIdto every client ID your apps sign in with.
better-authBug Fixes
Fixed the JWT plugin to verify JWTs and session cookie-cache JWTs with the stored key's algorithm instead of the token header's, and to warn when signing or verifying a JWT without an issuer or audience
Fixed OAuth callbacks completed through the OAuth proxy to run the same checks as the standard OAuth callback, including issuer and ID token nonce validation
Fixed
auth.api.getSession()to keep the original database error aserror.causewhen the session lookup fails
For detailed changes, see
CHANGELOGBug 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
CHANGELOGBug Fixes
Fixed
requireMcpAuthto accept only OAuth access tokens and reject session JWTs from the JWT plugin, even when they share the issuer and audience
For detailed changes, see
CHANGELOGBug Fixes
Fixed OIDC SSO sign-in to reject ID tokens missing
exporiatand providers with an empty client ID, matching social sign-in
For detailed changes, see
CHANGELOG1.7.11
19 Oct 2026Fixed repeated PostgreSQL migration diffs for
int8columns.Fixed database-backed rate limiting returning an excessively large
X-Retry-Aftervalue.Fixed plugin
initreturns withoptions: undefinedfailing type checks underexactOptionalPropertyTypes.
better-authBug Fixes
Fixed repeated PostgreSQL migration diffs for
int8columns.Fixed database-backed rate limiting returning an excessively large
X-Retry-Aftervalue.
For detailed changes, see
CHANGELOGBug 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
CHANGELOGBug Fixes
Fixed OpenAPI schemas for
/oauth2/consentand/oauth2/continueto match their redirect responses.Fixed CIMD metadata refreshes overwriting concurrent administrator changes to discovered clients.
For detailed changes, see
CHANGELOGBug Fixes
Fixed Expo social account linking with ID tokens when a session cookie is present.
For detailed changes, see
CHANGELOG1.7.10
15 Oct 2026Fixed Captcha and OpenAPI plugin subpath imports and type resolution for
better-auth/plugins/multi-sessionandbetter-auth/test.Fixed Google One Tap sign-ins not recording
googleas the last login method.Fixed imports from
better-auth/plugins/one-tapfailing with a not-exported error.
better-authBug Fixes
Fixed Captcha and OpenAPI plugin subpath imports and type resolution for
better-auth/plugins/multi-sessionandbetter-auth/test.Fixed Google One Tap sign-ins not recording
googleas the last login method.Fixed imports from
better-auth/plugins/one-tapfailing with a not-exported error.Fixed Google One Tap ignoring plugin-level
autoSelectandcancelOnTapOutsidesettings.Fixed Google One Tap sign-ins ignoring configured Google profile mapping and user info updates.
Fixed Google One Tap calling a prompt method unsupported by FedCM and retrying skipped prompts.
For detailed changes, see
CHANGELOGFeatures
Added optional self-service signing key rotation for
private_key_jwtclients.
Bug Fixes
Fixed valid DPoP proofs being rejected for parameterized routes and URLs with trailing slashes.
Fixed native clients with HTTP loopback callbacks being rejected when application type inference is enabled.
Fixed device-code clients being unable to refresh access for approved resources omitted from a token poll.
Fixed OAuth consent without a reference overwriting or reusing consent for a different reference.
Fixed dynamic client registration rejecting requests that include both supported and unsupported grants.
Fixed attempts to change cached trusted clients returning HTTP 500 instead of HTTP 400.
Improved errors for unknown OAuth
client_idvalues to sayclient not found.Fixed PKCE verifier errors to return the specified HTTP 400 response and error code.
Fixed unknown OAuth clients receiving
invalid_grantinstead ofinvalid_clientat the token endpoint.Fixed unverifiable JWT access tokens causing server errors at
/oauth2/userinfo,/oauth2/introspect, and/oauth2/revoke.
For detailed changes, see
CHANGELOGBug 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
CHANGELOGBug Fixes
Fixed MongoDB
findManyignoring ID sorting and potentially repeating or skipping paginated results.
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 2026Aligned
@better-auth/utilsandbetter-calldependency versions across official packages
Bug Fixes
Aligned
@better-auth/utilsandbetter-calldependency versions across official packages
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.6
24 Sep 2026Added support for a
bannedUserMessagefunction that receives the banned user, allowing sign-in errors to include details such as the ban reason.Added Vercel BotID as a captcha provider for protected authentication routes.
Passwords over
maxPasswordLengthare now rejected withPASSWORD_TOO_LONGbefore hashing or verification.
better-authFeatures
Added support for a
bannedUserMessagefunction that receives the banned user, allowing sign-in errors to include details such as the ban reason.Added Vercel BotID as a captcha provider for protected authentication routes.
Bug Fixes
Passwords over
maxPasswordLengthare now rejected withPASSWORD_TOO_LONGbefore hashing or verification.Fixed React hydration mismatches when session or plugin auth queries resolve before streamed components hydrate.
Prevented older auth-query responses from overwriting newer results when requests overlap.
Fixed model identity when a custom model name matches another schema key.
Fixed schema validation for Cloudflare D1 when the Kysely dialect cannot introspect the database.
Fixed social account linking through the OAuth Proxy plugin.
For detailed changes, see
CHANGELOGBug Fixes
Fixed model identity when a custom model name matches another schema key.
Fixed schema validation for SQLite-generated primary keys, including
INTEGER PRIMARY KEYcolumns withoutAUTOINCREMENT.Fixed schema validation for Cloudflare D1 when the Kysely dialect cannot introspect the database.
For detailed changes, see
CHANGELOGBug Fixes
Fixed model identity when a custom model name matches another schema key.
Fixed schema validation for capitalized custom Prisma model names.
For detailed changes, see
CHANGELOGBug Fixes
Fixed model identity when a custom model name matches another schema key.
For detailed changes, see
CHANGELOGBug Fixes
Fixed model identity when a custom model name matches another schema key.
For detailed changes, see
CHANGELOGBug Fixes
Fixed model identity when a custom model name matches another schema key.
For detailed changes, see
CHANGELOGBug Fixes
Fixed model identity when a custom model name matches another schema key.
For detailed changes, see
CHANGELOGBug Fixes
Fixed automatic seat updates after an organization resubscribes, even when canceled subscriptions remain in its history.
For detailed changes, see
CHANGELOGauthFeatures
Added read-only
checkandcheck schemacommands to validate your configured adapter schema on demand.
For detailed changes, see
CHANGELOG1.7.5
14 Sep 2026Added
database.schemaNamesupport for direct PostgreSQL connections.Improved server-side logging for Cloudflare Turnstile verification failures.
Fixed PostgreSQL migrations incorrectly identifying tables and views across schemas.
better-authFeatures
Added
database.schemaNamesupport for direct PostgreSQL connections.
Bug Fixes
Improved server-side logging for Cloudflare Turnstile verification failures.
Fixed PostgreSQL migrations incorrectly identifying tables and views across schemas.
Fixed MySQL index validation for existing string columns.
Removed the unused optional
better-sqlite3peer dependency to prevent installation conflicts.
For detailed changes, see
CHANGELOGFeatures
Added
database.schemaNamesupport for direct PostgreSQL connections.
Bug Fixes
Fixed database option type inference outside Cloudflare Workers.
For detailed changes, see
CHANGELOGBug Fixes
Fixed unnecessary pacing of consecutive CIMD OAuth requests when metadata cannot be cached.
For detailed changes, see
CHANGELOGBug Fixes
Fixed lazy database initialization when using Drizzle relations.
For detailed changes, see
CHANGELOGFeatures
Added
database.schemaNamesupport for direct PostgreSQL connections.
For detailed changes, see
CHANGELOG1.7.4
10 Sep 2026Added
experimental.instrumentation.enabledto disable OpenTelemetry span creation per auth instance.Added support for additional session fields in
testUtilsauth helpers.Added Vitest 5 support to the testing utilities.
better-authFeatures
Added
experimental.instrumentation.enabledto disable OpenTelemetry span creation per auth instance.Added support for additional session fields in
testUtilsauth helpers.Added Vitest 5 support to the testing utilities.
For detailed changes, see
CHANGELOGFeatures
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
CHANGELOGBug Fixes
Fixed multibyte session data storage in Expo SecureStore.
Fixed stale Expo secure-storage session data and corrupted cookies during concurrent updates.
For detailed changes, see
CHANGELOGBug Fixes
Improved schema validation for the Drizzle Relations v2 adapter.
For detailed changes, see
CHANGELOGFeatures
Added Vitest 5 support to the testing utilities.
For detailed changes, see
CHANGELOG1.7.3
6 Sep 2026- deprecated
Fixed callback hooks being skipped after proxied OAuth sign-ins and preserved server state when callback cookies are unavailable. The legacy /oauth-proxy-callback endpoint is deprecated and will be removed in the next minor release.
Added Cloudflare as a built-in social provider with client-secret and PKCE support.
Enabled schema validation during initialization by default, including in production, and rejected authentication requests on detected mismatches.
Upgrading from 1.7.0–1.7.2:
We restored the 1.6 account core schema to avoid requiring a disruptive backfill for existing users. We recognize the cost to users who already migrated and are committed to keeping the core schema stable throughout v1.
If you applied the 1.7 issuer schema, follow the upgrade guide for the required cleanup. No backfill is needed.
better-authFeatures
Added Cloudflare as a built-in social provider with client-secret and PKCE support.
Enabled schema validation during initialization by default, including in production, and rejected authentication requests on detected mismatches.
Added
isPasswordCompromisedfor checking passwords against Have I Been Pwned in custom server-side flows.
Bug Fixes
Aligned generated OpenAPI required fields with runtime validation.
Handled malformed custom-scheme callback URLs without excessive processing.
Improved Auth0 domain normalization to avoid slow trailing-slash processing.
Prevented generic OAuth discovery failures from taking down the authentication API.
Tracked email OTP sign-ins in the last login method plugin.
- deprecated
Fixed callback hooks being skipped after proxied OAuth sign-ins and preserved server state when callback cookies are unavailable. The legacy /oauth-proxy-callback endpoint is deprecated and will be removed in the next minor release.
Fixed
getSessionfailures when cookie caching is disabled and cached session cookies remain.Fixed TOTP re-enrollment replacing an active authenticator and its backup codes.
Prevented duplicate session requests and hydration mismatches in Nuxt
useFetch.Improved dynamic organization role permission check performance.
Added type-safe Nuxt
useFetchintegration for the Vue client'suseSessionhook.Restored compatibility with 1.6 account schemas by identifying accounts with
(providerId, accountId)instead of issuer.
For detailed changes, see
CHANGELOGFeatures
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
CHANGELOGauthFeatures
Added Cloudflare as a built-in social provider with client-secret and PKCE support.
Added diagnostics in auth generate for required fields in existing Prisma schemas that Better Auth never writes.
Added Codex as a supported target for configuring the Better Auth documentation MCP server.
Added schema diagnostics to auth migrate and auth generate, blocking migrations when required columns that Better Auth never writes need manual repair.
Bug Fixes
Updated
auth infoto report installed dependency versions instead of declared specifiers.Allowed
auth initto complete when generated setup groups have no dependencies.Skipped unsupported dependency specifiers during
auth upgradewith a clear warning.
For detailed changes, see
CHANGELOGFeatures
Added initialization-time schema validation and actionable mismatch guidance for Drizzle and Prisma adapters.
For detailed changes, see
CHANGELOGBug Fixes
Improved adapter test suite performance by avoiding redundant cleanup queries.
Updated adapter test suites to remove issuer-specific account requirements.
For detailed changes, see
CHANGELOGBug Fixes
Fixed CIMD client metadata discovery failures with
ERR_INVALID_IP_ADDRESSon supported Node.js versions.
For detailed changes, see
CHANGELOGBug Fixes
Prevented Expo apps from sending unauthenticated requests during interrupted cookie storage updates.
For detailed changes, see
CHANGELOGFeatures
Enabled database schema validation by default and rejected authentication requests when the live schema does not match.
For detailed changes, see
CHANGELOGBug Fixes
Allowed native OAuth clients using
localhostloopback redirects to use ephemeral callback ports.
For detailed changes, see
CHANGELOGFeatures
Added initialization-time schema validation and actionable mismatch guidance for Drizzle and Prisma adapters.
For detailed changes, see
CHANGELOGBug Fixes
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 permanent user bans to clear expiration dates from previous temporary bans.
Fixed client types with more plugins being assignable to types declaring fewer plugins.
Added warnings for invalid signed session data in the cookie cache.
better-authBug Fixes
Fixed permanent user bans to clear expiration dates from previous temporary bans.
Fixed client types with more plugins being assignable to types declaring fewer plugins.
Added warnings for invalid signed session data in the cookie cache.
Fixed disabled MyISAM indexes from satisfying migration index checks.
Fixed programmatic migrations on Cloudflare D1 while preserving existing-index validation.
Allowed
~in relative callback URLs validated by trusted-origin checks.Improved validation of relative callback and redirect URLs with paths, queries, and fragments.
Allowed same-origin form submissions with
Referrer-Policy: no-referrerwhile continuing to reject untrusted origins.Improved
getTestInstanceperformance with a faster default password hasher.Standardized built-in placeholder emails to the namespaced
{identifier}@{namespace}.placeholder.invalidformat.
For detailed changes, see
CHANGELOGBug 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
CHANGELOGBug Fixes
Fixed Client ID Metadata Document registration when clients share at least one supported grant with the server.
Improved validation of relative callback and redirect URLs with paths, queries, and fragments.
Fixed relative redirect URLs containing fragments.
For detailed changes, see
CHANGELOGBug Fixes
Fixed one-to-one Drizzle relations when
usePluralis enabled.Added validation for missing Drizzle schema fields in compound
whereclauses.
For detailed changes, see
CHANGELOGBug Fixes
Fixed programmatic migrations on Cloudflare D1 while preserving existing-index validation.
For detailed changes, see
CHANGELOGBug Fixes
Improved validation of relative callback and redirect URLs with paths, queries, and fragments.
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
Enforced S256 PKCE in the Electron sign-in flow and hardened custom-scheme origin checks
Migration: Upgrade the
@better-auth/electronclient and server together and add your app's scheme totrustedOrigins. Thecode_challenge_methodparameter anddisableOriginOverrideoption are removed, and host-bearing custom-scheme entries now match that host exactly. - breaking
Rewrote the generic OAuth plugin as a first-class social provider with OAuth 2.1 defaults
Migration: Replace
signIn.oauth2({ providerId })withsignIn.social({ provider }),oauth2.link()withlinkSocial(), and dropgenericOAuthClient(). Callbacks move to/api/auth/callback/:id,pkcenow defaults totrue, andissuerandrequireIssuerValidationare removed in favor of OIDC discovery. Fixed client plugin composition so One Tap, Electron, and Expo type-check with
createAuthClient
Breaking Changes
- breaking
Enforced S256 PKCE in the Electron sign-in flow and hardened custom-scheme origin checks
Migration: Upgrade the
@better-auth/electronclient and server together and add your app's scheme totrustedOrigins. Thecode_challenge_methodparameter anddisableOriginOverrideoption are removed, and host-bearing custom-scheme entries now match that host exactly. - breaking
Rewrote the generic OAuth plugin as a first-class social provider with OAuth 2.1 defaults
Migration: Replace
signIn.oauth2({ providerId })withsignIn.social({ provider }),oauth2.link()withlinkSocial(), and dropgenericOAuthClient(). Callbacks move to/api/auth/callback/:id,pkcenow defaults totrue, andissuerandrequireIssuerValidationare removed in favor of OIDC discovery.
Bug Fixes
Fixed client plugin composition so One Tap, Electron, and Expo type-check with
createAuthClient
For detailed changes, see
CHANGELOG1.6.31
10 Sep 2026Added an option to disable OpenTelemetry span creation for individual auth instances
Added an option to disable OpenTelemetry span creation for individual auth instances
1.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.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.26
4 Aug 2026Fixed session cleanup on user deletion to also remove sessions from secondary storage
Fixed
findSessionsto skip invalid secondary-storage session entries without discarding other valid sessionsFixed email OTP sign-up to pass the verification type to custom OTP generators
better-authBug Fixes
Fixed session cleanup on user deletion to also remove sessions from secondary storage
Fixed
findSessionsto skip invalid secondary-storage session entries without discarding other valid sessionsFixed email OTP sign-up to pass the verification type to custom OTP generators
Fixed email OTP password reset to allow retrying after entering an invalid password
Fixed email OTP verification to no longer reveal whether an email is registered before the OTP is verified
Fixed
jwtClient()collapsingcreateAuthClienttype inference when combined with other client pluginsFixed JWT key minting inside database transactions to use the transaction-scoped adapter, preventing deadlocks on SQLite and ensuring keys commit with their surrounding transaction on Postgres and MySQL
Fixed
oAuthProxyto preserve Apple user data fromform_postcallbacksFixed
oneTapClient()collapsingcreateAuthClienttype inference when combined with other client pluginsFixed database rate-limit cleanup to complete when no background task handler is configured
Improved
nextCookiesperformance in instrumented Next.js applications by reusing thenext/headersimport promise
For detailed changes, see
CHANGELOGFeatures
Added a utility for creating stable, namespaced placeholder emails on the reserved
placeholder.invaliddomain
For detailed changes, see
CHANGELOGBug Fixes
Fixed
listKeys()andclear()to useSCANinstead ofKEYSso large keyspaces no longer block the Redis server
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…