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

- Each `deploy` creates a new version and makes it active. Older versions are kept (25 by default) so you can `rollback <version-id>`.
- An upload that is byte-for-byte identical to the live artifact (same sprout, same `assets.json`, same `bindings.json`) is detected server-side and reported as a no-op — no new version.
- `sproutboat tail` shows recent request log lines. `sproutboat tail --sprout` streams the running process output, including `console.log` from your handler and any crash.

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

## Related

- [CLI reference — versions, rollback, tail](/reference/cli#deployment)
- [Platform limits](/platform/limits) — retained versions per project
