Blueprint functions
Blueprints support special functions for accessing user inputs and environment properties during configuration.For generic template functions like
toYaml, lower, join, etc., see Template Functions.input
Access user-provided blueprint input values.
Environment functions
These functions provide information about the target environment during blueprint installation:EnvironmentName
Returns the name of the environment where the blueprint is being installed.
EnvironmentProviderType
Returns the cloud provider type: "aws", "gcp", or "azure".
EnvironmentOrgId
Returns the organization ID.
EnvironmentNamespace
Returns the default namespace for the environment, which is named after the environment. Use it inside config and other templated fields. The installations[].namespace field itself is a literal and is not templated; omit it to install into the default namespace.
EnvironmentReleaseChannel
Returns the release channel (e.g., “stable”, “beta”).
Conditionals
Blueprints support conditionals for dynamic configuration based on user inputs and environment properties.Conditional installations
Control which services are installed based on inputs or environment:Conditional configuration
Use conditionals within configuration blocks:Conditional inputs
Show inputs based on other input values:Branch deployments
Add abranches list to give each git branch its own release line. A push to a listed branch produces a release on the auto-created branch:{name} channel; pushes to unlisted branches don’t produce a release.
1.0.0-main, 1.0.0-develop). To install, set the BlueprintInstallation’s branch to the branch you want to track.
Release versions
By default Ryvn numbers blueprint releases automatically: every sync that changes the blueprint definition bumps the version according to the detected change class, and a sync that leaves the definition unchanged produces no release. Setspec.version to publish a release under an exact version you choose instead:
- The value is an exact SemVer version
X.Y.Zwith an optional pre-release suffix such as1.4.0-rc.1. Avprefix, ranges, partial versions like1.4, build metadata (+...) andpreview.*pre-releases are rejected. - Omit
spec.versionto keep automatic numbering.ryvn get blueprint <name> -o yamlreturns the stored source, sospec.versionin that output tells you whether a blueprint uses an exact version;ryvn describe blueprintand the blueprint definition page show the version of the latest release. - Publishing identical content under a version that already exists reuses that release (
unchanged). Publishing different content under an existing version is refused as aconflict, and a version that has been retired is refused asretired. Neither falls back to an automatic number: fix or changespec.versionand sync again. ryvn planlists the release as aBlueprintReleaseentry named by the requested version under the blueprint:createwhen the version is free,unchangedwhen an identical release already holds it, or blocked with the reason when it cannot be published as-is (a different definition holds the version, or the version is retired). Changingspec.versionwithout changing the definition is still shown as a change. After a sync, the published release appears the same way under the blueprint in CLI output and on the Git Sync pages, with its version, action and release ID.- Pull request previews keep their generated
-preview.*identity and never consume the stable version;spec.versionis published only when the pull request merges to the source branch. - Maintenance versions are allowed: publishing
1.4.3after2.0.0exists creates the release, but it does not become the head of a channel that already carries a higher version. - Git sync converges on the current commit: when several commits land before a pull sync runs, intermediate commits may be skipped and only the resulting
spec.versionis published. - Any service, release channel, promotion pipeline or blueprint referenced by the source must already exist. A blueprint that first appears in a pull request has no existing blueprint to preview against, so the pull request check reports it as skipped and its first release is published when the pull request merges.
Publishing from source versus importing a release
Settingspec.version publishes from the synced source. To bring an existing release to another hub without a source repository, export it and import the document as-is:
unchanged, different content under the same version is a conflict. It never activates a channel or installation; promote the release afterwards with ryvn promote release --blueprint=redis --version=1.4.0 --target=<channel>. A blueprint whose releases are created or imported this way must stay outside the paths that git sync manages, because a synced source would otherwise republish and overwrite the manual definition.
Composing blueprints
Aninstallations entry is either a service (service:) or another blueprint (blueprint:). A blueprint: entry installs the named blueprint as a child, so you can assemble a bundle from smaller reusable blueprints instead of re-declaring their services. Consumers install the parent like any other blueprint (see BlueprintInstallation); the children come with it.
Passing inputs down
Each entry in a child’sinputs list sets one of the child blueprint’s inputs, using either a literal value or valueFromInput to forward one of the parent’s inputs. Forwarded secret inputs stay in the secrets system end to end; a secret parent input cannot feed a non-secret child input.
valueFromOutput is not supported as a child input source. If a child needs a value produced by another installation, re-expose that value through the producing blueprint’s outputs and consume it from there.
Consuming child outputs
Sibling installations read a child’s outputs withvalueFromOutput and blueprintInstallation: <alias>, as in the example above. Non-secret outputs are also available in templates as {{ (blueprintInstallation "db").outputs.<name> }}. The parent can re-expose a child output in its own outputs:
Release selection
A child follows the head of a release channel. The channel is resolved in order: the child entry’sreleaseChannel (or branch), then the channel the parent installation is on, then the environment’s default channel. Blueprints from the marketplace or another organization’s catalog follow that organization’s stable channel, and a private blueprint owned by another organization requires an accepted share.
Naming
The child installation gets thename you set (default: the blueprint’s name), with no automatic prefix. All service installations in an environment share one name namespace and a collision fails the install, so template child names with {{ ParentInstallationName }} to keep each parent’s children unique.
Lifecycle
Children install, upgrade, and uninstall with the parent. Each child is its own blueprint installation, linked to its parent in the dashboard and inryvn describe blueprint-installation. Editing a child installation directly excludes it from future parent updates; it shows as “excluded from blueprint updates”.
Blueprints can nest up to 3 levels deep, and cycles are rejected. On a child entry,
releaseChannel and branch are mutually exclusive.Properties
name
string — required
Unique identifier for this blueprint. Used to reference the blueprint from environments.
description
string — required
Detailed description of what this blueprint provides and its purpose.
displayName
string — optional
Human-readable name displayed in the UI. If not provided, the name is used.
distribution
string — optional, default private
How the blueprint is published. One of:
private: visible only to the owning organization. Share it with other organizations through a resource share; consumers install it on the release channel the share names.marketplace-unmanaged: listed in the Blueprint Marketplace without Ryvn maintenance guarantees.marketplace-managed: listed in the marketplace and maintained by Ryvn.
version
string — optional
Exact SemVer version (X.Y.Z with an optional pre-release suffix) to publish the next release under. Omit to number releases automatically. See Release versions.
promotionPipeline
string — optional
Name of the promotion pipeline to apply to this blueprint. All releases of this blueprint will follow the pipeline’s promotion paths.
branches
array — optional
Configures per-branch release lines. See Branch deployments.
branches[].name
string — required
Name of the git branch. Each entry auto-creates a corresponding branch:{name} release channel; subscribe a BlueprintInstallation via its branch field.
installations
array — required
List of installations included in this blueprint. Each entry installs either a service (service) or a nested blueprint (blueprint). See Composing blueprints.
installations[].service
string — required for service entries
Name of the service to include in this blueprint.
installations[].blueprint
string — required for blueprint children
Name of the blueprint to install as a nested child. See Composing blueprints.
installations[].releaseChannel
string — optional, blueprint children only
Release channel the child follows. If not set, the child uses the parent installation’s channel, then the environment’s default channel. Mutually exclusive with branch.
installations[].branch
string — optional, blueprint children only
Branch release line the child follows (see Branch deployments). Mutually exclusive with releaseChannel.
installations[].inputs
array — optional, blueprint children only
Values for the child blueprint’s inputs. Each entry has a name and exactly one of value (a literal) or valueFromInput (forward a parent input).
installations[].excludedInstallations
array — optional, blueprint children only
Names of installations inside the child blueprint to skip, like excludedInstallations on a BlueprintInstallation.
installations[].name
string — optional
Custom name for this installation. If not provided, the service or blueprint name is used.
installations[].alias
string — optional
A stable reference handle for this installation within the blueprint, used by sibling valueFromOutput references and serviceInstallation / blueprintInstallation template functions. Defaults to name (or the service name when name is not set).
Use alias when the installation name is dynamic (contains template expressions) or when conditional installations (e.g. different Terraform modules per cloud provider) should be referenced the same way by siblings:
alias, each conditional installation would have a different reference handle, forcing consumers to duplicate the provider condition in every reference.
installations[].namespace
string — optional
Kubernetes namespace to install the service into. If not provided, uses the environment’s default namespace, which has the same name as the environment. Cannot be changed after install. See Namespaces.
installations[].condition
string — optional
Condition expression that determines whether this installation should be created. Supports template syntax with comparison operators.
installations[].config
string or array — optional
Configuration for the service installation. Can be a YAML string or array of config items. Supports templating with blueprint inputs.
installations[].lifecycle
object — optional
Lifecycle hooks for an installation declared inside this blueprint. See
Job installation › lifecycle for the full
field reference.
installations[].dependencies
array — optional
Installation dependencies for a service child. The child’s first install waits
until each entry is ready. Entries use the same serviceInstallation and
service keys as a standalone installation (see
server › dependencies); a
serviceInstallation value may be a sibling child’s alias or name, which
resolves to that child’s installation name. Values support blueprint
templating. Not supported on nested blueprint: children. See
Installation Dependencies.
installations[].secrets
array — optional
List of secrets for the service installation. Secrets can be generated or populated from blueprint inputs.
installations[].secrets[].name
string — required
The name of the Kubernetes secret to create.
installations[].secrets[].generated
object — optional
Configuration for auto-generating secret values. Cannot be used with values.
random-string— Generate a random alphanumeric stringrandom-bytes— Generate random bytes (base64 encoded)rsa-key— Generate an RSA key pairec-key— Generate an EC key pair
length property is only applicable for random-string and random-bytes types.
installations[].secrets[].values
array — optional
List of individual secret key-value pairs. Each value can reference a blueprint input or generated input.
installations[].secrets[].valueFromInput
string or object — optional
Reference the entire secret value from a blueprint input. The input must be of type map and marked with isSecret: true. For generated string inputs, use values instead.
installations[].env
array — optional
List of environment variables to pass to the service at runtime.
installations[].env[].key
string — required
The name of the environment variable.
installations[].env[].value
string — optional
The static value of the environment variable.
installations[].env[].valueFromInput
string or object — optional
Reference the value from a blueprint input.
installations[].env[].valueFromOutput
object — optional
Reference an output value from a sibling service installation or blueprint installation within the same blueprint. Use the sibling’s alias (or name) as the reference handle.
Exactly one of
serviceInstallation or blueprintInstallation must be specified.
inputs
array — optional
List of input parameters that can be configured when installing the blueprint.
inputs[].name
string — required
Unique identifier for this input parameter.
inputs[].type
string — required
Type of the input parameter. Valid values: string, number, boolean, array, map
inputs[].isSecret
boolean — optional (default: false)
Whether this input contains sensitive data.
inputs[].displayName
string — optional
Human-readable name displayed in the UI. If not provided, the name is used.
inputs[].description
string — optional
Detailed description of what this input is for.
inputs[].default
any — optional
Default value for the input. If not provided, the input is required at install time.
inputs[].group
string — optional
Name of the input group this input belongs to. Inputs in the same group are displayed together.
inputs[].condition
string — optional
Condition expression that determines whether this input should be displayed. Supports template syntax.
inputs[].hidden
boolean — optional (default: false)
Hides this input from the Dashboard installation form. Useful for internal configuration values like system defaults or automation-managed settings.
Hidden inputs can still be set when installing a blueprint via the API or IaC (Resources as Code).
inputs[].generated
object — optional
Configuration for auto-generating input values. Generated inputs are automatically populated when the blueprint is installed. Useful for credentials, API keys, or unique identifiers.
random-string— Generate a random alphanumeric stringrandom-bytes— Generate random bytes (base64 encoded)rsa-key— Generate an RSA key pairec-key— Generate an EC key pair
length property is only applicable for random-string and random-bytes types.
Generated values are preserved across blueprint updates. Users can force regeneration from the Dashboard if needed.
inputs[].defaultFrom
object — optional
Pull the default value from an environment-scoped variable group when the blueprint is installed and no explicit value is provided. Only valid for map type inputs with isSecret: true. Mutually exclusive with default and generated.
defaultFrom is installed into an environment, the system looks up the named variable group in that environment and uses its key-value pairs as the input value. If no variable group with that name exists, the input remains unset and must be provided explicitly.
inputs[].defaultFrom.variableGroup
string — required
Name of the variable group in the target environment. The group must exist when the blueprint is installed.
outputs
array — optional
List of outputs exposed by this blueprint. Outputs let blueprint consumers reference values produced by the blueprint’s underlying service installations (e.g., terraform outputs like database endpoints or connection strings).
Non-secret outputs are available via template syntax: {{ (blueprintInstallation "name").outputs.<outputName> }}. All outputs (including secrets) can be consumed via valueFromOutput.
outputs[].name
string — required
Unique identifier for this output within the blueprint.
outputs[].type
string — required
Type of the output value. Valid values: string, number, boolean.
outputs[].from
string — required
Template expression that resolves the output value from installation outputs. Uses the serviceInstallation function to reference outputs: (serviceInstallation "name").outputs.<key>.
outputs[].description
string — optional
Detailed description of what this output represents.
outputs[].displayName
string — optional
Human-readable name displayed in the UI.
outputs[].isSecret
boolean — optional (default: false)
If true, this output contains sensitive data. Secret outputs are routed through the secrets system — they are encrypted at rest, masked in the UI, and never rendered into plaintext manifests or resource reports.
Secret outputs are not available via template syntax. They must be consumed via valueFromOutput in env vars or secrets definitions.
outputs[].condition
string — optional
Condition expression that determines whether this output is available. Uses template syntax with blueprint functions.
skipped.
inputGroups
array — optional
Groups for organizing inputs in the UI.
inputGroups[].name
string — required
Unique identifier for this input group.
inputGroups[].displayName
string — required
Display name shown in the UI.
inputGroups[].description
string — optional
Description for the group.
inputGroups[].condition
string — optional
Condition expression that determines whether this group should be displayed. If false, all inputs in the group are hidden.
Blueprint installation inputs
When installing a blueprint, you provide values for the blueprint’s defined inputs. Each input value can be set using one of the following options:inputs[].value
any — optional
A literal value for the input.
inputs[].valueFromVariableGroup
object — optional
Reference an environment-scoped variable group by name. Only valid for map type inputs with isSecret: true.
valueFromVariableGroup is the explicit installation-time equivalent of defaultFrom on the blueprint input definition. Use defaultFrom when you want the variable group to be the fallback when no value is provided, and use valueFromVariableGroup when you want to explicitly bind the input to a variable group.inputs[].valueFromVariableGroup.name
string — required
Name of the variable group in the target environment.
inputs[].valueFromVariableGroup.key
string — optional
The specific key to get from the variable group. If not specified, the entire variable group key-value map is used. When a key is specified, only that key’s value is used as the input value.
Examples
Basic blueprint
Package multiple services together:Blueprint with inputs
Allow configuration at install time:Blueprint with conditional inputs
Show inputs based on other input values:Blueprint with generated inputs
Auto-generate credentials and tokens:Blueprint with variable group defaults
Use environment-scoped variable groups as default values for secret map inputs. This allows each environment to provide its own credentials through a variable group with a consistent name:db-credentials variable group in the target environment and uses its key-value pairs. You can override this at install time:
Provider-specific configuration
Configure services differently based on cloud provider:Multi-tier application
Complex blueprint with multiple conditional features:Blueprint with outputs
Expose values from underlying installations for other services to consume:valueFromOutput:
Storage configuration by provider
Demonstrate provider-specific storage configurations:Branch-based deployments
Maintainmain and develop release lines side by side:
main produce releases on the branch:main channel; pushes to develop produce releases on branch:develop. Each environment subscribes to whichever branch it should track.