App Types
Quave ONE lets you create four customer-facing entity types from the Apps area. They all share the same account, app, environment, region, permissions, billing, logs, metrics, and audit model, but they run with different infrastructure behavior.
| Type | Use for | Runtime shape | Public API and MCP shape |
|---|---|---|---|
| Apps | Web apps, APIs, long-running workers, and services that should stay available. | Long-running Kubernetes workloads with containers, ports, hosts, probes, optional storage, autoscaling, logs, metrics, and deploy history. | Default app type. Create with POST /api/public/v1/app and a non-service Docker preset such as CUSTOM, METEOR_JS, NEXT_JS, or EXPRESS. |
| Databases & Services | Databases, caches, queues, and other managed infrastructure components. Examples: MongoDB, PostgreSQL, MySQL, Redis, CouchDB, RabbitMQ, and ClickHouse. | Quave ONE-managed service infrastructure with generated credentials, internal and external connection URLs, service-specific limits, backups where supported, metrics, logs, and DevOps automation. | In the API this still uses the historical appType=db, dockerPreset values such as POSTGRESQL or REDIS, and GET /api/public/v1/database-presets for compatibility. |
| Functions | Request-driven endpoints, webhooks, event-style APIs, and workloads that benefit from scale-to-zero. | Knative-powered workloads that scale based on traffic and can scale to zero when idle. | Create with dockerPreset: "FUNCTION". Configure runtime behavior with functionConfig. |
| Jobs | Finite commands such as Rails migrations, one-off maintenance tasks, imports, exports, and backfills. | A customer-visible JobRun creates a Kubernetes Job, records status, logs, timing, command snapshot, and exit-code metadata, then exits. | Create with dockerPreset: "JOB". Configure defaults with jobConfig, apply changes, then run with the Job Runs API or MCP. |
Naming: Databases & Services
Older API names and some internal code still use Database, DB, or isDatabase because the first managed service type was a database. The user-facing category is broader: Databases & Services.
Use Databases & Services in docs and product explanation when talking about the group that includes:
- databases, such as MongoDB, PostgreSQL, MySQL, CouchDB, and ClickHouse;
- caches, such as Redis;
- queues and brokers, such as RabbitMQ;
- future service presets that Quave ONE manages for the customer.
Use the exact API names only when documenting a request field, endpoint, or enum value. For example, say "create a Databases & Services app with appType=db" instead of calling Redis only a database.
Choose the right type
Choose an App when
- the process should keep running;
- users or systems call it through HTTP, TCP, or a private service URL;
- you need normal deploys, probes, hosts, persistent storage, or autoscaling;
- failures should be handled by replacing pods and keeping the service available.
Examples: a Rails app, Meteor app, REST API, internal worker, Next.js app, or custom containerized service.
Choose Databases & Services when
- Quave ONE should provision and operate the service for you;
- the service exposes connection URLs and credentials rather than your own HTTP application;
- you need a database, cache, broker, or similar infrastructure dependency;
- you want service-specific defaults, resource limits, persistence settings, and backups where supported.
Examples: PostgreSQL for relational data, Redis for cache, RabbitMQ for queues, MongoDB for document data, CouchDB for replication-oriented data, or ClickHouse for analytics.
Choose a Function when
- traffic is intermittent or event-driven;
- you want scale-to-zero when idle;
- the workload is request based and does not need persistent volumes;
- the deployment region supports Functions.
Examples: webhooks, lightweight APIs, AI callbacks, or endpoints with bursty traffic.
Choose a Job when
- the command should run to completion and stop;
- a failed run should be visible as a failed run, not as a repeatedly restarting app pod;
- you need per-run logs, status, command snapshots, and audit history;
- operators or customers may rerun, cancel, or inspect the task later.
Examples: bin/rails db:migrate, bundle exec rails db:migrate, data backfills, one-off scripts, import/export tasks, or operational maintenance commands.
How creation maps to API fields
| User-facing type | App creation signal | Environment creation notes |
|---|---|---|
| App | Omit appType, or use the normal app creation flow. Use app Docker presets such as CUSTOM, METEOR_JS, NEXT_JS, EXPRESS, or a pre-built image. | Requires the normal app fields, including a port for non-Job apps. |
| Databases & Services | Use appType=db in the UI route or choose a service dockerPreset from GET /api/public/v1/database-presets. | Use service-specific fields such as dockerPresetVersion, containers, disk, withPersistence, and databaseSettings when supported. |
| Function | Use appType=function or dockerPreset: "FUNCTION". | Configure scaling and timeout with functionConfig. Functions require a supported deployment region. |
| Job | Use appType=job or dockerPreset: "JOB". | Configure command, timeout, TTL, retry, and concurrency with jobConfig. Job config edits follow the Apply Changes flow before default runs use them. |