Pipeline YAML Descriptor (quix.yaml)
The quix.yaml file serves as the Infrastructure as Code (IaC) descriptor for a Quix project. It defines the data pipeline, including the applications (deployments) and topics that compose the pipeline. This file allows you to configure and manage your data pipeline in a declarative manner, ensuring consistency across environments.
1. Metadata
The metadata section contains basic information about the file itself, such as the descriptor version. The version controls which platform capabilities apply to the file.
Use descriptor version 2.0
Two descriptor versions exist: 1.0 and 2.0. Always use 2.0 to get the full capabilities of the platform — most importantly, deployments inherit their variables from each application's app.yaml instead of repeating them in quix.yaml. See YAML 1.0 and 2.0 for the inheritance model and how to migrate from 1.0.
2. Deployments
The deployments section is where you define each component of your data pipeline. Each deployment represents an application or service that performs a specific role in the pipeline, such as a source, transformation, or sink.
Version 2.0: most of this is inherited, not written by hand
The examples and field references on this page show each deployment in full, for reference. Under descriptor version 2.0, a deployment inherits its variables — and any property left at the application default — from the application's app.yaml. You do not repeat them in quix.yaml: a deployment lists a variable only to override it for that deployment, and a deployment that overrides nothing has no variables: block at all. The complete shape shown here is what the platform resolves at deploy time; what you actually write is usually much smaller. See YAML 1.0 and 2.0 for what you write versus what the platform computes.
Example
deployments:
- name: CSV data source
application: csv data source
deploymentType: Service
version: latest
group: data-sources
resources:
limits:
cpu: 200
memory: 500
replicas: 1
desiredStatus: Running
workspaceIds:
- workspace-1
- workspace-2
variables:
- name: output
inputType: OutputTopic
description: Name of the output topic to write into
required: true
value: csv-data
multiline: false
- name: api_key
inputType: ProjectVariable
description: API key for data source
required: true
secret: true
variableKey: data-source-api-key
disabled: true
- name: data-visualizer
application: data-visualizer
version: latest
deploymentType: Service
resources:
limits:
cpu: 500
memory: 1000
replicas: 1
publicAccess:
enabled: true
urlPrefix: visualization
network:
serviceName: data-viz-service
ports:
- port: 80
targetPort: 8050
state:
enabled: true
size: 5
variables:
- name: input
inputType: InputTopic
description: This is the input topic to read data from
required: true
value: csv-data
blobStorage:
bind: true
plugin:
embeddedView:
enabled: true
hideHeader: false
default: true
sidebarItem:
show: true
label: Data Visualizer
icon: tune
order: 1
badge: Alpha
globalItem:
show: true
label: Global Visualizer
order: 1
badge: New
- name: custom-service
image: custom-repo/my-service:1.2.3
deploymentType: Service
resources:
limits:
cpu: 300
memory: 600
replicas: 2
desiredStatus: Running
- name: Dynamic Configuration Manager
application: DynamicConfiguration
deploymentType: Managed
version: latest
configuration:
topic: config-updates
mongoDatabase: quix
mongoCollection: configuration-api
mongoHost: mongodb
mongoPort: 27017
mongoUser: admin
mongoPasswordSecret: mongoPasswordSecret
Field Reference
| Field | Required | Type | Examples | Description & Notes |
|---|---|---|---|---|
name |
Yes | string | csv-source, data-visualizer |
The identifier for the deployment within your pipeline; descriptive human-readable name. |
group |
No | string | data-sources, etl |
Groups related deployments together for better organization and management. |
application |
Yes* | string | csv data source | Specifies the name of the application or microservice to deploy. This should match the application folder where the code resides. |
image |
Yes* | string | repo/service:1.2.3 |
Fully qualified Docker image incl. tag; set instead of application + version. |
deploymentType |
Yes | enum | Service, Job, Managed |
long-running (Service), run-to-completion (Job), or Quix managed service (Managed). |
version |
Yes* | string | latest, semantic tag, commit SHA |
Tag/commit for application build. Omit when using image. Use pinned value for reproducibility. |
workspaceIds |
No | string[] | ["workspace-1"] |
An array of workspace identifiers where the deployment should be deployed. This allows you to target specific workspaces for deployment. |
resources |
No | object | See Resources Fields | Defines the compute resources allocated to the deployment. |
desiredStatus |
No | enum | Running, Stopped |
The state in which you want the deployment to be. Defaults to Running if omitted. |
publicAccess |
No | object | See Public Access Fields | Configure public endpoint for service workloads only. |
network |
No | object | See Network Fields | Defines the network settings for the deployment. Ignored for Job. |
state |
No | object | See State Fields | Persistent volume claim definition for stateful services. |
variables |
No | object[] | See Variable Fields | Declarative runtime/config variables and topic bindings. |
configuration |
No | object | key: value, key: [value1, value2, value3] |
A flexible key-value configuration section for managed deployments. Can be single value or array. |
blobStorage |
No | object | See Blob Storage Fields | Configuration to inject blob storage settings into non-managed deployments. |
plugin |
No | object | See Plugin Fields | Configuration for deployment plugins that provide enhanced UI capabilities. |
disabled |
No | boolean | true / false |
Set to true to prevent the deployment from being started while keeping its configuration intact for future updates or removal. |
Mutual exclusivity
Use either application + version or image (not both) in a deployment definition.
Versioning
Use a concrete version or commit when you need repeatability; latest gives the most recent build.
Managed Services
For more info about the Managed deployment type, click here.
Plugin Fields
| Field | Required | Type | Examples | Description & Notes |
|---|---|---|---|---|
embeddedView |
No | boolean / object | true / { enabled: true, hideHeader: false, default: false } |
Can be a boolean or object. If true, equivalent to { enabled: true, hideHeader: false, default: false }. If false, embedded view is disabled. |
embeddedView.enabled |
No | boolean | true / false |
Enables the embedded view. Default = false. |
embeddedView.hideHeader |
No | boolean | true / false |
If true, hides the header (deployment name + menu). Defaults to false. |
embeddedView.default |
No | boolean | true / false |
When enabled, displays the embedded view by default when clicking on a deployment. Defaults to false for standard deployments. |
sidebarItem |
No | object | See nested fields | Optional object configuring the sidebar shortcut in the environment. |
sidebarItem.show |
No | boolean | true / false |
Whether to display a shortcut in the sidebar. |
sidebarItem.label |
No | string | Data Visualizer, Configuration |
Display name shown in navigation. |
sidebarItem.icon |
No | string | tune, chart-line, database |
Google Material icon name. |
sidebarItem.order |
No | integer | 1, 10 |
Display order (lower numbers appear first). |
sidebarItem.badge |
No | string (max 15 chars) | Alpha, Beta, New, Experimental |
Optional short label displayed next to the sidebar item. |
globalItem |
No | object | See nested fields | Optional object configuring the global shortcut in the Quix Cloud top header. |
globalItem.show |
No | boolean | true / false |
Whether to display a shortcut in the global header. |
globalItem.label |
No | string | Data Visualizer, Configuration |
Display name shown in the global header. |
globalItem.order |
No | integer | 1, 10 |
Display order (lower numbers appear first). |
globalItem.badge |
No | string (max 15 chars) | Alpha, Beta, New, Experimental |
Optional short label displayed next to the global item. |
See more details in the Plugin Documentation.
Resources Fields
The resources object nests cpu and memory under a limits key; replicas sits alongside limits:
| Field | Required | Type | Examples | Description & Notes |
|---|---|---|---|---|
limits.cpu |
No | integer | 200, 500, 1000 |
Millicores requested. |
limits.memory |
No | integer | 256, 512, 1024 |
Memory request in MB. Monitor usage to adjust. |
replicas |
No | integer | 1, 2, 3 |
The number of instances of the application to run for scalability and fault tolerance. |
Public Access Fields
| Field | Required | Type | Examples | Description & Notes |
|---|---|---|---|---|
enabled |
No | boolean | true / false |
Expose service publicly. |
urlPrefix |
When enabled | string | visualization, metrics |
The URL prefix under which the service will be accessible. Unique per workspace. |
Network Fields
| Field | Required | Type | Examples | Description & Notes |
|---|---|---|---|---|
serviceName |
No | string | data-viz-service |
Custom service name for internal networking. |
ports[].port |
No | integer | 80, 8080 |
The external port number that will be exposed. |
ports[].targetPort |
No | integer | 8050, 5000 |
Container port; defaults to port when omitted. |
State Fields
| Field | Required | Type | Examples | Description & Notes |
|---|---|---|---|---|
enabled |
No | boolean | true / false |
Allocate persistent storage volume. |
size |
When enabled | integer | 1, 5, 20 |
The size of the persistent state storage in gigabytes. |
Blob Storage Fields
| Field | Required | Type | Examples | Description & Notes |
|---|---|---|---|---|
bind |
No | boolean | true / false |
When set to true, injects the default blob storage configuration assigned to the cluster into the deployment. This allows non-managed applications to access blob storage using the same system and libraries as managed services. |
Variable Fields
Under version 2.0 these are usually inherited
These fields define a deployment variable in full, but under descriptor version 2.0 you declare them once in the application's app.yaml and each deployment inherits them. In quix.yaml you set a field here only to override the application default for that deployment.
| Field | Required | Type | Examples | Description & Notes |
|---|---|---|---|---|
name |
Yes | string | input, output, api_key |
The name of the variable. |
inputType |
Yes | enum | InputTopic, OutputTopic, FreeText, HiddenText, Options, ProjectVariable, VariableGroup |
Determines validation & UI control type. The list for Options is defined in app.yaml. (Secret is a legacy type, normalized to ProjectVariable + secret: true — see the note below.) |
description |
No | string | Free text | A brief explanation of what this variable does. |
required |
No | boolean | true / false |
Enforces presence of value (or secret) to start deployment. |
value |
No | string | csv-data |
Assigned value (not for project variables or secrets). |
variableKey |
When inputType=ProjectVariable |
string | data-source-api-key |
Key looked up in the project variables store. Used for ProjectVariable, including secrets (with secret: true). |
secret |
No | boolean | true / false |
Marks a ProjectVariable value as sensitive — encrypted at rest and masked in the UI. |
multiline |
No | boolean | true |
Enable multi-line editing (mostly with FreeText). |
secretKey |
Legacy | string | data-source-api-key |
Legacy. Secret reference for the old inputType: Secret. Superseded by ProjectVariable + variableKey + secret: true; normalized away on save. |
Secrets
Declare a secret as a ProjectVariable with secret: true, and reference its key with variableKey (do not put the secret in value). The older inputType: Secret + secretKey form is still accepted but is normalized to this shape on save.
Notes on Docker Image Deployments
- Mutual Exclusivity: You cannot specify both
application/versionandimagein the same deployment definition. Choose one approach depending on your use case. - Image References: Ensure your Docker image reference includes the repository and tag (e.g.,
custom-repo/my-service:1.2.3). - Compatibility: Direct Docker image deployments provide greater flexibility, especially for non-standardized applications or third-party containers.
3. Topics
The topics section describes the data streams that your applications will produce or consume. Topics are the backbone of data communication in a Quix pipeline, where each topic corresponds to a data stream that can be read by one or more applications.
Topic Example
topics:
- name: csv-data
persisted: false
configuration:
partitions: 1
retentionInMinutes: 6540
retentionInBytes: 182452224
cleanupPolicy: Delete
Topic Field Reference
| Field | Required | Type | Examples | Description & Notes |
|---|---|---|---|---|
name |
Yes | string | csv-data |
The unique identifier for the topic within your pipelines. |
persisted |
No | boolean | true / false |
A boolean value that indicates whether the data in this topic should be stored persistently. Setting this to false means data will not be stored permanently and might be deleted after processing. |
configuration |
No | object | See Topic Configuration Fields | Advanced retention / partition tuning. |
Topic Configuration Fields
| Field | Required | Type | Examples | Description & Notes |
|---|---|---|---|---|
partitions |
No | integer | 1, 3, 6 |
The number of partitions within the topic. More partitions allow for greater parallelism but may complicate data ordering. |
retentionInMinutes |
No | integer | 1440, 10080 |
Time-based retention window. Combine with size retention for dual thresholds. |
retentionInBytes |
No | integer | 182452224 |
The total size of data that the topic can retain. |
cleanupPolicy |
No | enum | Delete, Compact* |
Defines how the topic handles old data. Delete means old data is removed, whereas other policies like Compact could be used for different use cases. |
How to Use the quix.yaml File
This file is central to managing your Quix project. When you deploy your pipeline, Quix uses this configuration to orchestrate the setup of your data pipeline components. It ensures that all services are deployed with the correct resources and are connected through the appropriate topics.
Modifying and Updating
Whenever changes are needed, such as scaling an application or adjusting the topic configuration, you can simply modify the quix.yaml file and redeploy your pipeline. This approach allows for a repeatable and version-controlled method of managing your pipeline infrastructure.
Best Practices
- Version Control: Always keep your
quix.yamlfile under version control (e.g., in Git) to track changes and collaborate with your team. - Resource Management: Regularly review the resources allocated to each deployment to ensure optimal use of infrastructure.
- Testing: Test changes in a development environment before deploying to production to avoid disruptions in data processing.
- Security: Use secret variables for sensitive configuration data instead of hardcoding values.
By understanding and effectively managing your quix.yaml file, you can maintain a robust and scalable data pipeline that meets the needs of your organization.