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

# disk-type

> Catalog resource that defines a persistent disk performance tier — provider, disk class, and per-region storage pricing for agent VMs.

A disk type is a platform-provided catalog resource that defines a persistent disk performance tier. Each [environment](/concepts/environments) can reference a disk type via its `disk_type_ref` field — this determines the storage tier and per-region cost for agent VMs.

Disk types are platform-managed builtins. They are immutable — you cannot create, modify, or delete them via [`murmur set`](/cli/set).

## Fields

| Name          | Type   | Required | Description                                                        |
| ------------- | ------ | -------- | ------------------------------------------------------------------ |
| `name`        | string | yes      | Unique identifier. DNS label format: `[a-z][a-z0-9-]{0,62}`.       |
| `description` | string | no       | Human-readable description shown in the dashboard. Max 1024 bytes. |
| `substrate`   | string | yes      | Cloud provider. Values: `GCP`, `AWS`. Must match the `spec` arm.   |
| `spec`        | object | yes      | Cloud-specific disk type details. Exactly one of `gce` or `aws`.   |

## GCE spec fields

Set `substrate: GCP` and provide `spec.gce`:

| Name            | Type   | Required | Description                                                                                          |
| --------------- | ------ | -------- | ---------------------------------------------------------------------------------------------------- |
| `gce.disk_type` | string | yes      | GCE disk type identifier (e.g. `pd-balanced`, `pd-ssd`, `pd-standard`).                              |
| `gce.regions`   | map    | yes      | Per-region pricing. Keyed by region string (e.g. `us-central1`). Each entry is a `DiskRegionConfig`. |

## AWS spec fields

Set `substrate: AWS` and provide `spec.aws`:

| Name              | Type   | Required | Description                                                                                        |
| ----------------- | ------ | -------- | -------------------------------------------------------------------------------------------------- |
| `aws.volume_type` | string | yes      | EBS volume type identifier (e.g. `gp3`, `io2`, `st1`).                                             |
| `aws.regions`     | map    | yes      | Per-region pricing. Keyed by region string (e.g. `us-east-1`). Each entry is a `DiskRegionConfig`. |

## DiskRegionConfig

Each entry in the `regions` map contains:

| Name                 | Type   | Required | Description                                                    |
| -------------------- | ------ | -------- | -------------------------------------------------------------- |
| `cost_per_gib_month` | double | yes      | Storage cost per GiB per month in USD. Must be greater than 0. |

## Examples

### Listing disk types

```bash theme={null}
murmur get disk-type
```

```
NAME                  SUBSTRATE  DESCRIPTION
murmur-pd-balanced    GCP        Balanced persistent disk
murmur-pd-ssd         GCP        SSD persistent disk
murmur-gp3            AWS        General purpose SSD (gp3)
```

### Reading a single disk type

```bash theme={null}
murmur get disk-type murmur-pd-balanced
```

### GCP disk type shape

```yaml theme={null}
name: murmur-pd-balanced
description: "Balanced persistent disk"
substrate: GCP
gce:
  disk_type: pd-balanced
  regions:
    us-central1:
      cost_per_gib_month: 0.10
    us-east1:
      cost_per_gib_month: 0.10
    europe-west1:
      cost_per_gib_month: 0.11
```

### AWS disk type shape

```yaml theme={null}
name: murmur-gp3
description: "General purpose SSD (gp3)"
substrate: AWS
aws:
  volume_type: gp3
  regions:
    us-east-1:
      cost_per_gib_month: 0.08
    us-west-2:
      cost_per_gib_month: 0.08
    eu-west-1:
      cost_per_gib_month: 0.088
```

## Errors

| Code               | Meaning                                                                               | What to do                                                                                  |
| ------------------ | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| `INVALID_ARGUMENT` | `name is required`                                                                    | Provide a `name` field.                                                                     |
| `INVALID_ARGUMENT` | `name must match [a-z][a-z0-9-]{0,62}`                                                | Use a lowercase DNS label for `name`.                                                       |
| `INVALID_ARGUMENT` | `description exceeds 1024 byte limit`                                                 | Shorten the `description` to 1024 bytes or fewer.                                           |
| `INVALID_ARGUMENT` | `substrate is required`                                                               | Set the `substrate` field to `GCP` or `AWS`.                                                |
| `INVALID_ARGUMENT` | `spec is required (gce or aws)`                                                       | Provide a `gce` or `aws` spec block.                                                        |
| `INVALID_ARGUMENT` | `substrate must be GCP for gce spec`                                                  | The `substrate` field does not match the `spec` arm. Set `substrate: GCP` when using `gce`. |
| `INVALID_ARGUMENT` | `substrate must be AWS for aws spec`                                                  | The `substrate` field does not match the `spec` arm. Set `substrate: AWS` when using `aws`. |
| `INVALID_ARGUMENT` | `gce.disk_type is required`                                                           | The GCE spec is missing `disk_type`.                                                        |
| `INVALID_ARGUMENT` | `gce.regions must be non-empty`                                                       | Provide at least one region entry in the GCE spec.                                          |
| `INVALID_ARGUMENT` | `gce.regions["<region>"].cost_per_gib_month must be > 0`                              | Every region entry needs a positive `cost_per_gib_month`.                                   |
| `INVALID_ARGUMENT` | `aws.volume_type is required`                                                         | The AWS spec is missing `volume_type`.                                                      |
| `INVALID_ARGUMENT` | `aws.regions must be non-empty`                                                       | Provide at least one region entry in the AWS spec.                                          |
| `INVALID_ARGUMENT` | `aws.regions["<region>"].cost_per_gib_month must be > 0`                              | Every region entry needs a positive `cost_per_gib_month`.                                   |
| `INVALID_ARGUMENT` | `platform disk types are reserved for builtins and cannot be written via the catalog` | Disk types are platform-managed. You cannot create or modify them.                          |

## Related

* [Environments and placements](/concepts/environments) — the resource that references a disk type via `disk_type_ref`
* [`murmur get`](/cli/get) — CLI command for reading catalog resources
* [placement](/catalog/placement) — catalog resource for cloud infrastructure targets
