Skip to main content
Each deployed app consists of two services: an app service that serves the web application and API, and a worker service that executes background workflows. Both are independently configurable.

App service

Apps run on Node.js and handle requests asynchronously on a single-threaded event loop. Most request processing is I/O-bound — database queries, service calls, and API requests to third-party services — while CPU-intensive work is typically offloaded to the worker service. The default settings are suitable for most internal and moderate-volume workloads. For high-availability or high-traffic apps, or apps expecting large bursts in traffic, the minimum and maximum instance counts can be adjusted accordingly.

Worker service

Task settings

Workflow settings

The default settings are tuned for general-purpose data processing and asynchronous workflows, and are suitable for most workloads. Apps with data-intensive workflows — large datasets, complex transformations, or heavy file processing — benefit from increased worker memory and CPU, which also proportionally increases the resources available to each step. Apps with high workflow volume benefit from increasing max concurrency and max parallel steps to process more work simultaneously across fewer instances.

Step resource limits

Each workflow step runs with its own resource allocation for data processing:
Step resource limits are automatically derived from the worker task settings and are not directly configurable. Increasing worker CPU and memory will proportionally increase the resources available to each step.

Valid CPU and memory combinations

CPU and memory must be configured in supported pairings:

Database

Each app gets a dedicated serverless Postgres database that scales automatically based on demand.
When min capacity is set to 0, the database suspends automatically after the idle timeout and resumes on the next connection. For customer-facing or high-availability apps, set min capacity above 0 to avoid cold starts.