Update to Neon
Snapshot Oct 4, 2026 · 18:02 UTC · version 2.1.0
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
{"sha256":"7f6c3217c0c1795ec3aa09993b8227c989e2aa116352b60c0e305ad0558657dc","size":104}
Not present
Package file
{"sha256":"107930b82cec1cf0418b9b9c54b2b85739f17e95671e088c419872387227c48a","size":1153}
Not present
Package file
Not present
{"sha256":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","size":11358}
Package file
Not present
{"sha256":"6ea32cfd68df51adbf06156bc7282cf6c5eece06b684b163ea612fcec8521d2a","size":427}
Compare saved observations
Download comparison JSONChanged files
LICENSE →
assets/neon-logomark-dark.svg →
assets/neon-logomark-light.svg →
mcp.json →
skills/neon-ai-gateway/SKILL.md →
skills/neon-auth/references/managed-auth.md →
skills/neon-auth/references/self-managed.md →
skills/neon-functions/SKILL.md →
skills/neon-functions/references/ai-sdk.md →
skills/neon-functions/references/function-triggers.md →
skills/neon-functions/references/mastra-studio.md →
skills/neon-functions/references/mcp.md →
skills/neon-functions/references/native-binaries.md →
skills/neon-functions/references/production-hardening.md →
skills/neon-functions/references/sse.md →
skills/neon-object-storage/SKILL.md →
skills/neon-postgres-branches/SKILL.md →
skills/neon-postgres-egress-optimizer/SKILL.md →
skills/neon-postgres/SKILL.md →
skills/neon-postgres/references/full-text-search.md →
skills/neon-postgres/references/hybrid-search.md →
skills/neon-postgres/references/lakebase-search-drizzle.md →
skills/neon-postgres/references/vector-search.md →
skills/neon/references/auth.md →
skills/neon/references/claimable-neon.md →
skills/neon/references/function-triggers.md →
skills/neon/references/logs-loki.md →
skills/neon-functions/references/native-binaries.md
--- before +++ after @@ -0,0 +1,188 @@ +# Shipping native binaries with a Function + +The default deploy bundles `source` into a single `index.mjs` with esbuild. A compiled binary cannot be inlined into that file, so it has to ship as a separate file in the deploy archive. There are three ways to put it there. Pick by what the binary is: + +| The binary is | Use | +| ------------------------------------------------------------------------------------------ | -------------------------------------------------------------- | +| An npm package backed by a Node-API addon (`sharp`, most `@napi-rs/*` packages) | [`externalPackages`](#externalpackages-npm-packages-with-a-node-addon) | +| A file your own build step produces: a `.node` addon, a `.so`, a `.wasm`, model weights | [`bundler: "none"`](#bundler-none-ship-a-prebuilt-directory) or a [custom `bundler`](#custom-bundler-return-the-file-map) | +| A standalone executable you spawn (`ffmpeg`, a Go or Rust CLI) | A custom `bundler` or `"none"`, plus [a copy to `/run` at startup](#standalone-executables) | + +The examples use top-level `functions`, which needs `neon` CLI 4.20 or newer and `@neon/config` 1.6 or newer. + +## The runtime a binary lands on + +- **linux, arm64, glibc**, Node.js 24. A binary built for macOS or x64 cannot load there. +- The archive is extracted to `/opt/function`, a read-only filesystem. `import.meta.url` in the root `index.mjs` points there, so `new URL("./bin/tool", import.meta.url)` resolves to `/opt/function/bin/tool`. +- **Every file arrives with mode `644`.** Unix permission bits in the zip are dropped on extraction, and `chmod` in place fails with `EROFS`. A `.node` or `.so` loads fine (it is `dlopen`ed, not executed). Spawning a file from `/opt/function` fails with `EACCES`. +- `/tmp` is writable and mounted `noexec`: a copied binary still fails with `EACCES` after `chmod 755`. +- `/run` is a writable tmpfs that allows exec (about 990 MiB, backed by the function's 2048 MiB of memory). + +The filesystem layout is observed behavior, not documented by Neon. Re-check it if spawning starts failing. + +## `externalPackages`: npm packages with a Node addon + +```typescript +// neon.ts +import { defineConfig } from "@neon/config/v1"; + +export default defineConfig({ + functions: { + resize: { + name: "Resize", + source: "./src/resize.ts", + externalPackages: ["sharp"], + }, + }, +}); +``` + +esbuild leaves `import sharp from "sharp"` unresolved. At deploy, the CLI installs the version of `sharp` from your project with `npm install --cpu=arm64 --os=linux --libc=glibc --ignore-scripts` into a temp directory, traces the files it reaches with `@vercel/nft`, and copies them into the archive under `node_modules/` with the tree layout intact. Only the installed version is read from your `node_modules`; the shipped files come from the temp install, and your `node_modules` is not modified. + +The deploy fails with a named error when: + +- the package is not installed in your project (no version to pin) +- the declared package itself does not install for linux-arm64 glibc (`EBADPLATFORM`) +- a staged `.node` or `.so` is not an AArch64 ELF binary +- `npm` is not on `PATH` +- the archive exceeds the [size limits](#size-limits) + +It does not fail when a platform-specific optional dependency is silently skipped, or when a package that compiles from source at install time ships no binary (the staging install runs with `--ignore-scripts`). Those deploy and then fail at invoke. Use packages that publish a linux-arm64 glibc prebuild (`sharp` does), and invoke the deployed function once to confirm the addon loads. + +A deploy and `neon dev` print an advisory warning for any bundled package that carries native code and is not declared. A package with a working JavaScript fallback (`ws` with `bufferutil`) triggers it too and needs no change. Do not silence it with `{ name, includeFiles: false }`: that externalizes the package and ships nothing, so a reached import throws `Cannot find module` on every invoke. `includeFiles: false` is only for an import the function never evaluates. + +Under `neon dev`, the package is only kept out of the bundle and resolves from your own `node_modules` for your host. + +Pros: one line in `neon.ts`; the target-platform install, file tracing, arch check, and size check are automatic; local dev uses your host build. + +Cons: only for npm packages that publish a linux-arm64 glibc prebuild; transitive pins, overrides, and patches from your lockfile are not carried into the staged install; esbuild bundler only (`externalPackages` with `bundler: "none"` or a function fails validation). + +## `bundler: "none"`: ship a prebuilt directory + +Run your own build, then point `source` at its output. The directory root must contain `index.mjs` or `index.js`. Everything else in the directory ships as-is: + +```text +dist/fn/ + index.mjs # built by your step, reads ./native/addon.node + native/addon.node +``` + +```typescript +// neon.ts +import { defineConfig } from "@neon/config/v1"; + +export default defineConfig({ + functions: { + api: { name: "API", source: "./dist/fn", bundler: "none" }, + }, +}); +``` + +```bash +npm run build:fn && neon deploy --env .env.local +neon functions deploy api --src dist/fn --no-bundle # same thing, without neon.ts +``` + +`neon deploy` does not run your build step. Run it first, or use a [custom `bundler`](#custom-bundler-return-the-file-map) to keep the build inside `neon deploy`. + +Pros: works with any build tool or framework output (`.mastra/output` is the common one); full control over the archive layout. + +Cons: no architecture check, so a binary built for your laptop deploys and then fails at invoke; the build step is yours to keep in sync with `neon deploy`; TypeScript cannot ship unbundled. + +## Custom `bundler`: return the file map + +An inline function in `neon.ts` returns archive paths mapped to bytes. `neon deploy` zips the map, and `neon dev` serves the same map locally: + +```typescript +// neon.ts +import { readFile } from "node:fs/promises"; +import { build } from "esbuild"; +import { defineConfig } from "@neon/config/v1"; + +export default defineConfig({ + functions: { + transcode: { + name: "Transcode", + source: "./src/transcode.ts", + bundler: async (fn) => { + const out = await build({ + entryPoints: [fn.source], + bundle: true, + platform: "node", + format: "esm", + write: false, + outfile: "index.mjs", + // CommonJS dependencies call require(); ESM output has none in scope. + banner: { + js: "import{createRequire}from'module';const require=createRequire(import.meta.url);", + }, + }); + return { + "index.mjs": out.outputFiles[0].contents, + "bin/ffmpeg": new Uint8Array( + await readFile(new URL("./vendor/linux-arm64/ffmpeg", import.meta.url)), + ), + }; + }, + }, + }, +}); +``` + +`esbuild` must be a dependency of your project. The map needs `index.mjs` or `index.js` at the root. + +Pros: the build lives in `neon.ts`, so `neon deploy` and `neon dev` always build the same thing; any file from anywhere can go in the archive. + +Cons: no architecture check; `externalPackages` cannot be combined with it, so an npm addon has to be copied into the map by hand, with its `node_modules/` layout. + +## Standalone executables + +Ship the executable with a custom `bundler` or `bundler: "none"`, then copy it to `/run` and mark it executable once per isolate: + +```typescript +// src/transcode.ts +import { execFile } from "node:child_process"; +import { chmod, copyFile, mkdir } from "node:fs/promises"; +import { promisify } from "node:util"; + +const run = promisify(execFile); + +let ffmpeg: Promise<string> | undefined; +function ffmpegPath(): Promise<string> { + if (process.env.FFMPEG_PATH) return Promise.resolve(process.env.FFMPEG_PATH); + ffmpeg ??= (async () => { + await mkdir("/run/bin", { recursive: true }); + await copyFile(new URL("./bin/ffmpeg", import.meta.url), "/run/bin/ffmpeg"); + await chmod("/run/bin/ffmpeg", 0o755); + return "/run/bin/ffmpeg"; + })(); + return ffmpeg; +} + +export default { + async fetch() { + const { stdout } = await run(await ffmpegPath(), ["-version"]); + return new Response(stdout); + }, +}; +``` + +`neon dev` runs this code on your machine, where `/run` may not exist and a linux-arm64 binary cannot execute. Point it at a host install from the shell, and leave `FFMPEG_PATH` out of the function's deployed `env`: + +```bash +FFMPEG_PATH="$(command -v ffmpeg)" neon dev +``` + +The binary must be statically linked, or its shared libraries must exist in the runtime image. The copy costs memory: `/run` is RAM-backed and counts against the function's 2048 MiB. + +## Size limits + +`bundler: "none"`, a custom `bundler`, and `externalPackages` staging check the archive before upload: + +| Limit | Value | +| ------------------------ | ------- | +| Compressed zip | 10 MiB | +| Total uncompressed bytes | 64 MiB | +| Files in the archive | 4,096 | + +Exceeding one fails the deploy. The byte-limit errors list the four largest files. Check an executable's size before building around it: a single static binary can use most of the 64 MiB.
Full technical diff · 44 changed fields
removed /files/.app.json
{
"sha256": "7f6c3217c0c1795ec3aa09993b8227c989e2aa116352b60c0e305ad0558657dc",
"size": 104
}Field is absent
removed /files/.codex-plugin~1plugin.json
{
"sha256": "107930b82cec1cf0418b9b9c54b2b85739f17e95671e088c419872387227c48a",
"size": 1153
}Field is absent
added /files/LICENSE
Field was absent
{
"sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
"size": 11358
}added /files/assets~1neon-logomark-dark.svg
Field was absent
{
"sha256": "6ea32cfd68df51adbf06156bc7282cf6c5eece06b684b163ea612fcec8521d2a",
"size": 427
}added /files/assets~1neon-logomark-light.svg
Field was absent
{
"sha256": "8154bfde92038629bc1c35e9888a5aafafbf4dc6ebaa55eb328075a9ebbe4e27",
"size": 427
}added /files/mcp.json
Field was absent
{
"sha256": "496c89ba28e7628b2f7c477c4ed7a890504f7d5772ab22ce8426f369129b43a4",
"size": 192
}added /files/plugin.json
Field was absent
{
"sha256": "3dc352f4107acf80b61e07955619c8937d3677ba8d1089b9763d518f93f901d6",
"size": 2175
}changed /files/skills~1neon-ai-gateway~1SKILL.md/sha256
"5f7b7d3f9490fda3d3e78ade52f8df053a0f0ce9fad38d6f17d47c5d92ba4ce4"
"eab0545d5ee7626847ce5b5cdd5f4f03afad0ca5859ffd281389721b06c2bce0"
changed /files/skills~1neon-ai-gateway~1SKILL.md/size
20612
20643
added /files/skills~1neon-auth~1SKILL.md
Field was absent
{
"sha256": "5f91f328235382f3e9afef449729e304a531848a90c02b40c4fd1192709e0319",
"size": 12404
}added /files/skills~1neon-auth~1references~1managed-auth.md
Field was absent
{
"sha256": "382c00feeb2f3cc12dbe9b881a43339eef25741d4bc4b70d43c63d2311587dd9",
"size": 9309
}added /files/skills~1neon-auth~1references~1self-managed.md
Field was absent
{
"sha256": "2c53afcd667a9d3e9df9d7bf3eef2aec94ae4a0ec01c7f65852a965267bc127a",
"size": 2033
}changed /files/skills~1neon-functions~1SKILL.md/sha256
"92b3a6a025885d45b7976e9d4338ea98712e091afac5309aa59ba9c9771706fa"
"ef17cab6c81fba6e5545037205889dcb1b2dcd9748d5fbbf50465ee0a8a88d8d"
changed /files/skills~1neon-functions~1SKILL.md/size
39778
49106
changed /files/skills~1neon-functions~1references~1ai-sdk.md/sha256
"11f963c0dac8ef0aaa6cd49a3e9dbf7b1dc85dba3dba76bd964d5e42de002c7d"
"3bca13c980a6634ce3dd53533145c9b93f5b3f87f777b62b66ed5f582dce3370"
changed /files/skills~1neon-functions~1references~1ai-sdk.md/size
6772
6744
added /files/skills~1neon-functions~1references~1function-triggers.md
Field was absent
{
"sha256": "a54ed9599ebdcd340141f6a6f3b9770ef1d8406a936515c929444fc6a9c695eb",
"size": 10837
}changed /files/skills~1neon-functions~1references~1mastra-studio.md/sha256
"58b7b6067e2dd7c991b3b640fe69a47b6078069f0d1fb97b213ae2a9389bc02a"
"01b7d421a36e64a704854b9fafe99ddc3d262d6d1da4af6eb44b12968064a0b0"
changed /files/skills~1neon-functions~1references~1mastra-studio.md/size
6365
6347
changed /files/skills~1neon-functions~1references~1mcp.md/sha256
"22ce58566b5479801621a61d65467b28bf566837611095c2b7f4f579bd553010"
"45c7a48c22b4cdb2deaecae40a17cd9d55755c36ae288d2ddad0dfcf111f03e9"
changed /files/skills~1neon-functions~1references~1mcp.md/size
9138
9123
added /files/skills~1neon-functions~1references~1native-binaries.md
Field was absent
{
"sha256": "04d39d8dc2e822e6e2189752ae01fdff5d85f175059b6209df1c77e105941ae0",
"size": 9385
}added /files/skills~1neon-functions~1references~1production-hardening.md
Field was absent
{
"sha256": "1b3f0eb3e13aae1d1bdea3e32b476b6e1135276da6b8b51d4db30df0326b71c8",
"size": 15301
}changed /files/skills~1neon-functions~1references~1sse.md/sha256
"3b6fd889d08642ee2dc40788c7e56945b3ed0ab3e912626bd8d89c3e57b4b3c7"
"a032699cfa2e361f8f7a9dc6e0b5e66e284f39fa0de455d5506b3e3686fa0b56"
changed /files/skills~1neon-functions~1references~1sse.md/size
8211
8310
changed /files/skills~1neon-object-storage~1SKILL.md/sha256
"1d3d9f662b6caafb640d45583a1505ec7433ed4ba6ba5c61e1765aa7c16c03a9"
"fce96952845dfcf4b0c560fcf1ff0d2c0867931fd34ddb3acf0ec24fd118fd11"
changed /files/skills~1neon-object-storage~1SKILL.md/size
14116
14253
added /files/skills~1neon-postgres-branches~1SKILL.md
Field was absent
{
"sha256": "9f47d5a49553a465837c1e8b2d90a90aac72a5313a996c081027290f259a8d71",
"size": 13663
}added /files/skills~1neon-postgres-egress-optimizer~1SKILL.md
Field was absent
{
"sha256": "d7536270b6dd59a66fa5daf1578cc55a5b761d7163f6f6b1596662481b8d5d9b",
"size": 10227
}changed /files/skills~1neon-postgres~1SKILL.md/sha256
"eb8081a09e25ff2062e8f8de7cba00c38123aeb259771605c988ca0245389886"
"83d3c75651bd81f06e5e8c47ffc306936cc4d2a1ac84d288e8f6a15fcfb724b4"
changed /files/skills~1neon-postgres~1SKILL.md/size
9176
16595
added /files/skills~1neon-postgres~1references~1full-text-search.md
Field was absent
{
"sha256": "025d4380ccfe8e2c745687d82ed6182d501d5678a3941112f37f58bac38e7db4",
"size": 3901
}added /files/skills~1neon-postgres~1references~1hybrid-search.md
Field was absent
{
"sha256": "80b9b1a9974c41eea80bfa4159c5be2b89ca0caaf96b06356ce60d49b2443f90",
"size": 4451
}added /files/skills~1neon-postgres~1references~1lakebase-search-drizzle.md
Field was absent
{
"sha256": "9d5193830642719ecd325dd60f2ffc7c1104055e9c7c4f4828963299adb234b7",
"size": 6716
}added /files/skills~1neon-postgres~1references~1vector-search.md
Field was absent
{
"sha256": "4d7c14f1940033e2c379be62f00ef5ba5e17878a44bc11957a5176f91c2aa0ac",
"size": 6244
}changed /files/skills~1neon~1SKILL.md/sha256
"9540789af742962ecab2626a73434b8f906f99cec02f2e152791535ee89705f1"
"1071b8789dea0cb41c795059e728821756181ce55ae34f3f904120bfbfa8ff22"
changed /files/skills~1neon~1SKILL.md/size
31147
32812
added /files/skills~1neon~1references~1auth.md
Field was absent
{
"sha256": "c2c609f25d6936c8df52989889ffff738f55b5100259e9193173ed07891f49f0",
"size": 730
}changed /files/skills~1neon~1references~1claimable-neon.md/sha256
"5d220f032995a44dbd618b807a0c6a6814d1e69ea32014285c62ddd23cfaeefd"
"1f510be025b1841231b8ee40f69f8b38a348336b258be43b943cc94f2d88bcf8"
changed /files/skills~1neon~1references~1claimable-neon.md/size
7788
8163
added /files/skills~1neon~1references~1function-triggers.md
Field was absent
{
"sha256": "a72aadc3e63464db7f618abb6daa7f119eb76cf213f27a88c84f7aa92b4dd254",
"size": 3249
}added /files/skills~1neon~1references~1logs-loki.md
Field was absent
{
"sha256": "fb338ad4d75e3d6c594945bd24d64a4134860fc2f554cd3273c27dd79769c889",
"size": 4044
}added /files/skills~1neon~1references~1parse-env.md
Field was absent
{
"sha256": "f43eb0d40570b06437ea3a93662ab528bad4d5c44c9c28c45f993aaa269e10bd",
"size": 1406
}added /files/skills~1neon~1references~1sdk.md
Field was absent
{
"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