Major update to our Free Plan: now with 1 GB of Postgres storage per project, 100 projects included
/APIs & SDKs/Functions, storage and data/functions

Neon CLI command: functions

Deploy, list, inspect, and delete Neon Functions, and manage their custom domains

The functions command manages Neon Functions on a branch. This is the command reference; for the full deployment workflow, see Deploy functions. To run functions locally, see neon dev.

Subcommands: delete, deploy, domains, get, list

neon functions deploy

Deploys a function from a local directory or entry file. The <slug> is the permanent function identifier: 1 to 20 lowercase letters and digits (^[a-z0-9]{1,20}$).

neon functions deploy <slug> [options]
OptionDescriptionTypeDefaultRequired
--bundleBundle --src with esbuild. Use --no-bundle to zip a prebuilt directory (root must contain index.mjs or index.js) or a file of that name.booleantrueNo
--envEnvironment variable as KEY=VALUE (repeatable)string—No
--runtimeFunction runtime Possible values: nodejs24string—No
--srcFunction source: a directory containing index.ts, index.js, or index.mjs (first file match is the entry), or a path to the entry filestring—No
--waitWait for the deployment to finish buildingbooleantrueNo
--branchBranch ID or namestring—No
--project-idProject IDstring—No

By default, deploy waits until the deployment finishes building (--wait=true), which is the predictable path for scripts and CI. Use --no-wait to return immediately after triggering the deployment.

By default, deploy bundles your --src with esbuild before uploading. Pass --no-bundle to skip bundling and deploy a prebuilt source instead: the directory root (or the file you point at) must be named or contain index.mjs or index.js. This is useful when you run your own build step and want to ship the output as-is.

Deploy a function from an entry file:

neon functions deploy hello --src functions/hello.ts
Output
INFO: Function deployment triggered for function hello.
Function hello
URL            https://br-cool-darkness-123456-hello.compute.c-1.us-east-2.aws.neon.tech/
Deployment Id  1
Status         completed
Runtime        nodejs24
Memory         2048 MiB
Created At     2026-06-12T00:14:58.044690Z

Deploy with environment variables and wait for the build:

neon functions deploy hello --src functions/hello.ts --env LOG_LEVEL=info --wait

neon functions list

Lists the functions on the branch.

neon functions list [options]
OptionDescriptionTypeDefaultRequired
--branchBranch ID or namestring—No
--project-idProject IDstring—No
neon functions list
Output
Slug   Name   Status     URL                                                                         Created At
hello  hello  completed  https://br-cool-darkness-123456-hello.compute.c-1.us-east-2.aws.neon.tech/  2026-06-12T00:14:57.942988Z

List with full deployment details for scripts and agents:

neon functions list --output json
Show output
[
  {
    "id": "hello",
    "slug": "hello",
    "name": "hello",
    "invocation_url": "https://br-cool-darkness-123456-hello.compute.c-1.us-east-2.aws.neon.tech/",
    "current_deployment": {
      "id": 1,
      "status": "completed",
      "memory_mib": 2048,
      "runtime": "nodejs24",
      "created_at": "2026-06-12T00:14:58.044690Z"
    },
    "active_deployment": {
      "id": 1,
      "status": "completed",
      "memory_mib": 2048,
      "runtime": "nodejs24",
      "created_at": "2026-06-12T00:14:58.044690Z"
    },
    "created_at": "2026-06-12T00:14:57.942988Z"
  }
]

neon functions get

Shows a function's details.

neon functions get <slug> [options]
OptionDescriptionTypeDefaultRequired
--list-env-variables, -EList the environment variable names of the active deploymentbooleanfalseNo
--branchBranch ID or namestring—No
--project-idProject IDstring—No
neon functions get hello
Output
Function
Slug        hello
Name        hello
URL         https://br-cool-darkness-123456-hello.compute.c-1.us-east-2.aws.neon.tech/
Created At  2026-06-12T00:14:57.942988Z

Deployment (current, active)
Deployment Id  1
Status         completed
Runtime        nodejs24
Memory         2048 MiB
Created At     2026-06-12T00:14:58.044690Z

neon functions delete

Deletes a function on the branch.

neon functions delete <slug> [options]
OptionDescriptionTypeDefaultRequired
--branchBranch ID or namestring—No
--project-idProject IDstring—No
neon functions delete hello
Output
INFO: Function hello deleted from branch br-cool-darkness-123456

neon functions domains

Manage custom domains for functions on the branch.

Subcommands: delete, list, register

neon functions domains list

Lists the custom domains registered on the branch.

neon functions domains list [options]
OptionDescriptionTypeDefaultRequired
--branchBranch ID or namestring—No
--project-idProject IDstring—No
neon functions domains list

The default table shows the domain, target function, and CNAME target. To inspect DNS and routing status, use JSON output:

neon functions domains list --output json
Output
[
  {
    "domain": "docs.example.com",
    "entity_type": "function",
    "entity_id": "hello",
    "cname_target": "fn-custom-domains.us-east-2.aws.neon.tech",
    "status": "active",
    "dns_status": "ok",
    "binding_status": "present",
    "status_reason": ""
  }
]

An active status confirms that DNS, CAA authorization, and routing are ready. Verify the domain with an HTTPS request because certificate issuance isn't included in this status.

neon functions domains register

Points a domain you already own at a function on the branch. Both --slug and the domain are required. The command prints a CNAME target; create a CNAME record for the domain at your DNS provider pointing at that target. See Custom domains for DNS, CAA, and TLS details.

neon functions domains register <domain> [options]
OptionDescriptionTypeDefaultRequired
--slugFunction slug this domain should point atstring—Yes
--branchBranch ID or namestring—No
--project-idProject IDstring—No
neon functions domains register docs.example.com --slug hello

neon functions domains delete

Deletes a custom domain from the branch.

neon functions domains delete <domain> [options]
OptionDescriptionTypeDefaultRequired
--branchBranch ID or namestring—No
--project-idProject IDstring—No
neon functions domains delete docs.example.com

Routing changes are eventually consistent, so the custom URL can continue reaching the function briefly after deletion. Deleting a function doesn't delete its custom-domain registration; delete the domain separately.

Was this page helpful?
Edit on GitHub

On this page

Copy neon init command