← NeonCONTENT HISTORY

Update to Neon

Snapshot Oct 4, 2026 · 18:02 UTC · version 2.1.0

WHAT CHANGED · RULE-BASED ANALYSIS

Package or technical metadata updated

Package contents changed in 34 files: .app.json, .codex-plugin/plugin.json, LICENSE, …. Open the file diff to inspect the edits.

Observed in package metadata. These changes alone do not establish a new customer-facing feature.

Package file

Before

{"sha256":"7f6c3217c0c1795ec3aa09993b8227c989e2aa116352b60c0e305ad0558657dc","size":104}

After

Not present

Package file

Before

{"sha256":"107930b82cec1cf0418b9b9c54b2b85739f17e95671e088c419872387227c48a","size":1153}

After

Not present

Package file

Before

Not present

After

{"sha256":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","size":11358}

Package file

Before

Not present

After

{"sha256":"6ea32cfd68df51adbf06156bc7282cf6c5eece06b684b163ea612fcec8521d2a","size":427}

Compare saved observations

Download comparison JSON

skills/neon-auth/references/self-managed.md

--- before
+++ after
@@ -0,0 +1,25 @@
+# Self-managed Better Auth
+
+Use this page only after `SKILL.md` routed here: a required feature is outside Managed Auth, and the installed Better Auth version documents that flow. If that check fails, keep the current identity.
+
+## Keep existing Better Auth
+
+If the app already runs Better Auth, keep that server, its clients, users, and sessions. It works with Lakebase Postgres, Functions, Object Storage, and the AI Gateway. Do not migrate it to Managed Auth unless the user asks.
+
+## New self-managed server
+
+Host it on the existing app (Vercel route handlers, or similar) when that host already serves `/api/auth`. Use a Neon Function when the auth server should sit next to Postgres, or when the Function itself must be an OAuth authorization server (MCP). Function hosting follows the `neon-functions` skill (region, claim, `neon.ts`, `neon deploy --env <file>`).
+
+Keep Lakebase Postgres as the auth database. Use `better-auth` and `better-auth/client`. Fetch upstream docs for the **installed** version:
+
+- https://better-auth.com/docs/installation
+- https://better-auth.com/docs/concepts/client
+- https://better-auth.com/docs/concepts/plugins
+
+Do not pass `plugins` into `@neondatabase/auth`. Replacing only the client package while Managed Auth is still the backend does not add plugins.
+
+MCP OAuth (Cursor, Claude, and similar clients self-authorizing) is `neon-functions` [references/mcp.md](https://neon.com/docs/ai/skills/neon-functions/references/mcp.md). That can sit beside existing Clerk or Managed login. Do not migrate the whole app's identity unless that was the request.
+
+Function JWT verification, CORS, and direct browser calls: `neon-functions` and https://neon.com/docs/compute/functions/authentication.md.
+
+There is no documented universal import from Managed `neon_auth` into a self-managed Better Auth schema. Inventory users, credentials, sessions, memberships, and application foreign keys before changing existing state. Agree a cutover plan with the owner. Do not promise drop-in session continuity.
Full technical diff · 44 changed fields

removed /files/.app.json

BEFORE
{
  "sha256": "7f6c3217c0c1795ec3aa09993b8227c989e2aa116352b60c0e305ad0558657dc",
  "size": 104
}
AFTER
Field is absent

removed /files/.codex-plugin~1plugin.json

BEFORE
{
  "sha256": "107930b82cec1cf0418b9b9c54b2b85739f17e95671e088c419872387227c48a",
  "size": 1153
}
AFTER
Field is absent

added /files/LICENSE

BEFORE
Field was absent
AFTER
{
  "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
  "size": 11358
}

added /files/assets~1neon-logomark-dark.svg

BEFORE
Field was absent
AFTER
{
  "sha256": "6ea32cfd68df51adbf06156bc7282cf6c5eece06b684b163ea612fcec8521d2a",
  "size": 427
}

added /files/assets~1neon-logomark-light.svg

BEFORE
Field was absent
AFTER
{
  "sha256": "8154bfde92038629bc1c35e9888a5aafafbf4dc6ebaa55eb328075a9ebbe4e27",
  "size": 427
}

added /files/mcp.json

BEFORE
Field was absent
AFTER
{
  "sha256": "496c89ba28e7628b2f7c477c4ed7a890504f7d5772ab22ce8426f369129b43a4",
  "size": 192
}

added /files/plugin.json

BEFORE
Field was absent
AFTER
{
  "sha256": "3dc352f4107acf80b61e07955619c8937d3677ba8d1089b9763d518f93f901d6",
  "size": 2175
}

changed /files/skills~1neon-ai-gateway~1SKILL.md/sha256

BEFORE
"5f7b7d3f9490fda3d3e78ade52f8df053a0f0ce9fad38d6f17d47c5d92ba4ce4"
AFTER
"eab0545d5ee7626847ce5b5cdd5f4f03afad0ca5859ffd281389721b06c2bce0"

changed /files/skills~1neon-ai-gateway~1SKILL.md/size

BEFORE
20612
AFTER
20643

added /files/skills~1neon-auth~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "5f91f328235382f3e9afef449729e304a531848a90c02b40c4fd1192709e0319",
  "size": 12404
}

added /files/skills~1neon-auth~1references~1managed-auth.md

BEFORE
Field was absent
AFTER
{
  "sha256": "382c00feeb2f3cc12dbe9b881a43339eef25741d4bc4b70d43c63d2311587dd9",
  "size": 9309
}

added /files/skills~1neon-auth~1references~1self-managed.md

BEFORE
Field was absent
AFTER
{
  "sha256": "2c53afcd667a9d3e9df9d7bf3eef2aec94ae4a0ec01c7f65852a965267bc127a",
  "size": 2033
}

changed /files/skills~1neon-functions~1SKILL.md/sha256

BEFORE
"92b3a6a025885d45b7976e9d4338ea98712e091afac5309aa59ba9c9771706fa"
AFTER
"ef17cab6c81fba6e5545037205889dcb1b2dcd9748d5fbbf50465ee0a8a88d8d"

changed /files/skills~1neon-functions~1SKILL.md/size

BEFORE
39778
AFTER
49106

changed /files/skills~1neon-functions~1references~1ai-sdk.md/sha256

BEFORE
"11f963c0dac8ef0aaa6cd49a3e9dbf7b1dc85dba3dba76bd964d5e42de002c7d"
AFTER
"3bca13c980a6634ce3dd53533145c9b93f5b3f87f777b62b66ed5f582dce3370"

changed /files/skills~1neon-functions~1references~1ai-sdk.md/size

BEFORE
6772
AFTER
6744

added /files/skills~1neon-functions~1references~1function-triggers.md

BEFORE
Field was absent
AFTER
{
  "sha256": "a54ed9599ebdcd340141f6a6f3b9770ef1d8406a936515c929444fc6a9c695eb",
  "size": 10837
}

changed /files/skills~1neon-functions~1references~1mastra-studio.md/sha256

BEFORE
"58b7b6067e2dd7c991b3b640fe69a47b6078069f0d1fb97b213ae2a9389bc02a"
AFTER
"01b7d421a36e64a704854b9fafe99ddc3d262d6d1da4af6eb44b12968064a0b0"

changed /files/skills~1neon-functions~1references~1mastra-studio.md/size

BEFORE
6365
AFTER
6347

changed /files/skills~1neon-functions~1references~1mcp.md/sha256

BEFORE
"22ce58566b5479801621a61d65467b28bf566837611095c2b7f4f579bd553010"
AFTER
"45c7a48c22b4cdb2deaecae40a17cd9d55755c36ae288d2ddad0dfcf111f03e9"

changed /files/skills~1neon-functions~1references~1mcp.md/size

BEFORE
9138
AFTER
9123

added /files/skills~1neon-functions~1references~1native-binaries.md

BEFORE
Field was absent
AFTER
{
  "sha256": "04d39d8dc2e822e6e2189752ae01fdff5d85f175059b6209df1c77e105941ae0",
  "size": 9385
}

added /files/skills~1neon-functions~1references~1production-hardening.md

BEFORE
Field was absent
AFTER
{
  "sha256": "1b3f0eb3e13aae1d1bdea3e32b476b6e1135276da6b8b51d4db30df0326b71c8",
  "size": 15301
}

changed /files/skills~1neon-functions~1references~1sse.md/sha256

BEFORE
"3b6fd889d08642ee2dc40788c7e56945b3ed0ab3e912626bd8d89c3e57b4b3c7"
AFTER
"a032699cfa2e361f8f7a9dc6e0b5e66e284f39fa0de455d5506b3e3686fa0b56"

changed /files/skills~1neon-functions~1references~1sse.md/size

BEFORE
8211
AFTER
8310

changed /files/skills~1neon-object-storage~1SKILL.md/sha256

BEFORE
"1d3d9f662b6caafb640d45583a1505ec7433ed4ba6ba5c61e1765aa7c16c03a9"
AFTER
"fce96952845dfcf4b0c560fcf1ff0d2c0867931fd34ddb3acf0ec24fd118fd11"

changed /files/skills~1neon-object-storage~1SKILL.md/size

BEFORE
14116
AFTER
14253

added /files/skills~1neon-postgres-branches~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "9f47d5a49553a465837c1e8b2d90a90aac72a5313a996c081027290f259a8d71",
  "size": 13663
}

added /files/skills~1neon-postgres-egress-optimizer~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "d7536270b6dd59a66fa5daf1578cc55a5b761d7163f6f6b1596662481b8d5d9b",
  "size": 10227
}

changed /files/skills~1neon-postgres~1SKILL.md/sha256

BEFORE
"eb8081a09e25ff2062e8f8de7cba00c38123aeb259771605c988ca0245389886"
AFTER
"83d3c75651bd81f06e5e8c47ffc306936cc4d2a1ac84d288e8f6a15fcfb724b4"

changed /files/skills~1neon-postgres~1SKILL.md/size

BEFORE
9176
AFTER
16595

added /files/skills~1neon-postgres~1references~1full-text-search.md

BEFORE
Field was absent
AFTER
{
  "sha256": "025d4380ccfe8e2c745687d82ed6182d501d5678a3941112f37f58bac38e7db4",
  "size": 3901
}

added /files/skills~1neon-postgres~1references~1hybrid-search.md

BEFORE
Field was absent
AFTER
{
  "sha256": "80b9b1a9974c41eea80bfa4159c5be2b89ca0caaf96b06356ce60d49b2443f90",
  "size": 4451
}

added /files/skills~1neon-postgres~1references~1lakebase-search-drizzle.md

BEFORE
Field was absent
AFTER
{
  "sha256": "9d5193830642719ecd325dd60f2ffc7c1104055e9c7c4f4828963299adb234b7",
  "size": 6716
}

added /files/skills~1neon-postgres~1references~1vector-search.md

BEFORE
Field was absent
AFTER
{
  "sha256": "4d7c14f1940033e2c379be62f00ef5ba5e17878a44bc11957a5176f91c2aa0ac",
  "size": 6244
}

changed /files/skills~1neon~1SKILL.md/sha256

BEFORE
"9540789af742962ecab2626a73434b8f906f99cec02f2e152791535ee89705f1"
AFTER
"1071b8789dea0cb41c795059e728821756181ce55ae34f3f904120bfbfa8ff22"

changed /files/skills~1neon~1SKILL.md/size

BEFORE
31147
AFTER
32812

added /files/skills~1neon~1references~1auth.md

BEFORE
Field was absent
AFTER
{
  "sha256": "c2c609f25d6936c8df52989889ffff738f55b5100259e9193173ed07891f49f0",
  "size": 730
}

changed /files/skills~1neon~1references~1claimable-neon.md/sha256

BEFORE
"5d220f032995a44dbd618b807a0c6a6814d1e69ea32014285c62ddd23cfaeefd"
AFTER
"1f510be025b1841231b8ee40f69f8b38a348336b258be43b943cc94f2d88bcf8"

changed /files/skills~1neon~1references~1claimable-neon.md/size

BEFORE
7788
AFTER
8163

added /files/skills~1neon~1references~1function-triggers.md

BEFORE
Field was absent
AFTER
{
  "sha256": "a72aadc3e63464db7f618abb6daa7f119eb76cf213f27a88c84f7aa92b4dd254",
  "size": 3249
}

added /files/skills~1neon~1references~1logs-loki.md

BEFORE
Field was absent
AFTER
{
  "sha256": "fb338ad4d75e3d6c594945bd24d64a4134860fc2f554cd3273c27dd79769c889",
  "size": 4044
}

added /files/skills~1neon~1references~1parse-env.md

BEFORE
Field was absent
AFTER
{
  "sha256": "f43eb0d40570b06437ea3a93662ab528bad4d5c44c9c28c45f993aaa269e10bd",
  "size": 1406
}

added /files/skills~1neon~1references~1sdk.md

BEFORE
Field was absent
AFTER
{
  "sha256": "b9376b5bb1658d9d926a560a7be632a0aaa4fd12e60f38c3ba5050bd35989da0",
  "size": 806
}
Full snapshot data
{
  "files": {
    "LICENSE": {
      "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
      "size": 11358
    },
    "assets/neon-logomark-dark.svg": {
      "sha256": "6ea32cfd68df51adbf06156bc7282cf6c5eece06b684b163ea612fcec8521d2a",
      "size": 427
    },
    "assets/neon-logomark-light.svg": {
      "sha256": "8154bfde92038629bc1c35e9888a5aafafbf4dc6ebaa55eb328075a9ebbe4e27",
      "size": 427
    },
    "mcp.json": {
      "sha256": "496c89ba28e7628b2f7c477c4ed7a890504f7d5772ab22ce8426f369129b43a4",
      "size": 192
    },
    "plugin.json": {
      "sha256": "3dc352f4107acf80b61e07955619c8937d3677ba8d1089b9763d518f93f901d6",
      "size": 2175
    },
    "skills/neon-ai-gateway/SKILL.md": {
      "sha256": "eab0545d5ee7626847ce5b5cdd5f4f03afad0ca5859ffd281389721b06c2bce0",
      "size": 20643
    },
    "skills/neon-auth/SKILL.md": {
      "sha256": "5f91f328235382f3e9afef449729e304a531848a90c02b40c4fd1192709e0319",
      "size": 12404
    },
    "skills/neon-auth/references/managed-auth.md": {
      "sha256": "382c00feeb2f3cc12dbe9b881a43339eef25741d4bc4b70d43c63d2311587dd9",
      "size": 9309
    },
    "skills/neon-auth/references/self-managed.md": {
      "sha256": "2c53afcd667a9d3e9df9d7bf3eef2aec94ae4a0ec01c7f65852a965267bc127a",
      "size": 2033
    },
    "skills/neon-functions/SKILL.md": {
      "sha256": "ef17cab6c81fba6e5545037205889dcb1b2dcd9748d5fbbf50465ee0a8a88d8d",
      "size": 49106
    },
    "skills/neon-functions/references/ai-sdk.md": {
      "sha256": "3bca13c980a6634ce3dd53533145c9b93f5b3f87f777b62b66ed5f582dce3370",
      "size": 6744
    },
    "skills/neon-functions/references/function-triggers.md": {
      "sha256": "a54ed9599ebdcd340141f6a6f3b9770ef1d8406a936515c929444fc6a9c695eb",
      "size": 10837
    },
    "skills/neon-functions/references/mastra-studio.md": {
      "sha256": "01b7d421a36e64a704854b9fafe99ddc3d262d6d1da4af6eb44b12968064a0b0",
      "size": 6347
    },
    "skills/neon-functions/references/mcp.md": {
      "sha256": "45c7a48c22b4cdb2deaecae40a17cd9d55755c36ae288d2ddad0dfcf111f03e9",
      "size": 9123
    },
    "skills/neon-functions/references/native-binaries.md": {
      "sha256": "04d39d8dc2e822e6e2189752ae01fdff5d85f175059b6209df1c77e105941ae0",
      "size": 9385
    },
    "skills/neon-functions/references/production-hardening.md": {
      "sha256": "1b3f0eb3e13aae1d1bdea3e32b476b6e1135276da6b8b51d4db30df0326b71c8",
      "size": 15301
    },
    "skills/neon-functions/references/sentry.md": {
      "sha256": "be93790a9b62e0a78a575cebbc094ee7d93af57dbb1cdd88fe011595407b9e58",
      "size": 15424
    },
    "skills/neon-functions/references/sse.md": {
      "sha256": "a032699cfa2e361f8f7a9dc6e0b5e66e284f39fa0de455d5506b3e3686fa0b56",
      "size": 8310
    },
    "skills/neon-object-storage/SKILL.md": {
      "sha256": "fce96952845dfcf4b0c560fcf1ff0d2c0867931fd34ddb3acf0ec24fd118fd11",
      "size": 14253
    },
    "skills/neon-postgres-branches/SKILL.md": {
      "sha256": "9f47d5a49553a465837c1e8b2d90a90aac72a5313a996c081027290f259a8d71",
      "size": 13663
    },
    "skills/neon-postgres-egress-optimizer/SKILL.md": {
      "sha256": "d7536270b6dd59a66fa5daf1578cc55a5b761d7163f6f6b1596662481b8d5d9b",
      "size": 10227
    },
    "skills/neon-postgres/SKILL.md": {
      "sha256": "83d3c75651bd81f06e5e8c47ffc306936cc4d2a1ac84d288e8f6a15fcfb724b4",
      "size": 16595
    },
    "skills/neon-postgres/references/full-text-search.md": {
      "sha256": "025d4380ccfe8e2c745687d82ed6182d501d5678a3941112f37f58bac38e7db4",
      "size": 3901
    },
    "skills/neon-postgres/references/hybrid-search.md": {
      "sha256": "80b9b1a9974c41eea80bfa4159c5be2b89ca0caaf96b06356ce60d49b2443f90",
      "size": 4451
    },
    "skills/neon-postgres/references/lakebase-search-drizzle.md": {
      "sha256": "9d5193830642719ecd325dd60f2ffc7c1104055e9c7c4f4828963299adb234b7",
      "size": 6716
    },
    "skills/neon-postgres/references/vector-search.md": {
      "sha256": "4d7c14f1940033e2c379be62f00ef5ba5e17878a44bc11957a5176f91c2aa0ac",
      "size": 6244
    },
    "skills/neon/SKILL.md": {
      "sha256": "1071b8789dea0cb41c795059e728821756181ce55ae34f3f904120bfbfa8ff22",
      "size": 32812
    },
    "skills/neon/references/auth.md": {
      "sha256": "c2c609f25d6936c8df52989889ffff738f55b5100259e9193173ed07891f49f0",
      "size": 730
    },
    "skills/neon/references/claimable-neon.md": {
      "sha256": "1f510be025b1841231b8ee40f69f8b38a348336b258be43b943cc94f2d88bcf8",
      "size": 8163
    },
    "skills/neon/references/function-triggers.md": {
      "sha256": "a72aadc3e63464db7f618abb6daa7f119eb76cf213f27a88c84f7aa92b4dd254",
      "size": 3249
    },
    "skills/neon/references/logs-loki.md": {
      "sha256": "fb338ad4d75e3d6c594945bd24d64a4134860fc2f554cd3273c27dd79769c889",
      "size": 4044
    },
    "skills/neon/references/parse-env.md": {
      "sha256": "f43eb0d40570b06437ea3a93662ab528bad4d5c44c9c28c45f993aaa269e10bd",
      "size": 1406
    },
    "skills/neon/references/sdk.md": {
      "sha256": "b9376b5bb1658d9d926a560a7be632a0aaa4fd12e60f38c3ba5050bd35989da0",
      "size": 806
    }
  }
}

SHA-256 of public snapshot: c9876b496aaceb343c82ca2a351b8eb2a4630bb8572e1fcf8296b1ff854ef284