# Template nodes

These sections describe the nodes available in templates and the fields that each node accepts. Node availability depends on your account and template type. Release flows and preview blueprints support different subsets of nodes.

The nodes are divided into the following categories:

- Flow control  sets the order in which nodes run.

- Team resources  manage projects, cloud integrations, and other account resources.

- Project resources  manage services, jobs, addons, and other resources within a project.

- Actions  start operations such as builds, job runs, or commands.

- Messages  send notifications to Slack, webhooks, or pull requests.

- Conditions  wait for a resource state, an operation result, or approval.

### Resource update modes

Supported resource nodes offer an Update mode control, including project, service, job, and addon nodes. The available nodes depend on the template type.

| Update mode | JSON value | Behavior on each run |
| --- | --- | --- |
| Put (create or replace) | `put` | Creates a missing resource or replaces an existing resource's configuration with the supplied specification. |
| Patch (partial update) | `patch` | Updates supplied fields on an existing resource. Fails if the resource does not exist. |
| Create only | `create` | Creates a missing resource. Skips the node without changing the resource if it already exists. |

A skipped `create` node does not return the existing resource's outputs. If later nodes need that resource, use its known identifiers or template arguments instead of the skipped node's output reference.

For nodes with `updateMode`, `name` identifies the resource to create or update. Changing it targets a different resource rather than renaming the existing resource. For `patch`, keep the existing resource's `name`.

> [!note] Requirements
>
> You will need the following to get started:
>
> - For project resources, the correct [project context](create-a-template#set-project-context) on the node or inherited from a workflow
> - For `patch`, any additional fields required for the resource's PATCH operation, even if their values do not change
> - For `put` and `create`, the full specification required to create the resource

Required PATCH fields also apply to API PATCH requests. Beyond these required fields, supply only the fields that you want to change. PATCH preserves fields outside the supplied values. Only fields that the resource allows you to update can change.

> [!warning] Before saving an update
>
> Review the fields that the node will replace before saving. Supplied arrays and some object fields replace the whole value. With `put`, omitted configurable fields can reset or clear. If [automatic runs](run-a-template#run-a-template-automatically) are enabled, saving changes runs the template immediately.

In the node's code view, set `updateMode` beside `kind` and `spec`. Use the lowercase values shown above. If you omit `updateMode`, Northflank uses `put`.

For example, this node updates the description of an existing project named `example-project`:

```json
{
  "kind": "Project",
  "updateMode": "patch",
  "spec": {
    "name": "example-project",
    "description": "Shared development environment"
  }
}
```

To set the mode in the visual editor:

1. Open the node's form in the visual editor.

2. For service nodes, expand Template.

3. Expand Advanced.

4. Select an Update mode.

5. Edit the specification for the chosen mode.

6. Review the node's code for unwanted values.

7. Click Save node.

8. Save the template to keep the change.

## Flow control nodes

Flow control nodes contain resource and action nodes, and determine in what order they are executed. You can click the switch button  in the workflow node to change to a parallel or sequential flow.

Sequential workflows run nodes in order and wait until each node succeeds or skips before starting the next. Parallel workflows run their nodes concurrently.

Workflows can be nested. For example, you can run two sequential workflows simultaneously within a parallel workflow, within another sequential workflow.

If a node contained in a workflow fails, the entire workflow will be marked as failed.

### Project context

Nodes inherit their workflow's [project context](create-a-template#set-project-context). To use a different project, set the context directly on a node or nested workflow.

- {object} Workflow node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofWorkflow
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the workflow node.

### Loop workflow

The Loop workflow (Experimental) node repeats a sequence of steps for each object in `spec.iterations`. It is available where the editor offers it. Set a unique `ref` for the loop. Add the repeated nodes to `spec.steps`.

Inside the loop, use its reference to read the current object's fields. For a loop with `ref: "regions"`, `${refs.regions.region}` reads the current object's `region` value. Iterations can run concurrently, while steps within each iteration run in sequence.

- {object} LoopWorkflow node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofLoopWorkflow
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the loop workflow node.

## Team resource nodes

Team resource nodes manage resources and integrations within your account. They do not require a project context to run.

The editor shows nodes available to your account and template type. Add the resource node in the visual editor. Open its form to configure it. Nodes that offer Update mode support the [resource update modes](#resource-update-modes).

| Kind | Description |
| --- | --- |
| Project | Create or update a project |
| BYOC integration | Create or update a cloud provider integration |
| BYOC cluster | Create or update a cluster and node pools |
| BYOC registry | Create or update a registry for build images |
| Domain | Add a domain to your account |
| Subdomain | Create or update a subdomain |
| Subdomain path | Create a path for routing on a subdomain |
| SSH identity | Configure SSH access to workloads |
| Workload identity | Configure workload access to cloud resources |
| Load balancer | Route TCP or UDP traffic to workloads |
| Egress IP | Configure a fixed IP address for outgoing traffic |
| Network policy | Control incoming and outgoing workload traffic |
| OpenTofu | Manage resources outside Northflank |
| Tag | Create or update a tag for resources |
| Custom plan | Create or update a custom resource plan |
| Secret inheritance | Merge multiple global secrets with priority ordering |
| Rollout strategy | Create or update a [canary rollout strategy](https://northflank.com/docs/v1/application/release/canary-rollouts) |

### Project

Full specification (put or create)

- {object} Project node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofProject
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  (multiple options: oneOf) required
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} Project patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofProject
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the Project node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### BYOC integration

Full specification (put or create)

- {object} BYOCIntegration node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofBYOCIntegration
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the BYOCIntegration node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} BYOCIntegration patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofBYOCIntegration
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the BYOCIntegration node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### BYOC cluster

Full specification (put or create)

- {object} BYOCCluster node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofBYOCCluster
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the BYOCCluster node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} BYOCCluster patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofBYOCCluster
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the BYOCCluster node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### BYOC registry

Use this node in a template to configure a [custom build registry](https://northflank.com/docs/v1/application/build/use-custom-build-registry). Select a supported cloud provider, integration, and region in the node form. This node is unavailable in release flows and preview environment templates.

Full specification (put or create)

- {object} BYOCRegistry node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofBYOCRegistry
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the BYOCRegistry node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} BYOCRegistry patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofBYOCRegistry
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the BYOCRegistry node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Domain

The Domain node adds a domain to your Northflank account in templates and preview environment templates. It does not register or purchase a domain. Supply the domain name in `spec.domain`.

Add the [DNS records requested by Northflank](https://northflank.com/docs/v1/application/domains/add-a-domain-to-your-account) at your DNS provider. Creating the node does not complete ownership verification. Use the [domain verification action](#verify-a-domain) after the records are available.

Repeated runs reuse domains that this template or preview environment created. They do not update the domain's configuration. The node fails if the domain already exists outside that template or environment. This node does not offer Update mode.

- {object} Domain node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofDomain
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the Domain node.

### Subdomain

Use this node to create a subdomain in templates and preview environment templates. Complete the domain and subdomain verification requirements before routing traffic. See [link a domain to a port](https://northflank.com/docs/v1/application/domains/link-a-domain-to-a-port) for service routing.

This node uses `spec.domain` and `spec.name` to identify the target subdomain. It does not offer Update mode.

- {object} Subdomain node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofSubdomain
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the Subdomain node.

### Subdomain path

- {object} SubdomainPath node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofSubdomainPath
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the SubdomainPath node.

### SSH identity

An SSH identity controls access through SSH keys. Use this node in a template to define the identity and its workload restrictions. See [SSH access](https://northflank.com/docs/v1/application/run/access-services-with-ssh) for connection requirements.

This node is unavailable in release flows and preview environment templates.

Full specification (put or create)

- {object} SSHIdentity node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofSSHIdentity
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the SSHIdentity node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} SSHIdentity patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofSSHIdentity
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the SSHIdentity node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Workload identity

A workload identity grants workloads access to cloud resources. Use this node in a template with [workload identity](https://northflank.com/docs/v1/application/bring-your-own-cloud/configure-workload-identity) enabled for your account. Configure the cloud integration, role, and workload restrictions in the node form.

This node is unavailable in release flows and preview environment templates.

Full specification (put or create)

- {object} WorkloadIdentity node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofWorkloadIdentity
- condition
  string one ofsuccess
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the WorkloadIdentity node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} WorkloadIdentity patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofWorkloadIdentity
- condition
  string one ofsuccess
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the WorkloadIdentity node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Load balancer

Use this node in a template to configure a [dedicated load balancer](https://northflank.com/docs/v1/application/network/configure-load-balancers) and its workload backends. It routes TCP or UDP traffic. This resource is separate from the cluster ingress load balancers used by ordinary HTTP service ports.

This node is unavailable in release flows and preview environment templates.

Full specification (put or create)

- {object} LoadBalancer node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofLoadBalancer
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the LoadBalancer node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} LoadBalancer patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofLoadBalancer
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the LoadBalancer node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Egress IP

An egress IP is an address for outgoing traffic. Use this node in a template to configure a [fixed egress IP](https://northflank.com/docs/v1/application/network/configure-egress-ips). Configure the region and workload selection in the node form.

This node is unavailable in release flows and preview environment templates.

Full specification (put or create)

- {object} EgressIp node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofEgressIp
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the EgressIp node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} EgressIp patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofEgressIp
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the EgressIp node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Network policy

Use this node in a template to define [network policies](https://northflank.com/docs/v1/application/network/configure-network-policies) for selected workloads on supported BYOC clusters. Configure the project and tag restrictions and the traffic rules in the node form. Network policies control incoming and outgoing traffic.

This node is unavailable in release flows and preview environment templates.

Full specification (put or create)

- {object} NetworkPolicy node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofNetworkPolicy
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the NetworkPolicy node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} NetworkPolicy patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofNetworkPolicy
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the NetworkPolicy node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### OpenTofu

Use this node to manage external cloud resources in templates and preview environment templates. Configure a supported provider and its credentials before running the node. See [manage external infrastructure](external-infrastructure) for provider configuration and examples.

OpenTofu uses its own plan and apply workflow and does not offer Update mode. Use [OpenTofuDestroy in a teardown workflow](configure-teardown-workflows#destroy-opentofu-resources) to remove resources that this node manages.

- {object} OpenTofu node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofOpenTofu
- condition
  string one ofsuccess
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the OpenTofu node.

### Tag

Full specification (put or create)

- {object} ResourceTag node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofResourceTag
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the ResourceTag node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} ResourceTag patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofResourceTag
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the ResourceTag node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Custom plan

Full specification (put or create)

- {object} CustomPlan node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofCustomPlan
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the CustomPlan node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} CustomPlan patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofCustomPlan
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the CustomPlan node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Secret inheritance

- {object} SecretInheritance node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofSecretInheritance
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the SecretInheritance node.

### Rollout strategy

A rollout strategy can be attached to a [deployment service](#deployment-service) or [combined service](#combined-service) node by setting `gradualRolloutStrategyId` in the node's `deployment` object.

Full specification (put or create)

- {object} RolloutStrategy node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofRolloutStrategy
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the RolloutStrategy node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} RolloutStrategy patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofRolloutStrategy
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the RolloutStrategy node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

## Project resource nodes

Project resource nodes manage services, jobs, addons, and other resources within a project. Use [action nodes](#action-nodes) to start builds, run jobs, or back up addons.

Project resource nodes require a [project context](create-a-template#set-project-context) to run. Set the context on the parent workflow. Nodes with a `spec.projectId` field also accept the context directly.

The editor shows nodes available to your account and template type. Add the resource node in the visual editor. Open its form to configure it. Nodes that offer Update mode support the [resource update modes](#resource-update-modes).

| Kind | Description |
| --- | --- |
| Combined service | Create or update a combined service |
| Build service | Create or update a build service |
| Deployment service | Create or update a deployment service |
| Harness | Create or update a cloud coding environment |
| Cron job | Create or update a cron job |
| Manual job | Create or update a manual job |
| Addon | Create or update an addon |
| External addon | Manage a resource through an external provider |
| Secret group | Create or update a secret group |
| Pipeline | Create or update a [pipeline](#pipeline-node) |
| Environment | Create or update an [environment](#environment-node) |
| Workflow template | Define a reusable [workflow](#workflow-template) |
| Preview blueprint | Define a [preview blueprint](#preview-blueprint) |
| Volume | Create or update a volume |

To enable CI/CD and build from private Git repositories you must have a [Git account linked to your Northflank team](https://northflank.com/docs/v1/application/getting-started/link-your-git-account). To deploy images from a private container registry you must add your [registry credentials to your team](https://northflank.com/docs/v1/application/run/save-registry-credentials).

### Combined service

A combined service builds code from a repository and deploys the resulting image. Configure its repository, build rules, and deployment in the node form.

You can attach a [canary rollout strategy](https://northflank.com/docs/v1/application/release/canary-rollouts) to the service by setting `gradualRolloutStrategyId` in the `deployment` object.

Full specification (put or create)

- {object} CombinedService node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofCombinedService
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- options
  {object}

- allowUnlinkingDomains
  (multiple options: oneOf) Allows the template to remove existing domain assignments from this service.

- boolean Allows the template to remove existing domain assignments from this service.
OR
- string A string containing one or more references that resolve to allows the template to remove existing domain assignments from this service.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the CombinedService node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} CombinedService patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofCombinedService
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- options
  {object}

- allowUnlinkingDomains
  (multiple options: oneOf) Allows the template to remove existing domain assignments from this service.

- boolean Allows the template to remove existing domain assignments from this service.
OR
- string A string containing one or more references that resolve to allows the template to remove existing domain assignments from this service.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the CombinedService node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Build service

After the build service node, add a Start build node to build an image during the run. Enable Wait for completion before using the image in later nodes. See [build rules](https://northflank.com/docs/v1/application/build/build-code-from-a-git-repository#build-from-a-repository) for builds triggered by repository changes.

Full specification (put or create)

- {object} BuildService node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofBuildService
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the BuildService node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} BuildService patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofBuildService
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the BuildService node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Deployment service

You can link a deployment service to a build service or deploy an image from a container registry. Select the source and image version in the node form. See [deployment sources](https://northflank.com/docs/v1/application/run/change-deployment-source) for build and registry choices.

You can attach a [canary rollout strategy](https://northflank.com/docs/v1/application/release/canary-rollouts) to the service by setting `gradualRolloutStrategyId` in the `deployment` object.

Full specification (put or create)

- {object} DeploymentService node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofDeploymentService
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- options
  {object}

- allowUnlinkingDomains
  (multiple options: oneOf) Allows the template to remove existing domain assignments from this service.

- boolean Allows the template to remove existing domain assignments from this service.
OR
- string A string containing one or more references that resolve to allows the template to remove existing domain assignments from this service.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the DeploymentService node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} DeploymentService patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofDeploymentService
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- options
  {object}

- allowUnlinkingDomains
  (multiple options: oneOf) Allows the template to remove existing domain assignments from this service.

- boolean Allows the template to remove existing domain assignments from this service.
OR
- string A string containing one or more references that resolve to allows the template to remove existing domain assignments from this service.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the DeploymentService node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Harness

A Cloud Harness is a cloud environment for coding agents. Use the Harness node in templates and preview environment templates where Cloud Harnesses are available to your account. Configure its deployment source, compute resources, and networking in the node form.

See [create a Cloud Harness](https://northflank.com/docs/v1/application/cloud-harness/quickstart) for setup and connection instructions.

Full specification (put or create)

- {object} Harness node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofHarness
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the Harness node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} Harness patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofHarness
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the Harness node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Cron job

You can deploy a job using an image from a container registry or one built by a Northflank build service.

To build the job image from source, link a Git repository. Add a Start build node to build the image during the template run.

Full specification (put or create)

- {object} CronJob node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofCronJob
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the CronJob node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} CronJob patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofCronJob
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the CronJob node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Manual job

You can deploy a job using an image from a container registry or one built by a Northflank build service.

To build the job image from source, link a Git repository. Add a Start build node to build the image during the template run.

Full specification (put or create)

- {object} ManualJob node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofManualJob
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the ManualJob node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} ManualJob patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofManualJob
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the ManualJob node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Addon

Use a secret group node to share an addon's connection details with workloads. Before a backup or restore, use a [condition node](#condition-nodes) to wait until the addon runs.

#### Fork an addon

You can fork an addon from an existing project or one created earlier in the template. Select a backup compatible with the target addon version. See [fork an addon](https://northflank.com/docs/v1/application/databases-and-persistence/fork-an-addon) for version requirements.

The `latest` choice uses the most recent backup. The node fails if no backup is available.

#### Upgrade an addon

To allow an upgrade, enable Upgrade on version mismatch or set `options.upgradeOnVersionMismatch: true` on the addon node. This control is disabled by default. Follow the [supported upgrade path](https://northflank.com/docs/v1/application/databases-and-persistence/upgrade-a-database) for the addon type.

Full specification (put or create)

- {object} Addon node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofAddon
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- options
  {object}

- upgradeOnVersionMismatch
  (multiple options: oneOf)

- boolean
OR
- string pattern.*\${.*}.*

- spec
  (multiple options: anyOf) requiredThe provisioner type of the addon
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} Addon patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofAddon
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- options
  {object}

- upgradeOnVersionMismatch
  (multiple options: oneOf)

- boolean
OR
- string pattern.*\${.*}.*

- spec
  (multiple options: anyOf) requiredThe provisioner type of the addon
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### External addon

Use this node in templates and preview environment templates to manage a resource through a supported external provider. Configure the provider integration, resource type, and resource values in the node form. See [external addon templates](https://northflank.com/docs/v1/application/databases-and-persistence/create-a-managed-external-addon#create-from-templates) for an example that links outputs to a secret group.

External addons use their own provisioning workflow and do not offer Update mode.

This node uses the parent workflow's project context.

- {object} ExternalAddon node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofExternalAddon
- condition
  string one ofsuccess
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the ExternalAddon node.

### Secret group

Use a secret group node to define shared values and link addon connection details to workloads. Keep sensitive values in [template secrets](create-a-template#provide-secrets-securely-to-a-template).

Full specification (put or create)

- {object} SecretGroup node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofSecretGroup
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the SecretGroup node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} SecretGroup patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofSecretGroup
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the SecretGroup node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Pipeline

Use this node to define a legacy pipeline, its stages, and nested release flow or preview templates. Configure the pipeline in its project context. For separate environments, workflows, and preview blueprints, use the [environment and template nodes](#environment-node).

Full specification (put or create)

- {object} Pipeline node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofPipeline
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the Pipeline node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} Pipeline patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofPipeline
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the Pipeline node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

### Volume

Use a volume node to configure persistent storage and its workload attachments. Attaching a volume can restart the affected workload. See [add a volume](https://northflank.com/docs/v1/application/databases-and-persistence/add-a-volume) for storage and attachment requirements.

Full specification (put or create)

- {object} Volume node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofVolume
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the Volume node.
- updateMode
  string Controls how the resource is created or updated on each template run. `put` (default) creates or fully replaces the resource. `create` only creates the resource and skips the node if it already exists. `patch` partially updates only the supplied fields on an existing resource.one ofput, create

Partial update (patch)

- {object} Volume patch node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofVolume
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the Volume node.
- updateMode
  string requiredPartially updates only the supplied fields on an existing resource.one ofpatch

## Environment node

The Environment node creates or updates an environment within a project. Its JSON kind is `ReleaseStage`. Set `spec.name` and `spec.position`, with a [project context](create-a-template#set-project-context) on the node or its parent workflow.

Use separate Workflow template and Preview blueprint nodes to define reusable automation. These nodes are available in templates, rather than inside release flows or preview environment templates. They do not offer Update mode.

- {object} ReleaseStage node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofReleaseStage
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the ReleaseStage node.

### References, arguments, and functions in nested templates

References, arguments, and functions within a nested workflow or preview blueprint normally resolve when that nested template runs. Prefix an expression with `template` to resolve it during the parent template run. Use the prefix for parent values needed in nested triggers and rich inputs.

For example:

- `"${template.refs.build.branch}"` uses the parent build node's branch.

- `"${template.args.SECRET}"` uses an argument from the parent template.

- `"${template.fn.randomString(64)}"` generates a value during the parent template run.

### Preview blueprint

Use a `PreviewBlueprint` node to create or update a preview blueprint in a project. Put the blueprint's configuration and root node inside the node's `spec`. See [preview blueprints](https://northflank.com/docs/v1/application/release/set-up-preview-blueprints) for triggers and environment creation.

- {object} PreviewBlueprint node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofPreviewBlueprint
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the PreviewBlueprint node.

### Workflow

Use a `WorkflowTemplate` node to create or update a reusable workflow in a project. Set `spec.stageId` to associate the workflow with an environment. See [configure workflows](https://northflank.com/docs/v1/application/release/configure-workflows) for workflow configuration and triggers.

- {object} WorkflowTemplate node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofWorkflowTemplate
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the WorkflowTemplate node.

## Action nodes

Action nodes start operations on existing resources, such as builds, job runs, backups, and domain verification. For operations that support it, enable Wait for completion before later nodes depend on the result.

In [preview blueprints](https://northflank.com/docs/v1/application/release/set-up-preview-blueprints), `runNodeOnce: "true"` skips a supported node after it succeeds for that environment. Failed nodes can run again. Moving the node or changing its reference can cause it to run again.

| Kind | Description |
| --- | --- |
| Run backup | Performs a backup on an addon |
| Import backup | Imports a backup into an addon from a URL or connection string |
| Job run | Runs a job with the specified configuration |
| Start build | Triggers a build in a service or job, from a branch or a specific commit |
| Run action | Performs the action contained within the node |

### Run backup

An addon must be in a running state to [run a backup](https://northflank.com/docs/v1/application/databases-and-persistence/backup-restore-and-import-data) successfully. Before the backup node runs, use a [condition node](#condition-nodes) to wait until the addon runs.

- {object} AddonBackup node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofAddonBackup
- condition
  string one ofsuccess
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- runNodeOnce
  (multiple options: oneOf)

- string one oftrue, false
OR
- string pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the AddonBackup node.

### Run job

Start a [job run](https://northflank.com/docs/v1/application/run/run-an-image-once-or-on-a-schedule). The job must have a build or image available.

- {object} JobRun node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofJobRun
- condition
  string one ofsuccess
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- runNodeOnce
  (multiple options: oneOf)

- string one oftrue, false
OR
- string pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the JobRun node.

### Import backup

Import a backup into an addon from a URL or live database connection. Use this to automate data seeding, cross-environment migrations, or disaster recovery workflows in templates, workflows, and preview blueprints. See [backup, restore, and import data](https://northflank.com/docs/v1/application/databases-and-persistence/backup-restore-and-import-data#import-a-backup) for the UI method.

Set `spec.importUrl` to a backup file URL or `spec.connectionString` to a live database connection string. Supply exactly one of these fields. Template import nodes do not accept file uploads.

By default, the node continues while the import runs. Enable Wait for completion to wait for a successful import. In JSON, set `condition: "success"` beside the node's `kind` and `spec`.

You can combine this with a `Run action` node to import and restore data in the same workflow.

- {object} AddonImport node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofAddonImport
- condition
  string one ofsuccess
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- runNodeOnce
  (multiple options: oneOf)

- string one oftrue, false
OR
- string pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the AddonImport node.

### Start build

You can trigger builds in build and combined services, and jobs that deploy from version control.

- {object} Build node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofBuild
- condition
  string one ofsuccess
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the Build node.

### Run action

The Run action node acts on services, jobs, addons, domains, and VCS (version control system) accounts.

| Kind | On resource |
| --- | --- |
| Restart | Service or addon |
| Execute command | Service or job |
| Restore addon from backup | Addon (with available backup) |
| Clone repository | Linked VCS account |
| Verify domain | Domain in your account |

Commands in action nodes do not invoke a shell by default. Learn more about [executing commands in action nodes](https://northflank.com/docs/v1/application/run/access-running-containers-locally#execute-commands-in-an-action-node).

- {object} Action node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofAction
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- runNodeOnce
  (multiple options: oneOf)

- string one oftrue, false
OR
- string pattern.*\${.*}.*

- spec
  (multiple options: oneOf) requiredThe specification for the Action node.

### Verify a domain

The domain verification action starts ownership verification for a domain already in your account. Add the DNS records requested by Northflank before running it. The action does not create records at your DNS provider.

In a Run action node, select Domain and Verify. Enable Wait for completion to wait for verification. In JSON, use the following structure:

```json
{
  "kind": "Action",
  "spec": {
    "kind": "Domain",
    "spec": {
      "type": "verify",
      "data": {
        "domain": "example.com"
      },
      "condition": "verified"
    }
  }
}
```

Without the condition, the action continues after starting verification. It does not wait for the domain to become verified. Use the [domain condition](#domain-verification) to wait for verification that is already in progress.

## Message node

A message node sends a notification when it runs. You can use it to report progress from a template, workflow, or preview blueprint.

| Kind | Description |
| --- | --- |
| Slack | Sends a message to Slack via a webhook or a [Slack integration](https://northflank.com/docs/v1/application/secure/manage-integrations) |
| Webhook | Sends a message to an arbitrary webhook URL |
| VCS | Comments on a pull request in a linked version control repository |

The message content supports template arguments, functions, and references, so you can include values such as a generated preview domain in the notification.

In [preview blueprints](https://northflank.com/docs/v1/application/release/set-up-preview-blueprints), set `runNodeOnce: "true"` to skip the message node after it succeeds for that environment. Failed nodes can run again. Moving the node or changing its reference can cause it to run again.

- {object} Message node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofMessage
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- runNodeOnce
  (multiple options: oneOf)

- string one oftrue, false
OR
- string pattern.*\${.*}.*

- spec
  (multiple options: oneOf) requiredThe specification for the Message node.

## Condition nodes

Condition nodes wait for a resource state or an operation result. In a sequential workflow, later nodes wait until the condition succeeds. In a parallel workflow, other nodes continue, but the workflow waits for the condition before it completes.

Use the node form to select a resource and condition. Set a timeout to limit how long the node waits. A failed condition or timeout fails the node.

| Kind | Description |
| --- | --- |
| Service | Wait until a service runs |
| Addon | Wait until an addon runs |
| Addon backup | Wait until an addon backup succeeds |
| Addon import | Wait until an addon import succeeds |
| BYOC cluster | Wait until a BYOC cluster runs |
| VCS | Wait until a Git repository clone succeeds |
| Build | Wait until a build succeeds |
| Job run | Wait until a job run succeeds |
| Domain | Wait until the domain is verified |

- {object} Condition node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofCondition
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  (multiple options: oneOf) requiredThe specification for the Condition node.

### Domain verification

The domain condition waits for an existing domain to become verified. It does not start verification or create DNS records. Start verification through the [domain action](#verify-a-domain) or the domain page before waiting for it.

In a condition node, select Domain and Domain is verified. Use `spec.kind: "Domain"`, `spec.spec.type: "verified"`, and `spec.spec.data.domain` for the domain name in JSON. A missing domain, a final verification failure, or an expired timeout causes the condition to fail.

### Approval

An Approval node waits until it receives the required approvals. Later nodes in a sequential workflow wait for approval. Other nodes in a parallel workflow can continue.

Set Number of approvals required in the form, or use a positive integer in `spec.amount`. Approve the node from the template run page to continue.

- {object} Approval node

- ref
  string An identifier that can used to reference the output of this node later in the template.
- kind
  string requiredThe kind of node.one ofApproval
- skipNodeExecution
  (multiple options: oneOf) If set to 'true', the execution of the node will be skipped.

- string If set to 'true', the execution of the node will be skipped.one oftrue, false
OR
- string A string containing one or more references that resolve to if set to 'true', the execution of the node will be skipped.pattern.*\${.*}.*

- spec
  {object} requiredThe specification for the Approval node.

## Next steps

- [Run a template: Run templates manually or automatically.](/v1/application/infrastructure-as-code/run-a-template)
- [Update a template: Update a template and resources within a project.](/v1/application/infrastructure-as-code/run-a-template#update-a-template)
- [GitOps on Northflank: Use templates and workflows in a Git repository to trigger changes to your config and resources.](/v1/application/infrastructure-as-code/gitops-on-northflank)
- [Share a template: Share templates with your team or the public.](/v1/application/infrastructure-as-code/share-a-template)
- [Manage template versions on Northflank: Use the template drafts system to review, accept, or reject proposed changes to your team's Northflank templates.](/v1/application/infrastructure-as-code/manage-template-versions)
