Catalog Annotations Reference
Catalog annotations define configurable parameters for YAML catalogs using special @input comments in values.yaml files.
Annotation Syntax
All annotations use comment-based syntax above the parameter definition:
# @input.<property>: <value>
parameterName: default-value
Annotations must appear directly above the parameter they describe, with no blank lines between the annotations and the parameter.
Required Annotations
Every parameter in a YAML catalog's values.yaml must include these three required annotations:
@input.type
Defines the parameter's data type.
Syntax:
# @input.type: <type>
Valid Types:
| Type | Description | UI Component |
|---|---|---|
string | Text input | Text field |
enum | Select from predefined options | Dropdown list |
bool | Boolean value (use enum with true,false options) | Checkbox or dropdown |
secret | Sensitive data (passwords, API keys, tokens) | Password field |
Examples:
# String type
# @input.type: string
clusterName: my-cluster
# Enum type
# @input.type: enum
environment: production
# Secret type
# @input.type: secret
apiKey: ""
@input.description
Human-readable description displayed in the Konstruct UI.
Syntax:
# @input.description: <description text>
Guidelines:
- Keep descriptions concise (1-2 sentences)
- Explain what the parameter controls
- Include units if applicable (e.g., "in days", "in MB")
- Mention any special formatting requirements
Examples:
# @input.type: string
# @input.description: Cluster name for resource identification
clusterName: my-cluster
# @input.type: string
# @input.description: Data retention period in days (e.g., 15d, 30d)
retentionPeriod: 15d
# @input.type: enum
# @input.description: Enable debug logging for troubleshooting
debugEnabled: false
@input.required
Specifies whether the parameter must be provided during deployment.
Syntax:
# @input.required: true|false
Examples:
# Required parameter
# @input.type: string
# @input.description: Cluster name identifier
# @input.required: true
clusterName: my-cluster
# Optional parameter
# @input.type: string
# @input.description: Custom resource tag
# @input.required: false
customTag: ""
Optional Annotations
@input.default
Specifies the default value if the user does not provide one.
Syntax:
# @input.default: <default-value>
Guidelines:
- Include sensible defaults for optional parameters
- Default values should work in most scenarios
- Match the default value format to the parameter type
Examples:
# @input.type: string
# @input.description: Environment name
# @input.required: false
# @input.default: production
environment: production
# @input.type: enum
# @input.description: Enable feature
# @input.options: true,false
# @input.required: false
# @input.default: false
featureEnabled: false
@input.options
Defines available options for enum type parameters.
Syntax:
# @input.options: <option1>,<option2>,<option3>
Guidelines:
- Required for
enumtype parameters - Separate options with commas (no spaces)
- For boolean values, use:
true,false - Options are case-sensitive
Examples:
# Boolean as enum
# @input.type: enum
# @input.description: Enable monitoring
# @input.options: true,false
# @input.required: true
# @input.default: true
monitoringEnabled: true
# Multiple options
# @input.type: enum
# @input.description: Deployment environment
# @input.options: development,staging,production
# @input.required: true
# @input.default: development
environment: development
# Instance sizes
# @input.type: enum
# @input.description: Instance size
# @input.options: small,medium,large
# @input.required: true
# @input.default: medium
instanceSize: medium
Secret-Specific Annotations
When using @input.type: secret, these additional annotations are required:
@input.secretKey
The key name under which the secret is stored in the secret backend.
Syntax:
# @input.secretKey: <key-name>
@input.secretEnv
The environment variable name that will contain the secret value.
Syntax:
# @input.secretEnv: <ENV_VAR_NAME>
@input.secretBackend
The secret storage backend where the secret is stored.
Syntax:
# @input.secretBackend: <backend-name>
Common backends:
vault- HashiCorp Vaultaws-secrets-manager- AWS Secrets Managerazure-key-vault- Azure Key Vaultgcp-secret-manager- GCP Secret Manager
@input.secretPath
The path in the secret backend where the secret is stored.
Syntax:
# @input.secretPath: <path>
Examples:
# Database password
# @input.type: secret
# @input.description: Database password for application
# @input.required: true
# @input.secretKey: db-password
# @input.secretEnv: DATABASE_PASSWORD
# @input.secretBackend: vault
# @input.secretPath: /myapp/database
databasePassword: ""
# API key
# @input.type: secret
# @input.description: Datadog API key for authentication
# @input.required: true
# @input.secretKey: api-key
# @input.secretEnv: DATADOG_API_KEY
# @input.secretBackend: vault
# @input.secretPath: /datadog-agent
datadogApiKey: ""
Complete Examples
String Parameter
# @input.type: string
# @input.description: Name identifier for the cluster
# @input.required: true
# @input.default: default-cluster
clusterName: default-cluster
Enum Parameter (Boolean)
# @input.type: enum
# @input.description: Enable debug logging
# @input.options: true,false
# @input.required: false
# @input.default: false
debugEnabled: false
Enum Parameter (Multiple Options)
# @input.type: enum
# @input.description: Deployment environment type
# @input.options: development,staging,production
# @input.required: true
# @input.default: development
environment: development
Secret Parameter
# @input.type: secret
# @input.description: Database password for application
# @input.required: true
# @input.secretKey: db-password
# @input.secretEnv: DATABASE_PASSWORD
# @input.secretBackend: vault
# @input.secretPath: /myapp/database
databasePassword: ""
Multiple Parameters in values.yaml
# Cluster configuration
# @input.type: string
# @input.description: Cluster name identifier
# @input.required: true
clusterName: my-cluster
# @input.type: string
# @input.description: Namespace for deployment
# @input.required: true
# @input.default: default
namespace: default
# Feature flags
# @input.type: enum
# @input.description: Enable monitoring features
# @input.options: true,false
# @input.required: true
# @input.default: true
monitoringEnabled: true
# @input.type: enum
# @input.description: Enable application performance monitoring
# @input.options: true,false
# @input.required: false
# @input.default: false
apmEnabled: false
# Secrets
# @input.type: secret
# @input.description: API key for service authentication
# @input.required: true
# @input.secretKey: api-key
# @input.secretEnv: SERVICE_API_KEY
# @input.secretBackend: vault
# @input.secretPath: /my-service
serviceApiKey: ""
Naming Conventions
Critical: All parameter names in values.yaml must use camelCase.
Correct (camelCase)
- ✅
clusterName - ✅
apiKey - ✅
enableMonitoring - ✅
databasePassword - ✅
instanceSize
Incorrect
- ❌
cluster_name(snake_case) - ❌
api-key(kebab-case) - ❌
ClusterName(PascalCase) - ❌
cluster name(spaces)
Validation Rules
The Konstruct platform validates annotations according to these rules:
- Required Annotations: All parameters must have
@input.type,@input.description, and@input.required - Enum Options: Parameters with
@input.type: enummust include@input.options - Secret Annotations: Parameters with
@input.type: secretmust include all four secret-specific annotations - Default Types: Default values must match the declared type
- Naming: Parameter names must use camelCase
- No Blank Lines: Annotations must directly precede their parameters
Common Patterns
Optional Feature Toggle
# @input.type: enum
# @input.description: Enable optional feature
# @input.options: true,false
# @input.required: false
# @input.default: false
featureEnabled: false
Required Configuration with Sensible Default
# @input.type: string
# @input.description: Log level for application
# @input.required: true
# @input.default: info
logLevel: info
Environment-Specific Settings
# @input.type: enum
# @input.description: Deployment environment
# @input.options: dev,staging,prod
# @input.required: true
environment: dev
# @input.type: string
# @input.description: Resource size based on environment
# @input.required: true
# @input.default: small
resourceSize: small
What's Next?
- Create a YAML catalog using these annotations
- View catalog examples with complete annotation usage
- Deploy catalogs to see how parameters appear in the UI
- Learn about catalog types