---
title: Deploy lifecycle
description: "Versions, no-op detection, rollbacks, and how to watch a running sprout."
---

- Each `deploy` creates a new version and makes it active. The 25 most recent inactive versions are kept, so you can `rollback <version-id>` to any of them without rebuilding.
- An upload that is byte-for-byte identical to the live artifact (same sprout, `assets.json` and `bindings.json`) is reported as a no-op and creates no version.
- `sproutboat versions list` shows the versions; `sproutboat versions view <version-id>` shows one version's artifact and bindings.
- `sproutboat tail` shows recent request log lines. `sproutboat tail --sprout` shows the running process's output instead, including `console.log` from your handler, broker output and crashes.

:::warning
A crashing sprout returns `502` from the edge. Check `sproutboat tail --sprout`.
:::

## Related

- [CLI reference: ship](/docs/reference/cli#ship)
- [Platform limits](/docs/platform/limits)
