> ## Documentation Index
> Fetch the complete documentation index at: https://upstash.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Keep Alive

When `keepAlive` is enabled, the box stays on between sessions instead of auto-pausing when idle. Use it when you need a box to remain continuously available, for example to host a server, keep a long-running agent ready, or preserve an always-on development environment.

For most workloads, the default Box lifecycle is still the better choice. Boxes auto-pause when idle and are more cost-efficient for bursty workloads unless `keepAlive` is enabled.

***

## Create a keep-alive box

Use `keepAlive: true` when creating the box:

<CodeGroup>
  ```typescript box.ts theme={"system"}
  import { Box } from "@upstash/box"

  const box = await Box.create({
    runtime: "node",
    size: "medium",
    keepAlive: true,
  })
  ```

  ```python box.py theme={"system"}
  from upstash_box import Box

  box = Box.create(
      runtime="node",
      size="medium",
      keep_alive=True,
  )
  ```
</CodeGroup>

You can combine keep-alive with all normal Box features, including agent, git, shell, filesystem, public URLs, and snapshots.

***

## Sizes and specs

Boxes with `keepAlive` enabled use the same Box sizes as any other box. Pick the size with the `size` option when creating the box or in the Console during box creation.

| Size     | CPU    | Memory | Storage |
| -------- | ------ | ------ | ------- |
| `small`  | 2 vCPU | 4 GB   | 5 GB    |
| `medium` | 4 vCPU | 8 GB   | 10 GB   |
| `large`  | 8 vCPU | 16 GB  | 20 GB   |

The selected size determines the box's available CPU, RAM, and workspace storage whether `keepAlive` is enabled or not.

***

## Lifecycle differences

|                    | Default behavior                                 | With `keepAlive: true`                                    |
| ------------------ | ------------------------------------------------ | --------------------------------------------------------- |
| **Idle behavior**  | Auto-pauses when idle                            | Stays on                                                  |
| **Pause / resume** | Supported                                        | Not supported                                             |
| **Best for**       | Bursty workloads, task runners, on-demand agents | Always-on servers, long-running agents, warm environments |
| **Billing model**  | Active usage based                               | Open-time / always-on based                               |

If you do not need the box to remain continuously available, keep `keepAlive` disabled.

***

## Init command

Boxes with `keepAlive` enabled can run a startup command whenever the box starts.

<CodeGroup>
  ```typescript box.ts theme={"system"}
  const box = await Box.create({
    runtime: "node",
    keepAlive: true,
    initCommand: "npm install && npm run dev",
  })
  ```

  ```python box.py theme={"system"}
  box = Box.create(
      runtime="node",
      keep_alive=True,
      init_command="npm install && npm run dev",
  )
  ```
</CodeGroup>

This is useful for:

* starting a web server
* launching a background process
* preparing a long-running agent environment
* restoring a development workflow automatically after the box starts

You can also manage the init command after creation:

<CodeGroup>
  ```typescript box.ts theme={"system"}
  await box.setInitCommand("npm run dev")

  const command = await box.getInitCommand()
  await box.deleteInitCommand()

  console.log(box.keepAlive) // true
  ```

  ```python box.py theme={"system"}
  box.set_init_command("npm run dev")

  command = box.get_init_command()
  box.delete_init_command()

  print(box.keep_alive)  # True
  ```
</CodeGroup>

Init command management is only available when `keepAlive` is enabled.

***

## Console

In the Upstash Console you can:

* enable **Keep alive** while creating a box
* choose the box **Size**
* manage the **Init Command** later from the box settings page

***

## When to use keep alive

Use keep-alive when the box itself needs to stay available between requests:

* hosting a dev server or app with a public URL
* keeping an agent warm for low-latency use
* preserving a long-running environment with startup automation

Avoid keep-alive when you only need a reusable workspace. In those cases, the default box lifecycle plus [Snapshots](/box/overall/snapshots) is usually enough.
