Functions overview

Functions overview

Updated

A function is a Node.js or Python handler that runs on each HTTPS request.

Functions suit webhook receivers, small APIs, scheduled jobs, and glue code between services. For something that runs continuously, such as a web server or a background worker, use an app or VPS.

Key features

  • Runtimes: Node.js 22 and Python 3.12, or your own Dockerfile.
  • Deploys: from the browser editor, a GitHub folder, or the CLI.
  • Address: an HTTPS subdomain on , plus custom domains.
  • Scaling: instances start on the first request and stop after an idle period.
  • Cron triggers: run the function on a UTC schedule.
  • Billing: per run, and on some plans per GB-second.
  • Monthly budget: an optional cap on runs per month.

Functions live inside a project. Creating or changing a function needs the Technical role, owner, or admin. Read-only members can view functions, logs, and usage.

Your function's address

Every function gets its own HTTPS address as soon as it's created:

https://<name>.fn.synteq.app

The name becomes the subdomain, so it uses lowercase letters, numbers, and hyphens, up to 63 characters. It can't start or end with a hyphen, and it must be unique across Synteq. Custom domains are added from the Domains tab.

How a function runs

Starting up and going idle

When a request arrives and no instance is running, Synteq starts one. The request waits while it boots; this is a cold start. Node.js and Python handlers start from a pool of runtimes that is already booted, so a cold start is the time to load your handler. In most cases, declared dependencies are part of that pool and add nothing. Typical cold starts, measured inside the Dallas datacenter:

RuntimeTypical cold start
Node.jsabout 100 ms
Pythonabout 100 ms
Your own Dockerfile or server1–2 seconds, depending on how long your image takes to start listening

A handler that loads a large native module (an image library, for example) adds that module's load time to its cold start. A running instance adds 10–20 ms of platform overhead per request inside the datacenter. It stops after 90 seconds without requests, and the next request starts a new one.

Traffic that arrives in bursts with long gaps pays a cold start at the start of each burst.

Handling more traffic

Each instance serves up to Concurrency requests at once, 10 by default. When every instance is busy, Synteq starts another, up to Max instances, 5 by default.

At the defaults a function serves 50 requests at once. Requests beyond that wait for a free slot rather than fail, so latency rises. Raise Max instances if this happens regularly. Requests also queue while instances start, and a very large burst can get a .

Handlers that mostly wait on I/O work well at a Concurrency of 10 or more. For CPU-bound handlers, lower it so requests spread across more instances.

Isolation

Each instance is a separate microVM with its own kernel, memory, and filesystem. Nothing is shared with other customers or with your function's other instances.

Instances start and stop as traffic changes, and consecutive requests can land on different instances. Keep state in a database or other external store, not in memory or on local disk.

Timeouts and errors

A request runs for up to 30 seconds by default. The Timeout in Settings goes up to 5 minutes. A request that exceeds it returns and is logged as timed out.

An uncaught error in your handler returns , and the error appears in the run's logs. If no instance is ready within 30 seconds, the request returns ; it never reached your code and isn't billed.

Statuses

StatusWhat it means
ProvisioningThe function is being created, usually for a few seconds.
ActiveThe function serves requests, including while no instances are running.
PausedRequests return . The banner on the function gives the reason.
DeletingThe function is being removed.
FailedCreation failed. Open a support ticket.

The dot next to the status reflects most runs over the last 30 minutes, or the latest run when there were none in that window: green for success, red for an error or timeout.

Memory and CPU

The runtime size sets each instance's memory. CPU scales with memory. The size also sets the maximums for Concurrency, Timeout, and Max instances. Some plans fix the size.

Billing

Runs

A run is one request that reaches your handler, whatever the result. Successes, errors, and timeouts each count as one run, as do cron runs and runs started with Trigger now.

Requests that never reach your handler are not runs: the from a paused function and the when no instance is ready in time.

GB-seconds

Some plans also bill compute in GB-seconds: instance running time multiplied by memory in GB. One 512 MB instance running for a minute uses 30 GB-seconds.

Compute is measured for as long as an instance runs, including the 90 seconds before an idle instance stops, not per request.

Plans

Plans are chosen on the Billing tab. Your organization's catalog can include:

PlanHow it works
FreeA monthly allowance of runs at no charge.
Included runs plus overageA monthly price that includes a number of runs, with a per-run rate for anything over.
Choose your runsA monthly run quantity you choose, with overage beyond it.
Prepaid creditsRuns bought in advance; each run uses one credit.
UnlimitedA flat monthly price with no run counting.

Every plan, including Free, needs a payment method on the organization. Usage resets monthly on the day the function was created.

Some organizations use a shared credit pool instead of per-function plans. The Functions list then shows a team credits balance, and functions have no Billing tab of their own.

When you reach your plan's limit

The plan either fixes what happens when included runs run out, or lets you choose under Settings → Spend:

OptionDescription
Pause until the next periodThe function stops serving until the month resets or the plan changes.
Bill the overageThe function keeps serving and extra runs are billed.
Upgrade the plan automaticallyThe function moves to the next plan and keeps serving.

The Billing tab shows which applies. Changing plan clears the choice.

Monthly budget

Monthly budget under Settings → Spend caps runs per month. At the cap the function pauses and your team is notified. Leave it empty for no cap.

A paused function returns . Deploys still work and go live on resume. The banner shows why when the pause came from your budget or plan:

ReasonHow to resume
Monthly budget reachedRaise or clear the budget and save, or wait for the next month.
Plan run allowance used upChange plan, or wait for the next month.
This function is pausedIf you paused it, click Resume function under Settings → Danger zone. Otherwise, open a support ticket.

To delete a function, pause it first. Deleting becomes available after 14 days paused.

In the portal

Functions appear under their project in the sidebar, in the Cloud section. The list shows each function's name and address, its latest deploy with when and by whom, its runs over the last 30 days, and its health.

TabWhat's there
OverviewCode editor and deploy button.
LogsEach run with its output, status, and duration.
VersionsEvery deploy, with compare and roll back.
EnvironmentEnvironment variables and secrets.
TriggersCron schedules and Trigger now.
DomainsThe address and custom domains.
BillingPlan, usage this month, and billing history.
SettingsSource, execution settings, spend controls, and delete.
ActivityWho changed what, and when.

The commands in the CLI cover the same operations.

Limits

ItemLimit
Function name1–63 characters: lowercase letters, numbers, hyphens; no hyphen at the start or end
Source size32 files and 900 KB total in the editor; up to 5 MB from the CLI or GitHub
Concurrency1–100 (default 10)
Timeout1 second to 5 minutes (default 30 seconds)
Max instancesDefault 5; the upper limit depends on the runtime size
Cron triggers10 per function, schedules in UTC
Log output kept per run500 lines

What next?

  • Writing and deploying a function: the handler format and the three ways to deploy.
  • Triggers, operations, and billing: cron, logs, rollback, custom domains, and the Billing tab.
  • Getting started with the CLI: install, log in, and deploy from a terminal.

Was this helpful?