---
title: "Adding applications to a cluster"
sidebar_label: "Adding applications"
description: "Deploy Marketplace applications to a Barbara cluster through the 6-step install wizard: select app, configure secrets and compose, choose deployment mode and replicas, set placement constraints, and apply the app config."
lastmod: "2026-05-12"
---

import VersionNotice from '@site/src/components/VersionNotice';
import { UpdateInProgressNotice } from '@site/src/components/VersionNotice';

<VersionNotice platformArticleVersion="v3.1.0" />
<!--
<UpdateInProgressNotice />
-->

## Overview

Deploying an application to a **cluster** uses the same Library + installation pattern as a single-node deployment, but the cluster installation wizard exposes two extra steps that are specific to Docker Swarm: **deployment mode + replicas** and **placement constraints**. This article walks through the six wizard steps and shows what the resulting cluster workload card looks like.

If you need to add a Marketplace application to your Library first, see [Add a Marketplace app to your Library](/platform/apps-and-models/add-a-marketplace-app-to-your-library/).

## Step 1 — Select application

Pick the Marketplace application and the version to install across the cluster. The form also exposes advanced toggles for initial behaviour after install.

:::tip

For security and compatibility, pick the **latest available version** unless you have a specific reason not to.

:::

<div style={{ maxWidth: '920px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/wizard_step_1.png').default} alt="Wizard step 1: select application and version" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Wizard step 1: select application and version
  </figcaption>
</div>

Wizard actions on this step: **Back**, **Next**, **Skip and send**.

## Step 2 — Configure App Secrets

Set the secrets the application needs (admin tokens, TLS material, credentials…). The exact fields are app-specific and documented in the app's README.

* Fill in the required fields (marked with an asterisk) and the optional ones you want.
* Use the inline info icons for per-field help.
* Use **Upload** / **Download** to import or export the full secret set in one click.

<div style={{ maxWidth: '920px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/wizard_step_2.png').default} alt="Wizard step 2: configure app secrets" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Wizard step 2: configure app secrets
  </figcaption>
</div>

## Step 3 — Configure Compose Config

Set the Docker ports and volumes for the services that make up the application. These values are exposed to every service in the stack and determine how the app is reachable from the rest of the network.

<div style={{ maxWidth: '920px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/wizard_step_3.png').default} alt="Wizard step 3: compose config" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Wizard step 3: compose config
  </figcaption>
</div>

## Step 4 — Deployment and Replicas

This step is **cluster-specific**. Pick how each service runs across the cluster and, when applicable, how many replicas.

Deployment modes:

* **Replicated** — schedules the specified number of replicas across eligible nodes.
* **Global** — runs exactly one task per eligible node.
* **Replicated Job** — runs a finite parallel job until it completes.
* **Global Job** — runs the job once on every eligible node.

When you pick **Replicated** or **Replicated Job**, set the **Number of replicas**. Each service in the app has its own tab so you can configure its strategy independently.

<div style={{ maxWidth: '920px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/wizard_step_4.png').default} alt="Wizard step 4: deployment and replicas" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Wizard step 4: deployment and replicas
  </figcaption>
</div>

## Step 5 — Placement Constraints

This step is **cluster-specific**. Restrict where the services may run by selecting one or more **node labels** declared when each node was added to the cluster.

Use cases:

* Schedule on nodes with specific hardware (GPU, more RAM, fast disk).
* Pin workloads to a geographic site or environment.
* Separate workloads by role.

<div style={{ maxWidth: '920px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/wizard_step_5.png').default} alt="Wizard step 5: placement constraints" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Wizard step 5: placement constraints
  </figcaption>
</div>

## Step 6 — Configure App Config

Provide the JSON application configuration. The schema is defined by the app — read its README for the available fields.

<div style={{ maxWidth: '920px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/wizard_step_6.png').default} alt="Wizard step 6: app config" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Wizard step 6: app config
  </figcaption>
</div>

Click **Send** to deploy. A workload card for the app appears on the Workloads tab of the cluster.

## Cluster workload card

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/Marketplace_app_card.png').default} alt="Cluster workload card" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Cluster workload card
  </figcaption>
</div>

The card centralises every operation on the deployed stack:

* **Activity** — pending commands and operations that finished with errors.
* **Status** — the stack state (for example, *deployed*) and a **New Version** button that re-opens the install wizard to update the app.
* **Services** — lists every service in the application with its tasks. Click into a service to open the *Tasks per service* popup for runtime detail.

<div style={{ maxWidth: '920px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/Task_per_service_popup.png').default} alt="Tasks per service popup" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Tasks per service popup
  </figcaption>
</div>

* **Config** — exposes the application configuration with quick access modals to the post-install editors.

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/Config_segment.png').default} alt="Config segment on the card" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Config segment on the card
  </figcaption>
</div>

From the Config segment you can re-open:

* **Placement Constraints**

<div style={{ maxWidth: '920px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/Placement_constrains_popup.png').default} alt="Placement constraints popup" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Placement constraints popup
  </figcaption>
</div>

* **Deployment and Replicas**

<div style={{ maxWidth: '920px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/Deployment_and_replicas_popup.png').default} alt="Deployment and replicas popup" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Deployment and replicas popup
  </figcaption>
</div>

* **App Config**
* **App Secrets**
* **Compose Config**

Use them to tune a running app without re-running the full wizard.

## Summary

Cluster installs run through the same Marketplace pattern as single-node installs plus two cluster-specific steps — **Deployment & Replicas** and **Placement Constraints** — that determine how many tasks run, where, and under what conditions. After deployment, the workload card lets you re-open each popup to adjust the stack without re-running the wizard.
