Choosing Worker or Web
When to pick Worker vs Web process mode, with examples.
Choosing Worker or Web
At delivery submit you must pick a process mode. There is no default.
Quick rule
- Choose Worker if your app is a long-running process and does not need a public HTTP URL.
- Choose Web if your app must accept inbound HTTP (webhooks, OAuth callbacks, a public API, or a site users open in a browser).
If anything outside Velcio must call your app over HTTPS, pick Web.
Examples
| Example | Mode | Why |
|---|---|---|
| Discord bot that only uses the Gateway (outbound to Discord) | Worker | No public URL; Velcio runs the process |
| Poller or scheduler that calls APIs on a timer | Worker | Outbound-only; no inbound HTTP |
| Background job with no HTTP server | Worker | Long-lived process without a hostname |
| Stripe / Slack / WhatsApp / Discord Interactions webhook | Web | Provider must POST to a public URL |
Small HTTP API or dashboard on *.velcio.app | Web | Needs public HTTPS |
| OAuth redirect / callback endpoint | Web | Identity provider must reach your app |
Still unsure? Prefer Web when you need inbound traffic; prefer Worker when the process only talks outbound (typical Discord bots).
What each mode gives you
Worker
- Long-running container with no public hostname
- Logs and deploy controls on the project page
- Packaging: Delivery format
Web
- Public HTTPS at
https://{slug}.velcio.app - Bind
0.0.0.0and envPORT(Velcio sets8080); your app must implementGET /healthzwith HTTP2xx(Velcio does not add this route) - Wrong port → public 502 even if the container looks fine
- Packaging: Web delivery format
Related
- ZIP / GitHub layout: Delivery format
- HTTP contract (
PORT,/healthz): Web delivery format - Submit steps: Developer workflow