Optional ZIP archive of the function source code. Omit to reuse the
latest version's bundle (a config-only change). Required for the
first deployment of a function.
Place index.mjs or index.js at the archive root, without a
containing directory. If both exist, index.mjs is loaded. Export a
request handler function or an object with a fetch method. Use
export default for ESM or module.exports for CommonJS; prefer
index.mjs for ESM.
Upload JavaScript ready to run on Node.js 24. Compile TypeScript
before uploading. Bundle dependencies into the entry module, or
include the required modules and assets in the archive with their
relative paths preserved (including node_modules for external
packages). Node.js built-in modules do not need to be bundled.
The API does not transpile, bundle, or install dependencies.
The ZIP is limited to 32 MiB compressed and 128 MiB extracted, with
at most 32,768 entries and 64 MiB per file. Bundle large dependency
trees to keep the archive small. ZIPs larger than 32 MiB are rejected
with HTTP 413 before creating a deployment. The extracted-size,
entry-count, and per-file limits are enforced during the asynchronous
build; an accepted upload that exceeds them fails the build.
For example, a self-contained ESM bundle needs only index.mjs
at the ZIP root. The Neon CLI bundles source into this layout by
default; neon function deploy --no-bundle packages a prebuilt
directory or an entry file named index.mjs or index.js.