Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 56 additions & 24 deletions documentation/provider/bunnydns.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
# Configuration

To use this provider, add an entry to `creds.json` with `TYPE` set to `BUNNY_DNS` along with
your [Bunny API Key](https://dash.bunny.net/account/settings).
To use this provider, add an entry to `creds.json` with `TYPE` set to
`BUNNY_DNS` along with your
[Bunny API Key](https://dash.bunny.net/account/settings).

Example:

{% code title="creds.json" %}

```json
{
"bunny_dns": {
"TYPE": "BUNNY_DNS",
"api_key": "your-bunny-api-key"
}
"bunny_dns": {
"TYPE": "BUNNY_DNS",
"api_key": "your-bunny-api-key"
}
}
```

{% endcode %}

You can also use environment variables:
Expand All @@ -23,70 +26,99 @@ export BUNNY_DNS_API_KEY=XXXXXXXXX
```

{% code title="creds.json" %}

```json
{
"bunny_dns": {
"TYPE": "BUNNY_DNS",
"api_key": "$BUNNY_DNS_API_KEY"
}
"bunny_dns": {
"TYPE": "BUNNY_DNS",
"api_key": "$BUNNY_DNS_API_KEY"
}
}
```

{% endcode %}

## Metadata

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

## Limitations

### Records

#### CNAME / ALIAS

Bunny supports adding CNAME records for the root domain (`@`), but within
DNSControl the `ALIAS` record should be used.
Comment on lines +52 to +53

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I think this needs a little more explanation. Something like:

Bunny supports adding CNAME records for the root domain (@). Use the ALIAS record type and DNSControl will generate a CNAME as appropriate.


```javascript
D('example.com', REG_NONE, DnsProvider(DSP_BUNNY_DNS),
ALIAS('@', 'example2.com'),
);
```

## Usage

An example configuration:

{% code title="dnsconfig.js" %}

```javascript
var REG_NONE = NewRegistrar("none");
var DSP_BUNNY_DNS = NewDnsProvider("bunny_dns");
var REG_NONE = NewRegistrar('none');
var DSP_BUNNY_DNS = NewDnsProvider('bunny_dns');

D("example.com", REG_NONE, DnsProvider(DSP_BUNNY_DNS),
A("test", "1.2.3.4"),
);
D('example.com', REG_NONE, DnsProvider(DSP_BUNNY_DNS), A('test', '1.2.3.4'));

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

JavaScript code should use double quotes (") for strings, not single quotes (').

See https://docs.dnscontrol.org/developer-info/styleguide-doc

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Ok, y'all have a .prettierrc file that says otherwise. Which is why this PR is so huge... you have your repo set up to use Prettier, but don't actually seem to be using it properly. Hence me having to spend time disabling and working around this. I'll probably just drop wanting to get this merged, tbh. When y'all figure out your systems set up, I'm happy to take another crack at it.

@TomOnTime TomOnTime Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Ah, that's certainly a contradiction! We use prettier for pkg/js/helpers.js and nothing else. We should update the style guide (or maybe change pkg/js/helpers.js to be the same as the docs?). CC @cafferata for his opinion.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Or use a .prettierignore file to ignore the docs. Or ideally just use Prettier for the docs (you can have a separate .prettierrc in the docs dir with different settings) and eliminate all the bikeshedding...

To be clear, the huge problem right now is that because you have that .prettierrc file, Zed and VS Code and any other editor set up to respect them will reformat everything in a file when you make edits.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

(thank you for your patience. I was traveling.)

Ah, that's an interesting point about Zed and VS Code. I thought it wasn't a big issue because bin/generate-all.sh is specific to which file gets run.

I like your proposed solution of using .prettierignore. Would you add that to this PR?

```

{% endcode %}

# Activation

DNSControl depends on the [Bunny API](https://docs.bunny.net/reference/bunnynet-api-overview) to manage your DNS
records. You will need to generate an [API key](https://dash.bunny.net/account/settings) to use this provider.
DNSControl depends on the
[Bunny API](https://docs.bunny.net/reference/bunnynet-api-overview) to manage
your DNS records. You will need to generate an
[API key](https://dash.bunny.net/account/settings) to use this provider.

## New domains

If a domain does not exist in your Bunny account, DNSControl will automatically add it with the `push` command.
If a domain does not exist in your Bunny account, DNSControl will automatically
add it with the `push` command.

## Custom record types

DNSControl supports only the custom record types listed below for Bunny DNS. Other Bunny-specific types
(such as Script or Flatten) are not supported and will be ignored by DNSControl and left as-is.
DNSControl supports only the custom record types listed below for Bunny DNS.
Other Bunny-specific types (such as Script or Flatten) are not supported and
will be ignored by DNSControl and left as-is.

### Redirect

You can configure Bunny's Redirect type with `BUNNY_DNS_RDR`:

{% code title="dnsconfig.js" %}

```javascript
BUNNY_DNS_RDR("@", "https://foo.bar"),
```

{% endcode %}

### Pull Zone (PZ)

You can configure Bunny's Pull Zone type with `BUNNY_DNS_PZ`. The target is the Pull Zone ID:
You can configure Bunny's Pull Zone type with `BUNNY_DNS_PZ`. The target is the
Pull Zone ID:
Comment on lines +108 to +109

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
You can configure Bunny's Pull Zone type with `BUNNY_DNS_PZ`. The target is the
Pull Zone ID:
You can configure Bunny's Pull Zone type with `BUNNY_DNS_PZ`. The target is the Pull Zone ID:

CC @cafferata Is it ok that these lines are being broken? I believe you recently unbroke lines.


{% code title="dnsconfig.js" %}

```javascript
BUNNY_DNS_PZ("@", 12345),
```

{% endcode %}

## Caveats

- Bunny DNS does not support dual-hosting or configuring custom TTLs for NS records on the zone apex.
- While custom nameservers are properly recognized by this provider, it is currently not possible to configure them.
- Bunny DNS does not support dual-hosting or configuring custom TTLs for NS
records on the zone apex.
- While custom nameservers are properly recognized by this provider, it is
currently not possible to configure them.