Application types
Choose the type that matches your process. The language is a separate choice from the way the application receives traffic and stays running.
| Type | Use it for | Networking |
|---|---|---|
| Web service | APIs, server-rendered sites and HTTP backends | HTTP container port and public routing |
| Static site | Built frontend files or plain HTML/CSS/JS | Public HTTP serving of a publish directory |
| Background worker | Continuous queue consumers and background processing | No public HTTP endpoint |
| TCP/UDP service | Databases and other non-HTTP processes | Private service ports; external publishing is optional |
Web service
The process must keep running and listen on the configured Container port. It should bind to an interface accessible to container networking, commonly 0.0.0.0. A successful build cannot fix a port mismatch or a process that exits immediately.
Static site
A source build produces files to publish, or a plain HTML/CSS/JS source already contains them. Choose the Publish directory containing index.html; it is relative to the application’s source directory.
For a client-side router, enable Single-page app routing. A server-rendered application that needs a running backend belongs under Web service. See the static-site tutorial.
Background worker
The command remains running while waiting for or processing work. A one-off script that immediately exits does not match this workload shape. Use logs and deployment state to verify work rather than expecting a public website.
TCP/UDP service
Use a Docker image or source with an explicit start command. Add service ports in the runtime step. Ports stay private unless you enable external publishing. Read Private networking and TCP/UDP services before exposing a database or stateful service.
Choose a source
- Git repository: build source from connected GitHub or a public Git URL.
- Docker image: run a packaged image, optionally with a granted private registry credential.
- ZIP archive: upload source code or ready-to-serve static files.
Git and ZIP builds need an amd64 server. ARM servers can run compatible prebuilt Docker images. The dashboard supports Go and TCP/UDP service configuration; MCP deployments currently support fewer options.
Names and descriptions
Use a stable, recognizable application name. It cannot be renamed after creation. The description can change without triggering a deployment. Keep secrets and customer records out of both fields.