Skip to content
30 changes: 29 additions & 1 deletion documentation/provider/digitalocean.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,14 @@ Example:
```
{% endcode %}

The [creds.json](../commands/creds-json.md#example-commands) page in the docs explains how you can generate this dynamically so you can pull the secret token from 1Password or the vault of your choosing.

## Metadata

This provider does not recognize any special metadata fields unique to DigitalOcean.

## Usage

An example configuration:

{% code title="dnsconfig.js" %}
Expand All @@ -34,10 +38,34 @@ D("example.com", REG_NONE, DnsProvider(DSP_DIGITALOCEAN),
{% endcode %}

## Activation
[Create Personal Access Token](https://cloud.digitalocean.com/account/api/tokens)

- [Create Personal Access Token](https://cloud.digitalocean.com/account/api/tokens)
- [How to Create a Personal Access Token (documentation)](https://docs.digitalocean.com/reference/api/create-personal-access-token/)

Your access token must have access to create, read, update and delete domain records.

## Supported record types

The [API reference](https://docs.digitalocean.com/reference/api/digitalocean/#tag/Domain-Records) states that these record types are supported:

| Name | Description |
| ----- | ----------- |
| A | This record type is used to map an IPv4 address to a hostname. |
| AAAA | This record type is used to map an IPv6 address to a hostname. |
| CAA | As specified in RFC-6844, this record type can be used to restrict which certificate authorities are permitted to issue certificates for a domain. |
| CNAME | This record type defines an alias for your canonical hostname (the one defined by an A or AAAA record). |
| MX | This record type is used to define the mail exchanges used for the domain. |
| NS | This record type defines the name servers that are used for this zone. |
| TXT | This record type is used to associate a string of text with a hostname, primarily used for verification. |
| SRV | This record type specifies the location (hostname and port number) of servers for specific services. |
| SOA | This record type defines administrative information about the zone. Can only have ttl changed, cannot be deleted |

## Unsupported record types

This means that `ALIAS`, `DHCID`, `DNAME`, `DS`, `FRAME`, `HTTPS`, `LOC`, `OPENPGPKEY`, `PTR`, `SMIMEA`, `SSHFP`, `SVCB`, `TLSA`, `URL`, or `URL301` presumably **do not work** with Digital Ocean.

In 2025, the provider maintainer has confirmed that `ALIAS` and `LOC` records are rejected. The other ones that do not work are expected in this circumstance. `SPF` records are not a problem since they are turned into `TXT` record types.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These rejects could/should be added to

func AuditRecords(records []*models.RecordConfig) []error {

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Absolutely agree that some of this research needs to get carried over into code. I'm planning on circling back with that soon. I'm still trying to figure out what the code-level priorities should be to have this provider following the project's best practices. 😁


## Limitations

- Digitalocean DNS doesn't support `;` value with CAA-records ([DigitalOcean documentation](https://www.digitalocean.com/docs/networking/dns/how-to/create-caa-records/))
Expand Down
2 changes: 1 addition & 1 deletion documentation/provider/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -407,7 +407,7 @@ Providers in this category and their maintainers are:
|[`CNR`](cnr.md)|@KaiSchwarz-cnic|
|[`CSCGLOBAL`](cscglobal.md)|@Air-New-Zealand|
|[`DESEC`](desec.md)|@D3luxee|
|[`DIGITALOCEAN`](digitalocean.md)|@Deraen|
|[`DIGITALOCEAN`](digitalocean.md)|@chicks-net|
|[`DNSIMPLE`](dnsimple.md)|@onlyhavecans|
|[`DNSMADEEASY`](dnsmadeeasy.md)|@vojtad|
|[`DNSOVERHTTPS`](dnsoverhttps.md)|@mikenz|
Expand Down
Loading