Skip to main content
A server runs a command in the workspace sandbox and puts an HTTPS URL in front of it. Use it to preview a web app, expose an API you just generated, or host a service that other systems call - without deploying anything of your own.
Servers are for a running process. To publish static or built output at a stable subdomain instead, use Sites.

Start a server

Both command and exec also accept an array of strings when you would rather not quote a shell string. The workspace is mounted at /ws in the sandbox, so your code is already there.

Who can reach it

A non-public server needs a minted URL rather than its bare address:
The returned URL is short-lived and scoped to the caller. Use "presentation": "embed" when it will be loaded inside a frame.

Limits

Exceeding the server limit returns 429.

Manage servers

Status is one of starting, running, stopped, or failed.

Calling connected integrations from a server

A server can call a connected provider without ever holding that provider’s credential. Declare a portable alias in the .server file:
Never put a connection id, a provider credential, or a provider base URL in the .server file. You bind each alias to a real connection when you explicitly launch the server, and integration-enabled files never launch on their own. Launching through the API means sending those bindings with the request. The declarations stay in the file:
Every declared alias needs exactly one matching binding. Duplicate aliases, provider mismatches, and connections the launching principal does not own are rejected. A binding keeps the connection’s existing owner: a user-owned connection runs only as that user, and a service-account-owned connection only as that service account. Launching never hands a person’s credential to a service account. The running process receives a revocable, server-scoped broker URL and token as ARG_INTEGRATIONS_URL and ARG_INTEGRATIONS_TOKEN. Append the alias and a relative provider path, and send the token as a bearer credential:
The broker validates the live server, the alias, the provider, the connection’s owner, and its revocation state before adding the credential and forwarding the request. Use relative paths only; never send a provider base URL.
Never log, persist, or return ARG_INTEGRATIONS_TOKEN. It is narrower than the provider credential, but it can use the bound connection for as long as the server is up. Server URLs can be public, and collaborators can change code in the live workspace, so both inbound requests and later edits can exercise that authority until the server is stopped. Give unattended servers the narrowest provider scopes available.