How Better Auth’s scores are calculated
The full audit trail, recomputed from the verdict data at build time through the same code that produced the leaderboard: verdict × quality × story weight per cell, cells sum to dimension scores, dimensions blend into the PA Score. Every number on the product page is reproducible from this page alone; for why the formula looks like this, see the methodology.
verdict factors: full ×1.0 · partial ×0.6 · disputed ×0.3 · none ×0.0 · n/a excluded from both sides · cell points = weight × quality × factor · cell max = weight × 10
PA Score31/100
Agent-ready 56.9 × 0.30 = 17.07
API quality 0.0 × 0.20 = 0.00
Openness 62.8 × 0.20 = 12.56
Built-in AI 9.6 × 0.15 = 1.44
Automation 0.0 × 0.15 = 0.00
(17.07 + 0.00 + 12.56 + 1.44 + 0.00) ÷ (0.30 + 0.20 + 0.20 + 0.15 + 0.15) = 31.07 ÷ 1.00 = 31.1
Scores are stored to 1 decimal; the product page’s pills round to whole numbers for display. Each dimension below shows the stories, verdicts, and cited evidence behind its number.
Agent-ready56.9/100×0.30 of the PA blend
Outside-in: can YOUR agent reach and drive this product — API, MCP, CLI, headless runs, agent docs.
Point an agent at llms.txt or agent-oriented docsweight 2
2 (weight) × 9 (quality) × 1.0 (full) = 18.0 of 20 max
- [probe] https://www.better-auth.com/llms.txt“PROBE llms.txt: HTTP 200 at https://www.better-auth.com/llms.txt # Better Auth > The most comprehensive authentication framework for TypeScript Use the documentation version that matc”
- [claimed-docs] https://better-auth.com/docs/ai-resources/mcp.md“Better Auth hosts a remote MCP server that exposes documentation search, examples, and setup help to any MCP-capable client (Cursor, Codex, Claude Code, Open Code, and others).”
- [claimed-docs] https://better-auth.com/docs/ai-resources/mcp.md“Better Auth hosts a **remote MCP server** that exposes documentation search, examples, and setup help to any MCP-capable client (Cursor, Codex, Claude Code, Open Code, and others).”
- [probe] https://www.better-auth.com/docs/introduction.md“PROBE docs-md: HTTP 200 at https://www.better-auth.com/docs/introduction.md # Introduction (/docs/introduction) Introduction to Better Auth. Better Auth is a framework-agnostic, universal auth”
Run the product headlessly / in CI for automationweight 2
2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max
- [claimed-docs] https://www.better-auth.com“No dashboard clicks. Your auth lives in code version controlled, type-safe, and reviewable in PRs.”
- [claimed-docs] https://better-auth.com/docs/plugins/device-authorization.md“You can test the device authorization flow right now using the Better Auth CLI”
- [claimed-docs] https://better-auth.com/docs/plugins/device-authorization.md“The Device Authorization plugin implements the code issuance and approval flow from the OAuth 2.0 Device Authorization Grant (RFC 8628) for limited-input devices such as smart TVs, CLI applications, IoT devices”
- [community] https://hn.algolia.com/api/v1/items/48038827“Does Better Auth still have the weird design to be everything 'request header based'? Running admin scripts and tests was very hacky due to this, since if you skipped that, plugins wouldn't run.”
- [probe] https://www.better-auth.com/docs/concepts/cli“official CLI documented at https://www.better-auth.com/docs/concepts/cli”
Plug MCP servers into this product so it can use their toolsweight 3
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Connect an agent via an official MCP serverweight 3
3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max
- [claimed-docs] https://better-auth.com/docs/ai-resources/mcp.md“Better Auth hosts a remote MCP server that exposes documentation search, examples, and setup help to any MCP-capable client (Cursor, Codex, Claude Code, Open Code, and others).”
- [claimed-docs] https://better-auth.com/docs/ai-resources/mcp.md“Better Auth hosts a **remote MCP server** that exposes documentation search, examples, and setup help to any MCP-capable client (Cursor, Codex, Claude Code, Open Code, and others).”
- [claimed-docs] https://better-auth.com/docs/plugins/mcp.md“The **MCP** plugin lets your app act as an OAuth authorization server and protected resource for [Model Context Protocol](https://modelcontextprotocol.io) clients.”
- [probe] https://www.better-auth.com/docs/plugins/mcp“official MCP server documented at https://www.better-auth.com/docs/plugins/mcp”
Use an official CLIweight 2
2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max
- [probe] https://www.better-auth.com/docs/concepts/cli“official CLI documented at https://www.better-auth.com/docs/concepts/cli”
- [claimed-docs] https://better-auth.com/docs/plugins/device-authorization.md“You can test the device authorization flow right now using the Better Auth CLI”
- [claimed-docs] https://better-auth.com/docs/plugins/device-authorization.md“The Device Authorization plugin implements the code issuance and approval flow from the OAuth 2.0 Device Authorization Grant (RFC 8628) for limited-input devices such as smart TVs, CLI applications, IoT devices”
Drive the product through a documented public APIweight 3
3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max
- [claimed-docs] https://better-auth.com/docs/basic-usage.md“To authenticate a user on the server, you can use the auth.api methods.”
- [claimed-docs] https://better-auth.com/docs/basic-usage.md“const { data, error } = await authClient.signUp.email({ email, password, name, image, callbackURL: "/dashboard" }”
- [claimed-docs] https://www.better-auth.com“`npx auth init`”
- [probe] https://www.better-auth.com/llms.txt“PROBE llms.txt: HTTP 200 at https://www.better-auth.com/llms.txt # Better Auth > The most comprehensive authentication framework for TypeScript Use the documentation version that matc”
- [probe] https://www.better-auth.com/docs/introduction.md“PROBE docs-md: HTTP 200 at https://www.better-auth.com/docs/introduction.md # Introduction (/docs/introduction) Introduction to Better Auth. Better Auth is a framework-agnostic, universal auth”
- [probe] https://www.better-auth.com/docs/concepts/cli“official CLI documented at https://www.better-auth.com/docs/concepts/cli”
- [probe] https://www.better-auth.com/openapi.json“PROBE openapi: all candidate paths 404 (https://www.better-auth.com/openapi.json, https://www.better-auth.com/swagger.json, https://www.better-auth.com/api/openapi.json, https://www.better-auth.com/.well-known/openapi.json)”
Issue scoped/least-privilege API credentials for an agentweight 2
2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max
- [claimed-docs] https://better-auth.com/docs/plugins/api-key.md“The API Key plugin allows you to create and manage API keys for your application. It provides a way to authenticate and authorize API requests by verifying API keys.”
- [claimed-docs] https://better-auth.com/docs/plugins/api-key.md“The API Key plugin allows you to create and manage API keys for your application.”
- [claimed-docs] https://better-auth.com/docs/plugins/api-key.md“Create, manage, and verify API keys ... Built-in rate limiting ... Custom expiration times, remaining count, and refill systems”
- [claimed-docs] https://better-auth.com/docs/plugins/api-key.md“Create, manage, and verify API keys”
- [claimed-docs] https://www.better-auth.com“Auth for AI agents. MCP auth, token exchange, and agent delegation.”
- [claimed-docs] https://better-auth.com/docs/plugins/mcp.md“The **MCP** plugin lets your app act as an OAuth authorization server and protected resource for [Model Context Protocol](https://modelcontextprotocol.io) clients.”
- [claimed-docs] https://better-auth.com/docs/plugins/mcp.md“The MCP plugin lets your app act as an OAuth authorization server and protected resource for Model Context Protocol clients.”
- [probe] https://www.better-auth.com/docs/plugins/mcp“official MCP server documented at https://www.better-auth.com/docs/plugins/mcp”
Build against official SDKsweight 2
2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max
- [claimed-docs] https://www.better-auth.com“Next.js, Nuxt, SvelteKit, Astro, Hono, and 20+ more.”
- [claimed-docs] https://better-auth.com/docs/installation.md“import { betterAuth } from "better-auth"; export const auth = betterAuth({ //... });”
- [claimed-docs] https://www.better-auth.com“No dashboard clicks. Your auth lives in code version controlled, type-safe, and reviewable in PRs.”
- [claimed-docs] https://better-auth.com/docs/ai-resources/mcp.md“Better Auth hosts a **remote MCP server** that exposes documentation search, examples, and setup help to any MCP-capable client (Cursor, Codex, Claude Code, Open Code, and others).”
- [probe] https://www.better-auth.com/openapi.json“PROBE openapi: all candidate paths 404 (https://www.better-auth.com/openapi.json, https://www.better-auth.com/swagger.json, https://www.better-auth.com/api/openapi.json, https://www.better-auth.com/.well-known/openapi.json)”
- [community] https://hn.algolia.com/api/v1/items/45389293“I'd love to use Better-Auth in an iOS app but the client library is all JS - there is virtually no documentation on how to write your own client library.”
Subscribe to events via webhooksweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Agent-ready = 102.4 ÷ 180 × 100 = 56.9
API quality0.0/100×0.20 of the PA blend
The programmable surface once an agent is there — machine-readable spec, interactive docs, sandbox, versioning discipline.
Explore an interactive API reference with runnable examplesweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://www.better-auth.com/openapi.json“PROBE openapi: all candidate paths 404 (https://www.better-auth.com/openapi.json, https://www.better-auth.com/swagger.json, https://www.better-auth.com/api/openapi.json, https://www.better-auth.com/.well-known/openapi.json)”
Download a machine-readable API spec (OpenAPI or equivalent)weight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://www.better-auth.com/openapi.json“PROBE openapi: all candidate paths 404 (https://www.better-auth.com/openapi.json, https://www.better-auth.com/swagger.json, https://www.better-auth.com/api/openapi.json, https://www.better-auth.com/.well-known/openapi.json)”
Test against a sandbox environment without touching production dataweight 1
1 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 10 max
- [claimed-docs] https://better-auth.com/docs/installation.md“Better Auth requires a database to store user data. You can easily configure Better Auth to use SQLite, PostgreSQL, or MySQL, and more!”
- [claimed-docs] https://better-auth.com/docs/installation.md“You can easily configure Better Auth to use SQLite, PostgreSQL, or MySQL, and more!”
Rely on versioned APIs with a documented deprecation policyweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://www.better-auth.com/openapi.json“PROBE openapi: all candidate paths 404 (https://www.better-auth.com/openapi.json, https://www.better-auth.com/swagger.json, https://www.better-auth.com/api/openapi.json, https://www.better-auth.com/.well-known/openapi.json)”
API quality = 0.0 ÷ 70 × 100 = 0.0
Openness62.8/100×0.20 of the PA blend
Can you leave, inspect, or self-host — data export, open source, portability.
Do everything through the API that I can do in the UIweight 2
2 (weight) × 7 (quality) × 1.0 (full) = 14.0 of 20 max
- [claimed-docs] https://www.better-auth.com“No dashboard clicks. Your auth lives in code version controlled, type-safe, and reviewable in PRs.”
- [claimed-docs] https://better-auth.com/docs/basic-usage.md“To authenticate a user on the server, you can use the auth.api methods.”
- [claimed-docs] https://better-auth.com/docs/plugins/admin.md“It allows administrators to perform various operations such as creating users, managing user roles, banning/unbanning users, impersonating users, and more.”
- [claimed-docs] https://better-auth.com/docs/plugins/organization.md“The organization plugin allows you to manage your organization's members and teams. Organizations simplifies user access and permissions management.”
- [claimed-docs] https://better-auth.com/docs/plugins/api-key.md“The API Key plugin allows you to create and manage API keys for your application. It provides a way to authenticate and authorize API requests by verifying API keys.”
- [probe] https://www.better-auth.com/openapi.json“PROBE openapi: all candidate paths 404 (https://www.better-auth.com/openapi.json, https://www.better-auth.com/swagger.json, https://www.better-auth.com/api/openapi.json, https://www.better-auth.com/.well-known/openapi.json)”
Export all of my data in open formats and leaveweight 3
3 (weight) × 6 (quality) × 0.6 (partial) = 10.8 of 30 max
- [claimed-docs] https://better-auth.com/docs/installation.md“Better Auth requires a database to store user data. You can easily configure Better Auth to use SQLite, PostgreSQL, or MySQL, and more!”
- [community] https://hn.algolia.com/api/v1/items/48038827“You get all of your auth data in your own db in 1 cli command. You are not tied to any db provider. Hundreds of auth features like OAuth providers (google, apple, github) and it's free - with Better Auth you pay exactly $0.”
- [community] https://hn.algolia.com/api/v1/items/48038827“Setting up Auth with anonymous users upgraded to real accounts, organizations, multi-tenant capabilities, various sign-in options - haven't written special code, all handled by Better Auth's included plugins and defaults. It just works and I own all the data.”
- [community] https://hn.algolia.com/api/v1/items/44030492“One reason I prefer Better Auth is I retain flexibility designing the rest of the system - adding an extra user column is just a Postgres column, versus using a rigid API to append data to a user in Cognito/Auth0/Okta.”
Read the product's source under an open licenseweight 2
2 (weight) × 7 (quality) × 1.0 (full) = 14.0 of 20 max
- [community] https://hn.algolia.com/api/v1/items/48038827“You get all of your auth data in your own db in 1 cli command. You are not tied to any db provider. Hundreds of auth features like OAuth providers (google, apple, github) and it's free - with Better Auth you pay exactly $0.”
- [community] https://hn.algolia.com/api/v1/items/48038827“Setting up Auth with anonymous users upgraded to real accounts, organizations, multi-tenant capabilities, various sign-in options - haven't written special code, all handled by Better Auth's included plugins and defaults. It just works and I own all the data.”
- [community] https://hn.algolia.com/api/v1/items/44030492“We have been using better-auth (open source) for a while, it was immediately a better experience compared to existing TypeScript auth libraries. Plus no Nextjs lock-in - we migrated off Nextjs to Hono and only had to change the router.”
- [community] https://hn.algolia.com/api/v1/items/44030492“One reason I prefer Better Auth is I retain flexibility designing the rest of the system - adding an extra user column is just a Postgres column, versus using a rigid API to append data to a user in Cognito/Auth0/Okta.”
- [claimed-docs] https://www.better-auth.com“No dashboard clicks. Your auth lives in code version controlled, type-safe, and reviewable in PRs.”
Self-host the core productweight 3
3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max
- [claimed-docs] https://better-auth.com/docs/installation.md“npm install better-auth”
- [claimed-docs] https://better-auth.com/docs/installation.md“You can easily configure Better Auth to use SQLite, PostgreSQL, or MySQL, and more!”
- [claimed-docs] https://better-auth.com/docs/installation.md“Better Auth requires a database to store user data. You can easily configure Better Auth to use SQLite, PostgreSQL, or MySQL, and more!”
- [claimed-docs] https://www.better-auth.com“No dashboard clicks. Your auth lives in code version controlled, type-safe, and reviewable in PRs.”
- [community] https://hn.algolia.com/api/v1/items/48038827“You get all of your auth data in your own db in 1 cli command. You are not tied to any db provider. Hundreds of auth features like OAuth providers (google, apple, github) and it's free - with Better Auth you pay exactly $0.”
- [community] https://hn.algolia.com/api/v1/items/48038827“Setting up Auth with anonymous users upgraded to real accounts, organizations, multi-tenant capabilities, various sign-in options - haven't written special code, all handled by Better Auth's included plugins and defaults. It just works and I own all the data.”
- [community] https://hn.algolia.com/api/v1/items/44030492“One reason I prefer Better Auth is I retain flexibility designing the rest of the system - adding an extra user column is just a Postgres column, versus using a rigid API to append data to a user in Cognito/Auth0/Okta.”
Openness = 62.8 ÷ 100 × 100 = 62.8
Built-in AI9.6/100×0.15 of the PA blend
Inside-out: how agentic the product itself is for its users — built-in assistants, autonomous features.
Get AI-generated insights and suggestions from my data inside the productweight 2
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Set up automations that run autonomously in the backgroundweight 2
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Delegate tasks to a built-in AI assistant inside the productweight 3
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Operate the product with natural-language commandsweight 2
2 (weight) × 4 (quality) × 0.6 (partial) = 4.8 of 20 max
- [claimed-docs] https://better-auth.com/docs/ai-resources/mcp.md“Better Auth hosts a remote MCP server that exposes documentation search, examples, and setup help to any MCP-capable client (Cursor, Codex, Claude Code, Open Code, and others).”
- [claimed-docs] https://better-auth.com/docs/ai-resources/mcp.md“Better Auth hosts a remote MCP server that exposes documentation search, examples, and setup help”
- [claimed-docs] https://better-auth.com/docs/ai-resources/mcp.md“Better Auth hosts a remote MCP server that exposes documentation search, examples, and setup help to any MCP-capable client”
- [claimed-docs] https://better-auth.com/docs/ai-resources/mcp.md“Better Auth hosts a **remote MCP server** that exposes documentation search, examples, and setup help to any MCP-capable client (Cursor, Codex, Claude Code, Open Code, and others).”
- [probe] https://www.better-auth.com/docs/plugins/mcp“official MCP server documented at https://www.better-auth.com/docs/plugins/mcp”
Built-in AI = 4.8 ÷ 50 × 100 = 9.6
Automation0.0/100×0.15 of the PA blend
Depth of automation primitives — rules, scheduling, bulk operations, webhooks.
Perform bulk operations across many items at onceweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [claimed-docs] https://better-auth.com/docs/plugins/admin.md“It allows administrators to perform various operations such as creating users, managing user roles, banning/unbanning users, impersonating users, and more.”
- [claimed-docs] https://better-auth.com/docs/plugins/api-key.md“The API Key plugin allows you to create and manage API keys for your application. It provides a way to authenticate and authorize API requests by verifying API keys.”
- [claimed-docs] https://better-auth.com/docs/plugins/api-key.md“The API Key plugin allows you to create and manage API keys for your application.”
- [claimed-docs] https://better-auth.com/docs/plugins/admin.md“such as creating users, managing user roles, banning/unbanning users, impersonating users, and more.”
Define rules that trigger actions automatically on eventsweight 3
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Schedule recurring jobs or workflowsweight 2
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Version, review, and roll back my automationsweight 1
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Automation = 0.0 ÷ 50 × 100 = 0.0