---
title: Deploy Progress Modal
description: Stream live output from stack deploy, install, update, restart, and stop operations in a structured log view.
---

When you trigger a stack action (Deploy, Install, Update, Stop, Restart, or Down), an optional progress modal opens and streams structured output from `docker compose` in real time. Each line is parsed into a timestamped row with a stage badge (PULL, BUILD, CREATE, START, STOP, etc.) so you can track the deployment lifecycle as it runs.

## Enabling deploy progress

The modal is opt-in. Go to **Settings > Appearance** and enable **Show deploy progress modal**. The setting is saved per browser and takes effect immediately without a reload.

## Using the modal

The modal opens automatically when you trigger an action. It stays centered on screen and does not block access to the rest of the UI.

### What the modal shows

- A **header** with the action name, stack name, and elapsed time
- A **status indicator** showing the current state (Connecting, streaming line count, Succeeded, or the error message)
- A **structured log body** with one row per output line, each tagged with a stage badge and timestamp
- A **footer** with a "Raw output" toggle and minimize/close controls

### Stage badges

Each log row carries a badge indicating what phase of the operation it came from:

| Badge | Meaning |
|-------|---------|
| PULL | Image layer being fetched from a registry |
| BUILD | Image build step running |
| CREATE | Container being created |
| START | Container starting |
| STOP | Container stopping |
| DOWN | Container or network being removed |
| WARN | Warning from Docker or compose |
| ERR | Error line |
| LOG | General output |

Error rows have a rose left border and a tinted background so they stand out without requiring a full scan of the log.

### Raw output toggle

Click **Raw output** in the footer to reveal the raw terminal view alongside the structured rows. This is useful when you want to see the full unprocessed Docker output, including progress bars and multi-line build steps that the parser collapses to single rows.

### Auto-close on success

When an action completes successfully, the modal closes automatically after a few seconds. Hover over the modal to pause the timer. Click the close button to dismiss it immediately.

### On failure

If the action fails, the modal stays open and highlights the error row in the log. The status indicator shows the error message. The modal remains open until you close it manually.

### Minimize to pill

Click **Minimize** to collapse the modal to a small status pill anchored at the bottom center of the screen. The pill shows the action and stack name with a color-coded status dot (cyan pulse for in-progress, green for success, rose for error). Click the pill to expand the modal back.

The pill survives navigation, so you can leave the App Store page mid-install and still see the status from any screen.

## Supported entry points

The progress modal fires for the following actions:

- Stack **Deploy**, **Update**, **Restart**, **Stop**, and **Down** from the stack editor
- **Install** from the App Store
- **Apply** from a Git Source panel (when the apply includes a deploy)

## Troubleshooting

<Accordion title="The modal shows 'Connecting...' and no rows appear">
Check that the WebSocket connection to Sencho is not blocked by an upstream proxy or firewall. Sencho uses a WebSocket on the same port and path as the main API. If you are running behind nginx or a reverse proxy, ensure `proxy_set_header Upgrade $http_upgrade;` and `proxy_set_header Connection "upgrade";` are configured. See the [configuration guide](/getting-started/configuration) for a complete nginx example.
</Accordion>

<Accordion title="The structured rows are empty but raw output shows content">
Some compose wrappers or custom Docker plugins emit non-standard output. The parser falls back to `LOG` rows for lines it cannot classify. If the structured view is empty, open Raw output to see the full stream.
</Accordion>

<Accordion title="I toggled the setting but nothing changed">
The setting is read from localStorage and updates in the current tab without a reload. If the change did not take effect, try refreshing the page.
</Accordion>
