> For the complete documentation index, see [llms.txt](https://docs.zenml.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.zenml.io/stacks/stack-components/artifact-stores/digitalocean.md).

# DigitalOcean Spaces

The DigitalOcean Spaces Artifact Store is an [Artifact Store](/stacks/stack-components/artifact-stores.md) flavor provided with the DigitalOcean ZenML integration that uses [DigitalOcean Spaces](https://www.digitalocean.com/products/spaces) to store ZenML artifacts. Spaces exposes an [S3-compatible API](https://docs.digitalocean.com/products/spaces/reference/s3-compatibility/), so this flavor reuses ZenML's S3 implementation under the hood and only adds a `region` setting from which the Spaces endpoint URL is derived at runtime.

### When would you want to use it?

Running ZenML pipelines with [the local Artifact Store](/stacks/stack-components/artifact-stores/local.md) is usually sufficient if you just want to evaluate ZenML or get started quickly. However, the local Artifact Store becomes insufficient once you want to share pipeline results with teammates, run other stack components remotely (e.g. an orchestrator on DigitalOcean Kubernetes), or run production-grade pipelines at scale.

You should use the DigitalOcean Spaces Artifact Store when your infrastructure runs on DigitalOcean and you want your ZenML artifacts co-located with it — for example next to a DOKS cluster running the [Kubernetes orchestrator](https://docs.zenml.io/stacks/orchestrators/kubernetes). Because the integration speaks the S3-compatible Spaces API, you get the same workflow as the [S3 Artifact Store](/stacks/stack-components/artifact-stores/s3.md) without managing any additional tooling. Consider one of the other [Artifact Store flavors](/stacks/stack-components/artifact-stores.md#artifact-store-flavors) if you don't use DigitalOcean.

### How do you deploy it?

The DigitalOcean Spaces Artifact Store flavor is provided by the DigitalOcean ZenML integration. Install it on your local machine to be able to register the artifact store and add it to your stack:

```shell
zenml integration install digitalocean -y
```

You will also need a Space (bucket) and a set of Spaces access keys:

1. **Create a Space.** In the [DigitalOcean control panel](https://cloud.digitalocean.com/), go to **Spaces Object Storage** and create a bucket. Note the bucket name (this becomes the `s3://<bucket-name>` path used by ZenML) and the region slug shown in the bucket's endpoint (e.g. `nyc3`, `ams3`, `fra1`).
2. **Generate Spaces access keys.** Go to **Storage > Spaces Object Storage > Access Keys** and generate a new key pair. Spaces keys are separate credentials from your DigitalOcean API token; copy both the access key and the secret when they are displayed.

### How do you use it?

Register the artifact store with the bucket path (using the `s3://` scheme, since Spaces speaks the S3 API) and the region slug:

```shell
zenml artifact-store register do_spaces \
    --flavor=digitalocean \
    --path=s3://my-space \
    --region=fra1

# Register and set a stack that uses the new artifact store
zenml stack register do_stack -a do_spaces ... --set
```

The Spaces endpoint URL (`https://<region>.digitaloceanspaces.com`) is derived from the `region` at runtime and is not persisted in the component configuration. If you need to address a different endpoint (for example a custom domain), pass it explicitly instead — an explicit endpoint always takes precedence over the region-derived one:

```shell
zenml artifact-store register do_spaces \
    --flavor=digitalocean \
    --path=s3://my-space \
    --client_kwargs='{"endpoint_url": "https://fra1.digitaloceanspaces.com"}'
```

To authenticate, store the Spaces access keys in a [ZenML Secret](https://docs.zenml.io/getting-started/deploying-zenml/secret-management) and reference them on registration:

```shell
zenml secret create spaces_secret \
    --access_key_id='<YOUR_SPACES_ACCESS_KEY>' \
    --secret_access_key='<YOUR_SPACES_SECRET_KEY>'

zenml artifact-store register do_spaces \
    --flavor=digitalocean \
    --path=s3://my-space \
    --region=fra1 \
    --authentication_secret=spaces_secret
```

All other configuration options of the [S3 Artifact Store](/stacks/stack-components/artifact-stores/s3.md) (`client_kwargs`, `config_kwargs`, `s3_additional_kwargs`) are available on this flavor as well and are passed through to the underlying S3-compatible filesystem.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.zenml.io/stacks/stack-components/artifact-stores/digitalocean.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
