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

# CLI

> Install and use the Sevalla CLI to manage your infrastructure from the terminal.

The Sevalla CLI lets you deploy applications, manage databases, configure domains, monitor metrics, and more without leaving your terminal.

## Installation

<Tabs>
  <Tab title="Homebrew">
    ```bash theme={null}
    brew install sevalla-hosting/tap/sevalla
    ```
  </Tab>

  <Tab title="npm">
    Requires Node.js 22 or later.

    ```bash theme={null}
    npm install -g @sevalla/cli
    ```
  </Tab>

  <Tab title="Shell script">
    ```bash theme={null}
    bash <(curl -fsSL https://raw.githubusercontent.com/sevalla-hosting/cli/main/install.sh)
    ```
  </Tab>
</Tabs>

Windows binaries are available on the [releases page](https://github.com/sevalla-hosting/cli/releases).

## Authentication

### Interactive login

The `login` command opens your browser and authenticates via device authorization. No need to copy-paste tokens.

```bash theme={null}
sevalla login
```

Check your current authentication status or log out:

```bash theme={null}
sevalla auth status
sevalla logout
```

Credentials are stored at `~/.config/sevalla/credentials.json` with `0600` permissions.

### API token (CI/CD)

For non-interactive environments, set the `SEVALLA_API_TOKEN` environment variable:

```bash theme={null}
export SEVALLA_API_TOKEN="your-api-token"
sevalla apps list
```

Generate tokens from the [dashboard](https://app.sevalla.com/api-keys) or with the CLI:

```bash theme={null}
sevalla api-keys create --name "CI Token"
```

## Quick start

```bash theme={null}
# Log in
sevalla login

# List your applications
sevalla apps list

# Trigger a deployment
sevalla apps deployments trigger <app-id> --branch main

# View runtime logs
sevalla apps logs runtime <app-id>
```

## Commands

### Applications

```bash theme={null}
sevalla apps list                                    # List all applications
sevalla apps get <id>                                # Get application details
sevalla apps create --name myapp --source privateGit --cluster <id>
sevalla apps update <id> --display-name "My App"
sevalla apps delete <id>
sevalla apps activate <id>                           # Activate a suspended app
sevalla apps suspend <id>                            # Suspend an app
sevalla apps clone <id> --display-name "Clone" --cluster <id>
sevalla apps purge-cache <id>                        # Clear application cache
sevalla apps cdn-toggle <id>                         # Toggle CDN on/off
```

### Deployments

```bash theme={null}
sevalla apps deployments list --app-id <id>
sevalla apps deployments get <deployment-id> --app-id <id>
sevalla apps deployments trigger <app-id> --branch main
sevalla apps deployments rollback <app-id> --deployment-id <id>
sevalla apps deployments cancel <deployment-id> --app-id <id>
sevalla apps deployments logs <deployment-id> --app-id <id>
```

### Deployment hooks

```bash theme={null}
sevalla apps deployment-hook get <app-id>
sevalla apps deployment-hook enable <app-id>
sevalla apps deployment-hook disable <app-id>
sevalla apps deployment-hook regenerate <app-id>
```

### Processes

```bash theme={null}
sevalla apps processes list --app-id <id>
sevalla apps processes get <process-id> --app-id <id>
sevalla apps processes create <app-id> --name web --type web
sevalla apps processes update <process-id> --app-id <id> --instances 3
sevalla apps processes delete <process-id> --app-id <id>
sevalla apps processes trigger <process-id> --app-id <id>
```

### Domains

```bash theme={null}
sevalla apps domains list --app-id <id>
sevalla apps domains add <app-id> --name example.com
sevalla apps domains get <domain-id> --app-id <id>
sevalla apps domains update <domain-id> --app-id <id>
sevalla apps domains delete <app-id> <domain-id>
sevalla apps domains set-primary <app-id> <domain-id>
sevalla apps domains toggle <app-id> <domain-id>
sevalla apps domains refresh-status <app-id> <domain-id>
```

### Environment variables

```bash theme={null}
sevalla apps env-vars list --app-id <id>
sevalla apps env-vars create <app-id> --key MY_VAR --value "my value"
sevalla apps env-vars update <env-var-id> --app-id <id> --value "new value"
sevalla apps env-vars delete <app-id> <env-var-id>
```

### Networking

```bash theme={null}
# IP restrictions
sevalla apps ip-restriction get <app-id>
sevalla apps ip-restriction update <app-id> --type allow --ip-list "1.2.3.4,5.6.7.8"

# TCP proxies
sevalla apps tcp-proxies list --app-id <id>
sevalla apps tcp-proxies create <app-id> --port 3000
sevalla apps tcp-proxies delete <app-id> <tcp-proxy-id>

# Private ports
sevalla apps private-ports list --app-id <id>
sevalla apps private-ports create <app-id> --port 8080 --protocol TCP
sevalla apps private-ports delete <app-id> <private-port-id>
```

### Logs

```bash theme={null}
sevalla apps logs runtime <app-id>
sevalla apps logs access <app-id>
```

### Metrics

```bash theme={null}
sevalla apps metrics requests-per-minute <app-id>
sevalla apps metrics response-time <app-id>
sevalla apps metrics response-time-avg <app-id>
sevalla apps metrics status-codes <app-id>
sevalla apps metrics top-status-codes <app-id>
sevalla apps metrics top-countries <app-id>
sevalla apps metrics slowest-requests <app-id>
sevalla apps metrics top-pages <app-id>

# Process metrics
sevalla apps processes metrics cpu-usage <app-id> <process-id>
sevalla apps processes metrics cpu-limit <app-id> <process-id>
sevalla apps processes metrics memory-usage <app-id> <process-id>
sevalla apps processes metrics memory-limit <app-id> <process-id>
sevalla apps processes metrics instance-count <app-id> <process-id>
```

### Databases

```bash theme={null}
sevalla databases list
sevalla databases get <id>
sevalla databases create --name mydb --type postgresql --db-version 16 --cluster <id> --resource-type <id> --db-name mydb --db-password secret
sevalla databases update <id> --display-name "My DB"
sevalla databases delete <id>
sevalla databases activate <id>
sevalla databases suspend <id>
sevalla databases reset-password <id>
```

#### Backups

```bash theme={null}
sevalla databases backups list --db-id <id>
sevalla databases backups create <db-id>
sevalla databases backups delete <db-id> <backup-id>
sevalla databases backups restore <db-id> <backup-id>
```

#### Connections

```bash theme={null}
sevalla databases connections internal-list --db-id <id>
sevalla databases connections internal-create <db-id> --application-id <id>
sevalla databases connections internal-delete <db-id> <connection-id>
sevalla databases connections external-toggle <db-id>
```

#### Database metrics

```bash theme={null}
sevalla databases metrics cpu-usage <id>
sevalla databases metrics cpu-limit <id>
sevalla databases metrics memory-usage <id>
sevalla databases metrics memory-limit <id>
sevalla databases metrics storage-usage <id>
sevalla databases metrics storage-limit <id>
sevalla databases metrics all-storage <id>
sevalla databases metrics used-storage <id>
```

#### Database IP restriction

```bash theme={null}
sevalla databases ip-restriction get <db-id>
sevalla databases ip-restriction update <db-id>
```

### Static sites

```bash theme={null}
sevalla static-sites list
sevalla static-sites get <id>
sevalla static-sites create --name mysite --repository user/repo --branch main
sevalla static-sites update <id> --display-name "My Site"
sevalla static-sites delete <id>
sevalla static-sites purge-cache <id>
```

#### Static site deployments

```bash theme={null}
sevalla static-sites deployments list --site-id <id>
sevalla static-sites deployments get <deployment-id> --site-id <id>
sevalla static-sites deployments trigger <site-id> --branch main
sevalla static-sites deployments cancel <deployment-id> --site-id <id>
sevalla static-sites deployments logs <deployment-id> --site-id <id>
```

#### Static site domains

```bash theme={null}
sevalla static-sites domains list --site-id <id>
sevalla static-sites domains get <domain-id> --site-id <id>
sevalla static-sites domains add <site-id> --name example.com
sevalla static-sites domains update <domain-id> --site-id <id>
sevalla static-sites domains delete <site-id> <domain-id>
sevalla static-sites domains set-primary <site-id> <domain-id>
sevalla static-sites domains toggle <site-id> <domain-id>
sevalla static-sites domains refresh-status <site-id> <domain-id>
```

#### Static site environment variables

```bash theme={null}
sevalla static-sites env-vars list --site-id <id>
sevalla static-sites env-vars create <site-id> --key MY_VAR --value "my value"
sevalla static-sites env-vars update <env-var-id> --site-id <id>
sevalla static-sites env-vars delete <site-id> <env-var-id>
```

#### Static site logs and metrics

```bash theme={null}
sevalla static-sites logs access <site-id>

sevalla static-sites metrics requests-per-minute <site-id>
sevalla static-sites metrics response-time <site-id>
sevalla static-sites metrics response-time-avg <site-id>
sevalla static-sites metrics status-codes <site-id>
sevalla static-sites metrics top-status-codes <site-id>
sevalla static-sites metrics top-countries <site-id>
sevalla static-sites metrics slowest-requests <site-id>
sevalla static-sites metrics top-pages <site-id>
```

### Load balancers

```bash theme={null}
sevalla load-balancers list
sevalla load-balancers get <id>
sevalla load-balancers create --name "My LB" --cluster <id>
sevalla load-balancers update <id> --display-name "Updated LB"
sevalla load-balancers delete <id>

# Destinations
sevalla load-balancers destinations list --lb-id <id>
sevalla load-balancers destinations create <lb-id> --application-id <id>
sevalla load-balancers destinations delete <lb-id> <destination-id>
sevalla load-balancers destinations toggle <lb-id> <destination-id>

# Domains
sevalla load-balancers domains list --lb-id <id>
sevalla load-balancers domains add <lb-id> --name example.com
sevalla load-balancers domains delete <lb-id> <domain-id>
sevalla load-balancers domains set-primary <lb-id> <domain-id>
sevalla load-balancers domains toggle <lb-id> <domain-id>
sevalla load-balancers domains refresh-status <lb-id> <domain-id>
```

### Object storage

```bash theme={null}
sevalla object-storage list
sevalla object-storage get <id>
sevalla object-storage create --name mybucket --cluster <id>
sevalla object-storage update <id> --display-name "My Bucket"
sevalla object-storage delete <id>

# Objects
sevalla object-storage objects list --storage-id <id>
sevalla object-storage objects delete --storage-id <id>

# CORS policies
sevalla object-storage cors-policies list --storage-id <id>
sevalla object-storage cors-policies create <storage-id>
sevalla object-storage cors-policies update <cors-policy-id> --storage-id <id>
sevalla object-storage cors-policies delete <storage-id> <cors-policy-id>

# CDN domain
sevalla object-storage domain create <storage-id>
sevalla object-storage domain delete <storage-id>
```

### Pipelines

```bash theme={null}
sevalla pipelines list
sevalla pipelines get <id>
sevalla pipelines create --name "My Pipeline"
sevalla pipelines update <id> --display-name "Updated Pipeline"
sevalla pipelines delete <id>
sevalla pipelines promote <id>

# Preview
sevalla pipelines preview update <id>
sevalla pipelines preview enable <id>
sevalla pipelines preview disable <id>

# Stages
sevalla pipelines stages create <pipeline-id>
sevalla pipelines stages delete <pipeline-id> <stage-id>
sevalla pipelines stages add-app <pipeline-id> <stage-id> --application-id <id>
sevalla pipelines stages remove-app <pipeline-id> <stage-id> <app-id>
```

### Projects

```bash theme={null}
sevalla projects list
sevalla projects get <id>
sevalla projects create --name "My Project"
sevalla projects update <id> --display-name "Updated Project"
sevalla projects delete <id>
sevalla projects add-service <id> --service-id <service-id>
sevalla projects remove-service <id> <service-id>
```

### Docker registries

```bash theme={null}
sevalla docker-registries list
sevalla docker-registries get <id>
sevalla docker-registries create --name "My Registry" --url registry.example.com --username user --password secret
sevalla docker-registries update <id> --display-name "Updated Registry"
sevalla docker-registries delete <id>
```

### Webhooks

```bash theme={null}
sevalla webhooks list
sevalla webhooks get <id>
sevalla webhooks create --name "My Webhook" --url https://example.com/hook --events "deployment.started,deployment.completed"
sevalla webhooks update <id>
sevalla webhooks delete <id>
sevalla webhooks toggle <id>
sevalla webhooks roll-secret <id>

# Deliveries
sevalla webhooks deliveries list --webhook-id <id>
sevalla webhooks deliveries get <delivery-id> --webhook-id <id>
```

### API keys

```bash theme={null}
sevalla api-keys list
sevalla api-keys get <id>
sevalla api-keys create --name "My Key"
sevalla api-keys update <id> --name "Updated Key"
sevalla api-keys delete <id>
sevalla api-keys rotate <id>
sevalla api-keys toggle <id>
sevalla api-keys validate
```

### Global environment variables

```bash theme={null}
sevalla global-env-vars list
sevalla global-env-vars create --key GLOBAL_VAR --value "value"
sevalla global-env-vars update <id> --value "new value"
sevalla global-env-vars delete <id>
```

### Resources

```bash theme={null}
sevalla resources clusters                # List available clusters
sevalla resources database-resource-types # List database resource types
sevalla resources process-resource-types  # List process resource types
sevalla resources git-providers           # List Git providers
```

## Global flags

Every command supports these flags:

| Flag              | Description                                               |
| ----------------- | --------------------------------------------------------- |
| `--json`          | Output structured JSON for scripting and CI/CD pipelines. |
| `--api-url <url>` | Override the default API endpoint.                        |
| `--confirm`       | Skip confirmation prompts for destructive actions.        |
| `--version`       | Display the CLI version.                                  |
| `--help`          | Show help for any command.                                |

```bash theme={null}
# Example: pipe JSON output to jq
sevalla apps list --json | jq '.[].name'
```

## Shell completions

Enable tab completions for your shell:

<Tabs>
  <Tab title="Bash">
    ```bash theme={null}
    eval "$(sevalla completion bash)"
    ```
  </Tab>

  <Tab title="Zsh">
    ```bash theme={null}
    eval "$(sevalla completion zsh)"
    ```
  </Tab>

  <Tab title="Fish">
    ```bash theme={null}
    sevalla completion fish | source
    ```
  </Tab>
</Tabs>

Add the command to your shell profile to enable completions in every session.

## Environment variables

| Variable            | Description                                                                      |
| ------------------- | -------------------------------------------------------------------------------- |
| `SEVALLA_API_TOKEN` | API token for authentication. Overrides stored credentials from `sevalla login`. |
| `SEVALLA_API_URL`   | Override the default API endpoint.                                               |
