Neon Auth: branchable identity in your database
We've rebuilt Neon Auth using Better Auth as the foundation. Auth was the last part of Neon that didn't yet branch. Now it does. All authentication data lives directly in your Neon database, so when you branch, your entire auth state branches with it.

Users, sessions, organizations, configuration, and JWKS are stored in a dedicated neon_auth schema. Each branch gets its own isolated auth endpoint. No more external identity provider, no webhook syncing, no drift between environments.
What branchable auth enables:
- Preview environments that actually work. Spin up a branch that mirrors production exactly: same users, same roles, same permissions. Test full signup, login, password reset, and OAuth flows before release.
- Safe multi-tenant testing. Clone your environment, invite test organizations, modify access rules, and confirm permissions propagate correctly without risking production data.
- Real auth in CI/CD. Test the complete user lifecycle in automated pipelines with real authentication, not mocked tokens.
How it works:
-
Auth lives in your database. Your user model sits in Postgres, evolving with your migrations and integrating naturally with your schema.
-
Works with RLS automatically. Your Row-Level Security policies can reference the authenticated user directly, without duplicate identity tables.
-
Data API integration. JWTs from Neon Auth are validated by the Data API, so authenticated queries work with your RLS policies out of the box.
-
One SDK for everything. The new
@neondatabase/neon-jspackage brings Neon Auth, Data API, and database access together:import { createAuthClient } from '@neondatabase/neon-js/auth'; import { NeonAuthUIProvider, AuthView } from '@neondatabase/neon-js/auth/react/ui'; const authClient = createAuthClient(import.meta.env.VITE_NEON_AUTH_URL); export default function App() { return ( <NeonAuthUIProvider authClient={authClient}> <AuthView pathname="sign-in" /> </NeonAuthUIProvider> ); }
Neon Auth is available on all plans, including Free. Get started with Next.js, React, or TanStack.
"Owning your auth means keeping your user model inside your architecture. Neon users now get that ownership while letting Better Auth take care of the parts that make authentication hard." — Bereket Engida, creator of Better Auth
Read more: Meet the New Neon Auth: Branchable Identity in Your Database and The Case for Owning Your Auth
More projects on the Free plan
Another week, another increase: The Neon Free plan now includes:
70 projects- 80 projects
More projects means more room to experiment, prototype, and build without worrying about limits.

This change applies automatically to all Free plan users. No action required. For more information about plan limits, see Neon plans.
Learn about why we're increasing project limits on the Free plan
Purely usage-based billing
We've removed the $5 monthly minimum from our paid plans. Neon is now purely usage-based: if you use $3 one month, that's the bill you'll receive.
For more details, see Neon plans.
Fixes & improvements
- MCP Server Updates: The Neon MCP Server now supports the new Neon Auth with an updated
provision_neon_authtool and a newsetup-neon-authprompt, an interactive guide for setting up Neon Auth in Vite+React projects. - AI Rules: Updated the Neon Auth AI rules prompt for the new Neon Auth.
- Postgres extension updates: Updated the pg_mooncake extension to version 0.1.3. If you installed this extension previously and want to upgrade to the latest version, please refer to Update an extension version for instructions.
- Vercel integration: Fixed an issue where deleted Vercel integrations could cause unexpected errors. These cases are now handled gracefully.
- Data anonymization: Fixed an issue where materialized views retained stale data after anonymization. Materialized views are now automatically refreshed after anonymizing tables.
- Schema-only branches: Fixed an issue where roles with custom attributes were incorrectly recreated with elevated privileges in schema-only branches.
- Neon Console: Fixed an issue where the projects list failed to load when a project was unavailable.


