# Vendor Configuration

The `vendor` section in `atmos.yaml` configures how Atmos discovers and processes vendor manifest files for dependency management.

## Configuration

**File:** `atmos.yaml`

```yaml
vendor:
  # Path to vendor manifest file or directory
  base_path: vendor.yaml

  # Configure output format for vendor list command
  list:
    format: table
    columns:
      - name: Component
        value: "{{ .component }}"
      - name: Version
        value: "{{ .version }}"
      - name: Source
        value: "{{ .source }}"

  # Global retry configuration for vendor operations (optional)
  retry:
    max_attempts: 3
    initial_delay: 2s
    max_delay: 30s
    backoff_strategy: exponential
```

## Configuration Reference

- **`base_path`**

  Path to the vendor manifest file or directory containing vendor files. Can be a single `vendor.yaml` file or a directory containing multiple `.yaml` files.

  When a directory is specified, all `.yaml` files in the directory are processed in lexicographical order.

  **Default:** `vendor.yaml`

  Examples:
  - `vendor.yaml` - Single manifest file
  - `./vendor.yaml` - Explicit relative path
  - `vendor/` - Directory containing multiple manifests
- **`list.format`**

  Output format for the `atmos vendor list` command.

  **Valid values:** `table`, `json`, `csv`
  **Default:** `table`
- **`list.columns`**

  Custom column definitions for table output. Each column has a `name` (header) and `value` (Go template expression).

  Available template variables:
  - `{{ .component }}` - Component name
  - `{{ .source }}` - Source URL
  - `{{ .version }}` - Version tag
  - `{{ .targets }}` - Target paths
  - `{{ .tags }}` - Associated tags
- **`retry`**

  Global retry configuration for vendor operations. These settings apply to all vendor sources unless overridden at the source level.

  Retry is useful for handling transient network errors, rate limiting, and other temporary failures when downloading from remote repositories.
  - **`retry.max_attempts`**
    Maximum number of retry attempts. 
    **Default:**
     
    `3`
  - **`retry.initial_delay`**
    Initial delay before the first retry. 
    **Default:**
     
    `2s`
  - **`retry.max_delay`**
    Maximum delay between retries. 
    **Default:**
     
    `30s`
  - **`retry.backoff_strategy`**
    Strategy for increasing delay between retries. 
    **Values:**
     
    `exponential`
    , 
    `linear`
    , 
    `constant`
    . 
    **Default:**
     
    `exponential`
  - **`retry.multiplier`**
    Multiplier for exponential backoff. 
    **Default:**
     
    `2.0`
  - **`retry.random_jitter`**
    Random jitter factor (0.0-1.0) to add randomness to delays. 
    **Default:**
     
    `0.1`
  - **`retry.max_elapsed_time`**
    Maximum total time for all retry attempts. 
    **Default:**
     
    `5m`

## Vendor Manifest Structure

The vendor manifest file defines external dependencies to pull into your project:

**File:** `vendor.yaml`

```yaml
apiVersion: atmos/v1
kind: AtmosVendorConfig
metadata:
  name: my-project-vendor
  description: Vendor dependencies for my project
spec:
  imports:
    - vendor/common.yaml
  sources:
    - component: vpc
      source: github.com/cloudposse/terraform-aws-vpc.git//src?ref={{.Version}}
      version: 1.0.0
      targets:
        - components/terraform/vpc

    - component: eks
      source: github.com/cloudposse/terraform-aws-eks-cluster.git?ref={{.Version}}
      version: 2.0.0
      targets:
        - components/terraform/eks
      included_paths:
        - "**/*.tf"
      excluded_paths:
        - "examples/**"
```

## Multiple Manifest Files

You can organize vendor configurations across multiple files:

```
vendor/
├── aws.yaml        # AWS-related components
├── kubernetes.yaml # Kubernetes components
└── common.yaml     # Shared dependencies
```

**File:** `atmos.yaml`

```yaml
vendor:
  base_path: vendor/
```

Atmos processes files in alphabetical order: `aws.yaml`, then `common.yaml`, then `kubernetes.yaml`.

## Related Commands

## Try It

Explore a working example that demonstrates vendor configuration.

## Related

- [Vendor Configuration Reference](/vendor/vendor-config)
