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

# storage:push

> Upload a local file or folder to Cloudflare R2, Bunny, or S3.

Push a local file or folder to object storage. Talos reads the provider profile saved by [`credentials:create`](/cli/commands/credentials-create), expands `--from` into one or more objects, and uploads them under `--destination`.

## Usage

```bash theme={null}
talos storage:push [options]
```

## Examples

Push a folder to Cloudflare R2:

```bash theme={null}
talos storage:push --provider=cloudflare --from=dist --destination=my-bucket/site
```

Push one file to Amazon S3:

```bash theme={null}
talos storage:push --provider=s3 --from=dist/index.html --destination=site
```

Push one archive instead of individual files:

```bash theme={null}
talos storage:push --provider=bunny --from=dist --destination=releases --zip
```

Suppress progress and summary output:

```bash theme={null}
talos storage:push --provider=cloudflare --from=dist --destination=my-bucket/site --silent
```

## Options

| Option          | Description                                                                                   | Default             |
| --------------- | --------------------------------------------------------------------------------------------- | ------------------- |
| `--provider`    | Storage provider: `cloudflare` (`r2` alias), `bunny`, or `s3`.                                | Prompted if omitted |
| `--from`        | Local file or folder to push.                                                                 | Prompted if omitted |
| `--destination` | Bucket path the content lands under. For Cloudflare R2, the first segment is the bucket name. | Prompted if omitted |
| `--zip`         | Send one zip archive instead of individual files.                                             | `false`             |
| `--silent`      | Hide progress, per-object failures, and summary output.                                       | `false`             |
| `--cwd`         | Working directory used to resolve `--from`.                                                   | Current directory   |

## Providers

| Provider     | Credentials file                      | Destination handling                                                                             |
| ------------ | ------------------------------------- | ------------------------------------------------------------------------------------------------ |
| `cloudflare` | `~/.talos/credentials/cloudflare.yml` | `--destination` must start with the R2 bucket name, as in `my-bucket/assets`.                    |
| `bunny`      | `~/.talos/credentials/bunny.yml`      | `--destination` is used as the object key prefix.                                                |
| `s3`         | `~/.talos/credentials/s3.yml`         | The bucket comes from the credentials profile; `--destination` is used as the object key prefix. |

## What gets uploaded

A file uploads as one object under `--destination` with the file name appended. A folder uploads every file under it, using each file path relative to that folder. Directory entries are sorted by relative path before upload.

With `--zip`, Talos creates one in-memory zip archive. A folder named `dist` uploads as `dist.zip`; a file named `index.html` uploads as `index.html.zip` and is stored inside the archive as `index.html`.

## Output

Without `--silent`, Talos shows a loader while uploads run. On success it prints `Pushed N object(s) to <destination>`. If any object fails, it prints each failed key and message, prints a pushed/failed summary, and exits with code 1.
