DOCS: generate smaller tables for feature matrix (2nd try) (#3589)

This commit is contained in:
Christopher Hicks 2025-05-29 10:53:33 -07:00 committed by GitHub
parent 113c1ac13b
commit 87cd4f40e3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 400 additions and 91 deletions

2
.gitignore vendored
View file

@ -5,6 +5,7 @@ dnscontrol-Darwin
dnscontrol-Linux
dnscontrol.exe
dnscontrol
/build/generate/generate
/dnsconfig.js
/creds.json
ExternalDNS
@ -25,6 +26,7 @@ stack.sh
*.nupkg
.DS_Store
.vscode
*.sw[a-p]
.jekyll-cache
types-dnscontrol.d.ts

View file

@ -1,6 +1,7 @@
package main
import (
"fmt"
"os"
"sort"
"strings"
@ -11,26 +12,35 @@ import (
)
func generateFeatureMatrix() error {
var replacementContent string = ""
matrix := matrixData()
markdownTable, err := markdownTable(matrix)
if err != nil {
return err
for i := 0; i < len(matrix.FeatureTables); i++ {
var tableTitle = matrix.FeatureTablesTitles[i]
replacementContent += fmt.Sprintf("\n### %s <!--(table %d/%d)-->\n\n",
tableTitle, i+1, len(matrix.FeatureTables))
markdownTable, err := markdownTable(matrix, int32(i))
if err != nil {
return err
}
replacementContent += markdownTable
replacementContent += "\n"
}
replaceInlineContent(
"documentation/provider/index.md",
"<!-- provider-matrix-start -->",
"<!-- provider-matrix-end -->",
markdownTable,
replacementContent,
)
return nil
}
func markdownTable(matrix *FeatureMatrix) (string, error) {
func markdownTable(matrix *FeatureMatrix, tableNumber int32) (string, error) {
var tableHeaders []string
tableHeaders = append(tableHeaders, "Provider name")
tableHeaders = append(tableHeaders, matrix.Features...)
tableHeaders = append(tableHeaders, matrix.FeatureTables[tableNumber]...)
var tableData [][]string
for _, providerName := range allProviderNames() {
@ -38,10 +48,18 @@ func markdownTable(matrix *FeatureMatrix) (string, error) {
var tableDataRow []string
tableDataRow = append(tableDataRow, "[`"+providerName+"`]("+strings.ToLower(providerName)+".md)")
for _, featureName := range matrix.Features {
for _, featureName := range matrix.FeatureTables[tableNumber] {
tableDataRow = append(tableDataRow, featureEmoji(featureMap, featureName))
}
tableData = append(tableData, tableDataRow)
skipThisRow := true
for status := range tableDataRow[1:] {
if tableDataRow[status+1] != "❔" {
skipThisRow = false
}
}
if !skipThisRow {
tableData = append(tableData, tableDataRow)
}
}
markdownTable, err := markdown.NewTableFormatterBuilder().
@ -92,38 +110,58 @@ func matrixData() *FeatureMatrix {
DomainModifierDhcid = "[`DHCID`](../language-reference/domain-modifiers/DHCID.md)"
DomainModifierDname = "[`DNAME`](../language-reference/domain-modifiers/DNAME.md)"
DomainModifierDnskey = "[`DNSKEY`](../language-reference/domain-modifiers/DNSKEY.md)"
DualHost = "dual host"
DualHost = "[dual host](../dual-host.md)"
CreateDomains = "create-domains"
GetZones = "get-zones"
)
matrix := &FeatureMatrix{
Providers: map[string]FeatureMap{},
Features: []string{
OfficialSupport,
ProviderDNSProvider,
ProviderRegistrar,
ProviderThreadSafe,
DomainModifierAlias,
DomainModifierCaa,
DomainModifierDnssec,
DomainModifierHTTPS,
DomainModifierLoc,
DomainModifierNaptr,
DomainModifierPtr,
DomainModifierSoa,
DomainModifierSrv,
DomainModifierSshfp,
DomainModifierSvcb,
DomainModifierTlsa,
DomainModifierDs,
DomainModifierDhcid,
DomainModifierDname,
DomainModifierDnskey,
DualHost,
CreateDomains,
// NoPurge,
GetZones,
FeatureTablesTitles: []string{
"Provider Type",
"Provider API",
"DNS extensions",
"Service discovery",
"Security",
"DNSSEC",
},
FeatureTables: [][]string{
[]string{ // provider type
OfficialSupport,
ProviderDNSProvider,
ProviderRegistrar,
},
[]string{ // provider API
ProviderThreadSafe,
DualHost,
CreateDomains,
// NoPurge,
GetZones,
},
[]string{ // DNS extensions
DomainModifierAlias,
DomainModifierDname,
DomainModifierLoc,
DomainModifierPtr,
DomainModifierSoa,
},
[]string{ // service discovery
DomainModifierDhcid,
DomainModifierNaptr,
DomainModifierSrv,
DomainModifierSvcb,
},
[]string{ // security
DomainModifierCaa,
DomainModifierHTTPS,
DomainModifierSshfp,
DomainModifierTlsa,
},
[]string{ // dnssec
DomainModifierDnssec,
DomainModifierDnskey,
DomainModifierDs,
},
},
}
@ -321,8 +359,9 @@ func (featureMap FeatureMap) SetSimple(
// FeatureMatrix describes features and which providers support it.
type FeatureMatrix struct {
Features []string
Providers map[string]FeatureMap
Providers map[string]FeatureMap
FeatureTables [][]string
FeatureTablesTitles []string
}
func replaceInlineContent(

View file

@ -0,0 +1,16 @@
# Dual Host
The dual hosting feature of DNSControl provides
for the ability to use multiple DNS providers simultaneously.
Consult your provider docs to ensure that **both** of them support this feature.
✅ - A checkmark means "this has been tested, and the provider works with dual hosting".
❔ - The questionmark means "it hasn't been tested, safety unknown"
❌ - The red "X" means "this has been tested, and it does _not_ work currently".
## Source reference
[The source](https://github.com/StackExchange/dnscontrol/blob/cdbd54016f93140548d846842b0d7575603069c8/providers/capabilities.go#L93)
states that this flag
> provider allows full management of apex NS records, so we can safely dual-host with another provider

View file

@ -12,61 +12,313 @@ a provider that supports it, we'd love your contribution to ensure it works corr
If a feature is definitively not supported for whatever reason, we would also like a PR to clarify why it is not supported, and fill in this entire matrix.
<!-- provider-matrix-start -->
| Provider name | Official Support | DNS Provider | Registrar | [Concurrency Verified](../concurrency-verified.md) | [`ALIAS`](../language-reference/domain-modifiers/ALIAS.md) | [`CAA`](../language-reference/domain-modifiers/CAA.md) | [`AUTODNSSEC`](../language-reference/domain-modifiers/AUTODNSSEC_ON.md) | [`HTTPS`](../language-reference/domain-modifiers/HTTPS.md) | [`LOC`](../language-reference/domain-modifiers/LOC.md) | [`NAPTR`](../language-reference/domain-modifiers/NAPTR.md) | [`PTR`](../language-reference/domain-modifiers/PTR.md) | [`SOA`](../language-reference/domain-modifiers/SOA.md) | [`SRV`](../language-reference/domain-modifiers/SRV.md) | [`SSHFP`](../language-reference/domain-modifiers/SSHFP.md) | [`SVCB`](../language-reference/domain-modifiers/SVCB.md) | [`TLSA`](../language-reference/domain-modifiers/TLSA.md) | [`DS`](../language-reference/domain-modifiers/DS.md) | [`DHCID`](../language-reference/domain-modifiers/DHCID.md) | [`DNAME`](../language-reference/domain-modifiers/DNAME.md) | [`DNSKEY`](../language-reference/domain-modifiers/DNSKEY.md) | dual host | create-domains | get-zones |
| ------------- | ---------------- | ------------ | --------- | -------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------ | ---------------------------------------------------------- | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ---------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------ | --------- | -------------- | --------- |
| [`AKAMAIEDGEDNS`](akamaiedgedns.md) | ❌ | ✅ | ❌ | ❔ | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`AUTODNS`](autodns.md) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ❔ | ✅ | ❌ | ❔ | ❌ | ❌ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ |
| [`AXFRDDNS`](axfrddns.md) | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| [`AZURE_DNS`](azure_dns.md) | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ❔ | ❔ | ❌ | ❌ | ✅ | ❔ | ✅ | ❌ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`AZURE_PRIVATE_DNS`](azure_private_dns.md) | ✅ | ✅ | ❌ | ❔ | ❌ | ❌ | ❔ | ❔ | ❌ | ❌ | ✅ | ❔ | ✅ | ❌ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`BIND`](bind.md) | ✅ | ✅ | ❌ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| [`BUNNY_DNS`](bunny_dns.md) | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ✅ | ❔ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❔ | ❔ | ❌ | ✅ | ✅ |
| [`CLOUDFLAREAPI`](cloudflareapi.md) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❔ | ✅ | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❌ | ❌ | ✅ | ✅ |
| [`CLOUDNS`](cloudns.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ✅ | ❔ | ❔ | ✅ | ✅ |
| [`CNR`](cnr.md) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ❔ | ❌ | ❌ | ❔ | ✅ | ✅ | ✅ |
| [`CSCGLOBAL`](cscglobal.md) | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ✅ |
| [`DESEC`](desec.md) | ❌ | ✅ | ❌ | ✅ | ❔ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ✅ | ❔ | ✅ | ✅ |
| [`DIGITALOCEAN`](digitalocean.md) | ❌ | ✅ | ❌ | ✅ | ❔ | ✅ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ |
| [`DNSIMPLE`](dnsimple.md) | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ❔ | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ❌ | ❌ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ |
| [`DNSMADEEASY`](dnsmadeeasy.md) | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ❌ | ❔ | ❌ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`DNSOVERHTTPS`](dnsoverhttps.md) | ❌ | ❌ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ |
| [`DOMAINNAMESHOP`](domainnameshop.md) | ❌ | ✅ | ❌ | ❔ | ❔ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ |
| [`DYNADOT`](dynadot.md) | ❌ | ❌ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ |
| [`EASYNAME`](easyname.md) | ❌ | ❌ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ |
| [`EXOSCALE`](exoscale.md) | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ❔ |
| [`GANDI_V5`](gandi_v5.md) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ✅ |
| [`GCLOUD`](gcloud.md) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`GCORE`](gcore.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❔ | ✅ | ❌ | ✅ | ❌ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`HEDNS`](hedns.md) | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`HETZNER`](hetzner.md) | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`HEXONET`](hexonet.md) | ❌ | ✅ | ✅ | ❔ | ❌ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ❔ | ✅ | ❔ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ❔ |
| [`HOSTINGDE`](hostingde.md) | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ❔ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`HUAWEICLOUD`](huaweicloud.md) | ❌ | ✅ | ❌ | ❔ | ❌ | ✅ | ❔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`INTERNETBS`](internetbs.md) | ❌ | ❌ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ |
| [`INWX`](inwx.md) | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`LINODE`](linode.md) | ❌ | ✅ | ❌ | ❔ | ❔ | ✅ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ |
| [`LOOPIA`](loopia.md) | ❌ | ✅ | ✅ | ❔ | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ✅ | ❌ | ✅ |
| [`LUADNS`](luadns.md) | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`MSDNS`](msdns.md) | ✅ | ✅ | ❌ | ❔ | ❌ | ❌ | ❔ | ❔ | ❌ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ |
| [`MYTHICBEASTS`](mythicbeasts.md) | ❌ | ✅ | ❌ | ❔ | ❌ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ❌ | ✅ |
| [`NAMECHEAP`](namecheap.md) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ❌ | ❔ | ❌ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ |
| [`NAMEDOTCOM`](namedotcom.md) | ❌ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❌ | ❔ | ❌ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ❌ | ✅ |
| [`NETCUP`](netcup.md) | ❌ | ✅ | ❌ | ❔ | ❔ | ✅ | ❔ | ❔ | ❌ | ❔ | ❌ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ❌ |
| [`NETLIFY`](netlify.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❔ | ✅ | ❌ | ❔ | ❌ | ❌ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ |
| [`NS1`](ns1.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❔ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ |
| [`OPENSRS`](opensrs.md) | ❌ | ❌ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ |
| [`ORACLE`](oracle.md) | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ❔ | ❔ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`OVH`](ovh.md) | ❌ | ✅ | ✅ | ❔ | ❌ | ✅ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ❌ | ✅ |
| [`PACKETFRAME`](packetframe.md) | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ❔ |
| [`PORKBUN`](porkbun.md) | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ |
| [`POWERDNS`](powerdns.md) | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| [`REALTIMEREGISTER`](realtimeregister.md) | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ✅ | ❌ | ❌ | ❔ | ❔ | ❌ | ✅ | ✅ |
| [`ROUTE53`](route53.md) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❔ | ✅ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`RWTH`](rwth.md) | ❌ | ✅ | ❌ | ❔ | ❌ | ✅ | ❔ | ❔ | ❌ | ❌ | ✅ | ❔ | ✅ | ✅ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ |
| [`SAKURACLOUD`](sakuracloud.md) | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| [`SOFTLAYER`](softlayer.md) | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ |
| [`TRANSIP`](transip.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| [`VULTR`](vultr.md) | ❌ | ✅ | ❌ | ❔ | ❌ | ✅ | ❔ | ❔ | ❌ | ❔ | ❌ | ❔ | ✅ | ✅ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ |
### Provider Type <!--(table 1/6)-->
| Provider name | Official Support | DNS Provider | Registrar |
| ------------- | ---------------- | ------------ | --------- |
| [`AKAMAIEDGEDNS`](akamaiedgedns.md) | ❌ | ✅ | ❌ |
| [`AUTODNS`](autodns.md) | ❌ | ✅ | ✅ |
| [`AXFRDDNS`](axfrddns.md) | ❌ | ✅ | ❌ |
| [`AZURE_DNS`](azure_dns.md) | ✅ | ✅ | ❌ |
| [`AZURE_PRIVATE_DNS`](azure_private_dns.md) | ✅ | ✅ | ❌ |
| [`BIND`](bind.md) | ✅ | ✅ | ❌ |
| [`BUNNY_DNS`](bunny_dns.md) | ❌ | ✅ | ❌ |
| [`CLOUDFLAREAPI`](cloudflareapi.md) | ✅ | ✅ | ❌ |
| [`CLOUDNS`](cloudns.md) | ❌ | ✅ | ❌ |
| [`CNR`](cnr.md) | ❌ | ✅ | ✅ |
| [`CSCGLOBAL`](cscglobal.md) | ✅ | ✅ | ✅ |
| [`DESEC`](desec.md) | ❌ | ✅ | ❌ |
| [`DIGITALOCEAN`](digitalocean.md) | ❌ | ✅ | ❌ |
| [`DNSIMPLE`](dnsimple.md) | ❌ | ✅ | ✅ |
| [`DNSMADEEASY`](dnsmadeeasy.md) | ❌ | ✅ | ❌ |
| [`DNSOVERHTTPS`](dnsoverhttps.md) | ❌ | ❌ | ✅ |
| [`DOMAINNAMESHOP`](domainnameshop.md) | ❌ | ✅ | ❌ |
| [`DYNADOT`](dynadot.md) | ❌ | ❌ | ✅ |
| [`EASYNAME`](easyname.md) | ❌ | ❌ | ✅ |
| [`EXOSCALE`](exoscale.md) | ❌ | ✅ | ❌ |
| [`GANDI_V5`](gandi_v5.md) | ❌ | ✅ | ✅ |
| [`GCLOUD`](gcloud.md) | ✅ | ✅ | ❌ |
| [`GCORE`](gcore.md) | ❌ | ✅ | ❌ |
| [`HEDNS`](hedns.md) | ❌ | ✅ | ❌ |
| [`HETZNER`](hetzner.md) | ❌ | ✅ | ❌ |
| [`HEXONET`](hexonet.md) | ❌ | ✅ | ✅ |
| [`HOSTINGDE`](hostingde.md) | ❌ | ✅ | ✅ |
| [`HUAWEICLOUD`](huaweicloud.md) | ❌ | ✅ | ❌ |
| [`INTERNETBS`](internetbs.md) | ❌ | ❌ | ✅ |
| [`INWX`](inwx.md) | ❌ | ✅ | ✅ |
| [`LINODE`](linode.md) | ❌ | ✅ | ❌ |
| [`LOOPIA`](loopia.md) | ❌ | ✅ | ✅ |
| [`LUADNS`](luadns.md) | ❌ | ✅ | ❌ |
| [`MSDNS`](msdns.md) | ✅ | ✅ | ❌ |
| [`MYTHICBEASTS`](mythicbeasts.md) | ❌ | ✅ | ❌ |
| [`NAMECHEAP`](namecheap.md) | ❌ | ✅ | ✅ |
| [`NAMEDOTCOM`](namedotcom.md) | ❌ | ✅ | ✅ |
| [`NETCUP`](netcup.md) | ❌ | ✅ | ❌ |
| [`NETLIFY`](netlify.md) | ❌ | ✅ | ❌ |
| [`NS1`](ns1.md) | ❌ | ✅ | ❌ |
| [`OPENSRS`](opensrs.md) | ❌ | ❌ | ✅ |
| [`ORACLE`](oracle.md) | ❌ | ✅ | ❌ |
| [`OVH`](ovh.md) | ❌ | ✅ | ✅ |
| [`PACKETFRAME`](packetframe.md) | ❌ | ✅ | ❌ |
| [`PORKBUN`](porkbun.md) | ❌ | ✅ | ✅ |
| [`POWERDNS`](powerdns.md) | ❌ | ✅ | ❌ |
| [`REALTIMEREGISTER`](realtimeregister.md) | ❌ | ✅ | ✅ |
| [`ROUTE53`](route53.md) | ✅ | ✅ | ✅ |
| [`RWTH`](rwth.md) | ❌ | ✅ | ❌ |
| [`SAKURACLOUD`](sakuracloud.md) | ❌ | ✅ | ❌ |
| [`SOFTLAYER`](softlayer.md) | ❌ | ✅ | ❌ |
| [`TRANSIP`](transip.md) | ❌ | ✅ | ❌ |
| [`VULTR`](vultr.md) | ❌ | ✅ | ❌ |
### Provider API <!--(table 2/6)-->
| Provider name | [Concurrency Verified](../concurrency-verified.md) | [dual host](../dual-host.md) | create-domains | get-zones |
| ------------- | -------------------------------------------------- | ---------------------------- | -------------- | --------- |
| [`AKAMAIEDGEDNS`](akamaiedgedns.md) | ❔ | ✅ | ✅ | ✅ |
| [`AUTODNS`](autodns.md) | ✅ | ❌ | ❌ | ✅ |
| [`AXFRDDNS`](axfrddns.md) | ✅ | ❌ | ❌ | ❌ |
| [`AZURE_DNS`](azure_dns.md) | ✅ | ✅ | ✅ | ✅ |
| [`AZURE_PRIVATE_DNS`](azure_private_dns.md) | ❔ | ✅ | ✅ | ✅ |
| [`BIND`](bind.md) | ✅ | ✅ | ✅ | ✅ |
| [`BUNNY_DNS`](bunny_dns.md) | ❔ | ❌ | ✅ | ✅ |
| [`CLOUDFLAREAPI`](cloudflareapi.md) | ✅ | ❌ | ✅ | ✅ |
| [`CLOUDNS`](cloudns.md) | ✅ | ❔ | ✅ | ✅ |
| [`CNR`](cnr.md) | ✅ | ✅ | ✅ | ✅ |
| [`CSCGLOBAL`](cscglobal.md) | ✅ | ❔ | ❌ | ✅ |
| [`DESEC`](desec.md) | ✅ | ❔ | ✅ | ✅ |
| [`DIGITALOCEAN`](digitalocean.md) | ✅ | ❔ | ✅ | ✅ |
| [`DNSIMPLE`](dnsimple.md) | ❔ | ❌ | ❌ | ✅ |
| [`DNSMADEEASY`](dnsmadeeasy.md) | ❔ | ✅ | ✅ | ✅ |
| [`DNSOVERHTTPS`](dnsoverhttps.md) | ❔ | ❔ | ❌ | ❔ |
| [`DYNADOT`](dynadot.md) | ❔ | ❔ | ❌ | ❔ |
| [`EASYNAME`](easyname.md) | ❔ | ❔ | ❌ | ❔ |
| [`EXOSCALE`](exoscale.md) | ❔ | ❌ | ❌ | ❔ |
| [`GANDI_V5`](gandi_v5.md) | ✅ | ❔ | ❌ | ✅ |
| [`GCLOUD`](gcloud.md) | ✅ | ✅ | ✅ | ✅ |
| [`GCORE`](gcore.md) | ✅ | ✅ | ✅ | ✅ |
| [`HEDNS`](hedns.md) | ❔ | ✅ | ✅ | ✅ |
| [`HETZNER`](hetzner.md) | ✅ | ✅ | ✅ | ✅ |
| [`HEXONET`](hexonet.md) | ❔ | ✅ | ✅ | ❔ |
| [`HOSTINGDE`](hostingde.md) | ❔ | ✅ | ✅ | ✅ |
| [`HUAWEICLOUD`](huaweicloud.md) | ❔ | ✅ | ✅ | ✅ |
| [`INTERNETBS`](internetbs.md) | ❔ | ❔ | ❌ | ❔ |
| [`INWX`](inwx.md) | ❔ | ✅ | ✅ | ✅ |
| [`LINODE`](linode.md) | ❔ | ❌ | ❌ | ✅ |
| [`LOOPIA`](loopia.md) | ❔ | ✅ | ❌ | ✅ |
| [`LUADNS`](luadns.md) | ❔ | ✅ | ✅ | ✅ |
| [`MSDNS`](msdns.md) | ❔ | ❌ | ❌ | ✅ |
| [`MYTHICBEASTS`](mythicbeasts.md) | ❔ | ✅ | ❌ | ✅ |
| [`NAMECHEAP`](namecheap.md) | ✅ | ❌ | ❌ | ✅ |
| [`NAMEDOTCOM`](namedotcom.md) | ❔ | ✅ | ❌ | ✅ |
| [`NETCUP`](netcup.md) | ❔ | ❌ | ❌ | ❌ |
| [`NETLIFY`](netlify.md) | ✅ | ❌ | ❌ | ✅ |
| [`NS1`](ns1.md) | ✅ | ✅ | ✅ | ✅ |
| [`OPENSRS`](opensrs.md) | ❔ | ❔ | ❌ | ❔ |
| [`ORACLE`](oracle.md) | ❔ | ✅ | ✅ | ✅ |
| [`OVH`](ovh.md) | ❔ | ✅ | ❌ | ✅ |
| [`PACKETFRAME`](packetframe.md) | ❔ | ❌ | ❌ | ❔ |
| [`PORKBUN`](porkbun.md) | ❔ | ❌ | ❌ | ✅ |
| [`POWERDNS`](powerdns.md) | ❔ | ✅ | ✅ | ✅ |
| [`REALTIMEREGISTER`](realtimeregister.md) | ❔ | ❌ | ✅ | ✅ |
| [`ROUTE53`](route53.md) | ✅ | ✅ | ✅ | ✅ |
| [`RWTH`](rwth.md) | ❔ | ❌ | ❌ | ✅ |
| [`SAKURACLOUD`](sakuracloud.md) | ❔ | ❌ | ✅ | ✅ |
| [`SOFTLAYER`](softlayer.md) | ❔ | ❔ | ❌ | ❔ |
| [`TRANSIP`](transip.md) | ✅ | ❌ | ❌ | ✅ |
| [`VULTR`](vultr.md) | ❔ | ❔ | ✅ | ✅ |
### DNS extensions <!--(table 3/6)-->
| Provider name | [`ALIAS`](../language-reference/domain-modifiers/ALIAS.md) | [`DNAME`](../language-reference/domain-modifiers/DNAME.md) | [`LOC`](../language-reference/domain-modifiers/LOC.md) | [`PTR`](../language-reference/domain-modifiers/PTR.md) | [`SOA`](../language-reference/domain-modifiers/SOA.md) |
| ------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
| [`AKAMAIEDGEDNS`](akamaiedgedns.md) | ❌ | ❔ | ✅ | ✅ | ❌ |
| [`AUTODNS`](autodns.md) | ✅ | ❔ | ❔ | ✅ | ❔ |
| [`AXFRDDNS`](axfrddns.md) | ❌ | ✅ | ✅ | ✅ | ❌ |
| [`AZURE_DNS`](azure_dns.md) | ❌ | ❔ | ❌ | ✅ | ❔ |
| [`AZURE_PRIVATE_DNS`](azure_private_dns.md) | ❌ | ❔ | ❌ | ✅ | ❔ |
| [`BIND`](bind.md) | ❔ | ✅ | ✅ | ✅ | ✅ |
| [`BUNNY_DNS`](bunny_dns.md) | ✅ | ❔ | ❌ | ✅ | ❌ |
| [`CLOUDFLAREAPI`](cloudflareapi.md) | ✅ | ❔ | ❌ | ✅ | ❔ |
| [`CLOUDNS`](cloudns.md) | ✅ | ✅ | ✅ | ✅ | ❔ |
| [`CNR`](cnr.md) | ✅ | ❌ | ❌ | ✅ | ❌ |
| [`DESEC`](desec.md) | ❔ | ❔ | ❔ | ✅ | ❔ |
| [`DIGITALOCEAN`](digitalocean.md) | ❔ | ❔ | ❌ | ❔ | ❔ |
| [`DNSIMPLE`](dnsimple.md) | ✅ | ❔ | ❌ | ✅ | ❔ |
| [`DNSMADEEASY`](dnsmadeeasy.md) | ✅ | ❔ | ❌ | ✅ | ❔ |
| [`DOMAINNAMESHOP`](domainnameshop.md) | ❔ | ❔ | ❌ | ❌ | ❌ |
| [`EXOSCALE`](exoscale.md) | ✅ | ❔ | ❌ | ✅ | ❔ |
| [`GANDI_V5`](gandi_v5.md) | ✅ | ❔ | ❌ | ✅ | ❔ |
| [`GCLOUD`](gcloud.md) | ✅ | ❔ | ❌ | ✅ | ❔ |
| [`GCORE`](gcore.md) | ✅ | ❔ | ❌ | ✅ | ❔ |
| [`HEDNS`](hedns.md) | ✅ | ❔ | ✅ | ✅ | ❌ |
| [`HETZNER`](hetzner.md) | ❌ | ❔ | ❌ | ❌ | ❌ |
| [`HEXONET`](hexonet.md) | ❌ | ❔ | ❔ | ✅ | ❔ |
| [`HOSTINGDE`](hostingde.md) | ✅ | ❔ | ❌ | ✅ | ✅ |
| [`HUAWEICLOUD`](huaweicloud.md) | ❌ | ❔ | ❌ | ❌ | ❌ |
| [`INWX`](inwx.md) | ✅ | ❔ | ❔ | ✅ | ❔ |
| [`LINODE`](linode.md) | ❔ | ❔ | ❌ | ❔ | ❔ |
| [`LOOPIA`](loopia.md) | ❌ | ❔ | ✅ | ❌ | ❌ |
| [`LUADNS`](luadns.md) | ✅ | ❔ | ❌ | ✅ | ❔ |
| [`MSDNS`](msdns.md) | ❌ | ❔ | ❌ | ✅ | ❔ |
| [`MYTHICBEASTS`](mythicbeasts.md) | ❌ | ❔ | ❌ | ✅ | ❔ |
| [`NAMECHEAP`](namecheap.md) | ✅ | ❔ | ❌ | ❌ | ❔ |
| [`NAMEDOTCOM`](namedotcom.md) | ✅ | ❔ | ❌ | ❌ | ❔ |
| [`NETCUP`](netcup.md) | ❔ | ❔ | ❌ | ❌ | ❔ |
| [`NETLIFY`](netlify.md) | ✅ | ❔ | ❌ | ❌ | ❔ |
| [`NS1`](ns1.md) | ✅ | ✅ | ❌ | ✅ | ❔ |
| [`ORACLE`](oracle.md) | ✅ | ❔ | ❔ | ✅ | ❔ |
| [`OVH`](ovh.md) | ❌ | ❔ | ❔ | ❌ | ❔ |
| [`PACKETFRAME`](packetframe.md) | ❔ | ❔ | ❔ | ✅ | ❔ |
| [`PORKBUN`](porkbun.md) | ✅ | ❔ | ❌ | ❌ | ❌ |
| [`POWERDNS`](powerdns.md) | ✅ | ✅ | ❔ | ✅ | ✅ |
| [`REALTIMEREGISTER`](realtimeregister.md) | ✅ | ❔ | ✅ | ❌ | ❌ |
| [`ROUTE53`](route53.md) | ❌ | ❔ | ❌ | ✅ | ❔ |
| [`RWTH`](rwth.md) | ❌ | ❔ | ❌ | ✅ | ❔ |
| [`SAKURACLOUD`](sakuracloud.md) | ✅ | ❌ | ❌ | ✅ | ❌ |
| [`SOFTLAYER`](softlayer.md) | ❔ | ❔ | ❌ | ❔ | ❔ |
| [`TRANSIP`](transip.md) | ✅ | ❌ | ❌ | ❌ | ❌ |
| [`VULTR`](vultr.md) | ❌ | ❔ | ❌ | ❌ | ❔ |
### Service discovery <!--(table 4/6)-->
| Provider name | [`DHCID`](../language-reference/domain-modifiers/DHCID.md) | [`NAPTR`](../language-reference/domain-modifiers/NAPTR.md) | [`SRV`](../language-reference/domain-modifiers/SRV.md) | [`SVCB`](../language-reference/domain-modifiers/SVCB.md) |
| ------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------ | -------------------------------------------------------- |
| [`AKAMAIEDGEDNS`](akamaiedgedns.md) | ❔ | ✅ | ✅ | ❔ |
| [`AUTODNS`](autodns.md) | ❔ | ❔ | ✅ | ❔ |
| [`AXFRDDNS`](axfrddns.md) | ✅ | ✅ | ✅ | ✅ |
| [`AZURE_DNS`](azure_dns.md) | ❔ | ❌ | ✅ | ❔ |
| [`AZURE_PRIVATE_DNS`](azure_private_dns.md) | ❔ | ❌ | ✅ | ❔ |
| [`BIND`](bind.md) | ✅ | ✅ | ✅ | ✅ |
| [`BUNNY_DNS`](bunny_dns.md) | ❌ | ❌ | ✅ | ❔ |
| [`CLOUDFLAREAPI`](cloudflareapi.md) | ❔ | ✅ | ✅ | ✅ |
| [`CLOUDNS`](cloudns.md) | ❔ | ❔ | ✅ | ❔ |
| [`CNR`](cnr.md) | ❌ | ✅ | ✅ | ❌ |
| [`CSCGLOBAL`](cscglobal.md) | ❔ | ❔ | ✅ | ❔ |
| [`DESEC`](desec.md) | ❔ | ✅ | ✅ | ✅ |
| [`DIGITALOCEAN`](digitalocean.md) | ❔ | ❔ | ✅ | ❔ |
| [`DNSIMPLE`](dnsimple.md) | ❔ | ✅ | ✅ | ❔ |
| [`DNSMADEEASY`](dnsmadeeasy.md) | ❔ | ❔ | ✅ | ❔ |
| [`DOMAINNAMESHOP`](domainnameshop.md) | ❔ | ❌ | ✅ | ❔ |
| [`EXOSCALE`](exoscale.md) | ❔ | ❔ | ✅ | ❔ |
| [`GANDI_V5`](gandi_v5.md) | ❔ | ❔ | ✅ | ❔ |
| [`GCLOUD`](gcloud.md) | ❔ | ❔ | ✅ | ✅ |
| [`GCORE`](gcore.md) | ❔ | ❌ | ✅ | ✅ |
| [`HEDNS`](hedns.md) | ❔ | ✅ | ✅ | ✅ |
| [`HETZNER`](hetzner.md) | ❔ | ❌ | ✅ | ❔ |
| [`HEXONET`](hexonet.md) | ❔ | ❔ | ✅ | ❔ |
| [`HOSTINGDE`](hostingde.md) | ❔ | ❌ | ✅ | ❔ |
| [`HUAWEICLOUD`](huaweicloud.md) | ❔ | ❌ | ✅ | ❌ |
| [`INWX`](inwx.md) | ❔ | ✅ | ✅ | ✅ |
| [`LOOPIA`](loopia.md) | ❔ | ✅ | ✅ | ❔ |
| [`LUADNS`](luadns.md) | ❔ | ❔ | ✅ | ❔ |
| [`MSDNS`](msdns.md) | ❔ | ✅ | ✅ | ❔ |
| [`MYTHICBEASTS`](mythicbeasts.md) | ❔ | ❔ | ✅ | ❔ |
| [`NAMECHEAP`](namecheap.md) | ❔ | ❔ | ❌ | ❔ |
| [`NAMEDOTCOM`](namedotcom.md) | ❔ | ❔ | ✅ | ❔ |
| [`NETCUP`](netcup.md) | ❔ | ❔ | ✅ | ❔ |
| [`NETLIFY`](netlify.md) | ❔ | ❌ | ✅ | ❔ |
| [`NS1`](ns1.md) | ✅ | ✅ | ✅ | ✅ |
| [`ORACLE`](oracle.md) | ❔ | ✅ | ✅ | ❔ |
| [`OVH`](ovh.md) | ❔ | ❔ | ✅ | ❔ |
| [`PACKETFRAME`](packetframe.md) | ❔ | ❔ | ✅ | ❔ |
| [`PORKBUN`](porkbun.md) | ❔ | ❌ | ✅ | ✅ |
| [`POWERDNS`](powerdns.md) | ✅ | ✅ | ✅ | ✅ |
| [`REALTIMEREGISTER`](realtimeregister.md) | ❌ | ✅ | ✅ | ❔ |
| [`ROUTE53`](route53.md) | ❔ | ❔ | ✅ | ✅ |
| [`RWTH`](rwth.md) | ❔ | ❌ | ✅ | ❔ |
| [`SAKURACLOUD`](sakuracloud.md) | ❌ | ❌ | ✅ | ✅ |
| [`SOFTLAYER`](softlayer.md) | ❔ | ❔ | ✅ | ❔ |
| [`TRANSIP`](transip.md) | ❌ | ✅ | ✅ | ❌ |
| [`VULTR`](vultr.md) | ❔ | ❔ | ✅ | ❔ |
### Security <!--(table 5/6)-->
| Provider name | [`CAA`](../language-reference/domain-modifiers/CAA.md) | [`HTTPS`](../language-reference/domain-modifiers/HTTPS.md) | [`SSHFP`](../language-reference/domain-modifiers/SSHFP.md) | [`TLSA`](../language-reference/domain-modifiers/TLSA.md) |
| ------------- | ------------------------------------------------------ | ---------------------------------------------------------- | ---------------------------------------------------------- | -------------------------------------------------------- |
| [`AKAMAIEDGEDNS`](akamaiedgedns.md) | ✅ | ❔ | ✅ | ✅ |
| [`AUTODNS`](autodns.md) | ✅ | ❔ | ❌ | ❌ |
| [`AXFRDDNS`](axfrddns.md) | ✅ | ✅ | ✅ | ✅ |
| [`AZURE_DNS`](azure_dns.md) | ✅ | ❔ | ❌ | ❌ |
| [`AZURE_PRIVATE_DNS`](azure_private_dns.md) | ❌ | ❔ | ❌ | ❌ |
| [`BIND`](bind.md) | ✅ | ✅ | ✅ | ✅ |
| [`BUNNY_DNS`](bunny_dns.md) | ✅ | ❔ | ❌ | ❌ |
| [`CLOUDFLAREAPI`](cloudflareapi.md) | ✅ | ✅ | ✅ | ✅ |
| [`CLOUDNS`](cloudns.md) | ✅ | ❔ | ✅ | ✅ |
| [`CNR`](cnr.md) | ✅ | ❌ | ✅ | ✅ |
| [`CSCGLOBAL`](cscglobal.md) | ✅ | ❔ | ❔ | ❔ |
| [`DESEC`](desec.md) | ✅ | ✅ | ✅ | ✅ |
| [`DIGITALOCEAN`](digitalocean.md) | ✅ | ❔ | ❔ | ❔ |
| [`DNSIMPLE`](dnsimple.md) | ✅ | ❔ | ✅ | ❌ |
| [`DNSMADEEASY`](dnsmadeeasy.md) | ✅ | ❔ | ❌ | ❌ |
| [`DOMAINNAMESHOP`](domainnameshop.md) | ✅ | ❔ | ❌ | ❔ |
| [`EXOSCALE`](exoscale.md) | ✅ | ❔ | ❔ | ❌ |
| [`GANDI_V5`](gandi_v5.md) | ✅ | ❔ | ✅ | ✅ |
| [`GCLOUD`](gcloud.md) | ✅ | ✅ | ✅ | ✅ |
| [`GCORE`](gcore.md) | ✅ | ✅ | ❌ | ❌ |
| [`HEDNS`](hedns.md) | ✅ | ✅ | ✅ | ❌ |
| [`HETZNER`](hetzner.md) | ✅ | ❔ | ❌ | ✅ |
| [`HEXONET`](hexonet.md) | ✅ | ❔ | ❔ | ✅ |
| [`HOSTINGDE`](hostingde.md) | ✅ | ❔ | ✅ | ✅ |
| [`HUAWEICLOUD`](huaweicloud.md) | ✅ | ❌ | ❌ | ❌ |
| [`INWX`](inwx.md) | ✅ | ✅ | ✅ | ✅ |
| [`LINODE`](linode.md) | ✅ | ❔ | ❔ | ❔ |
| [`LOOPIA`](loopia.md) | ✅ | ❔ | ✅ | ✅ |
| [`LUADNS`](luadns.md) | ✅ | ❔ | ✅ | ✅ |
| [`MSDNS`](msdns.md) | ❌ | ❔ | ❔ | ❔ |
| [`MYTHICBEASTS`](mythicbeasts.md) | ✅ | ❔ | ✅ | ✅ |
| [`NAMECHEAP`](namecheap.md) | ✅ | ❔ | ❔ | ❌ |
| [`NETCUP`](netcup.md) | ✅ | ❔ | ❔ | ❔ |
| [`NETLIFY`](netlify.md) | ✅ | ❔ | ❌ | ❌ |
| [`NS1`](ns1.md) | ✅ | ✅ | ❔ | ✅ |
| [`ORACLE`](oracle.md) | ✅ | ❔ | ✅ | ✅ |
| [`OVH`](ovh.md) | ✅ | ❔ | ✅ | ✅ |
| [`PORKBUN`](porkbun.md) | ✅ | ✅ | ❌ | ✅ |
| [`POWERDNS`](powerdns.md) | ✅ | ✅ | ✅ | ✅ |
| [`REALTIMEREGISTER`](realtimeregister.md) | ✅ | ❔ | ✅ | ✅ |
| [`ROUTE53`](route53.md) | ✅ | ✅ | ✅ | ✅ |
| [`RWTH`](rwth.md) | ✅ | ❔ | ✅ | ❌ |
| [`SAKURACLOUD`](sakuracloud.md) | ✅ | ✅ | ❌ | ❌ |
| [`TRANSIP`](transip.md) | ✅ | ❌ | ✅ | ✅ |
| [`VULTR`](vultr.md) | ✅ | ❔ | ✅ | ❌ |
### DNSSEC <!--(table 6/6)-->
| Provider name | [`AUTODNSSEC`](../language-reference/domain-modifiers/AUTODNSSEC_ON.md) | [`DNSKEY`](../language-reference/domain-modifiers/DNSKEY.md) | [`DS`](../language-reference/domain-modifiers/DS.md) |
| ------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------- |
| [`AKAMAIEDGEDNS`](akamaiedgedns.md) | ✅ | ❔ | ❌ |
| [`AUTODNS`](autodns.md) | ❔ | ❔ | ❌ |
| [`AXFRDDNS`](axfrddns.md) | ✅ | ❌ | ✅ |
| [`BIND`](bind.md) | ✅ | ✅ | ✅ |
| [`BUNNY_DNS`](bunny_dns.md) | ✅ | ❔ | ❌ |
| [`CLOUDFLAREAPI`](cloudflareapi.md) | ❔ | ❌ | ✅ |
| [`CLOUDNS`](cloudns.md) | ✅ | ❔ | ❔ |
| [`DESEC`](desec.md) | ✅ | ✅ | ✅ |
| [`DNSIMPLE`](dnsimple.md) | ✅ | ❔ | ❌ |
| [`DNSMADEEASY`](dnsmadeeasy.md) | ❔ | ❔ | ❌ |
| [`DOMAINNAMESHOP`](domainnameshop.md) | ❌ | ❔ | ❔ |
| [`GANDI_V5`](gandi_v5.md) | ❔ | ❔ | ❌ |
| [`GCORE`](gcore.md) | ✅ | ❔ | ❌ |
| [`HEDNS`](hedns.md) | ❌ | ❔ | ❌ |
| [`HETZNER`](hetzner.md) | ❌ | ❔ | ✅ |
| [`HOSTINGDE`](hostingde.md) | ✅ | ❔ | ✅ |
| [`HUAWEICLOUD`](huaweicloud.md) | ❔ | ❔ | ❌ |
| [`INWX`](inwx.md) | ✅ | ❔ | ❔ |
| [`LOOPIA`](loopia.md) | ❌ | ❔ | ❌ |
| [`NETLIFY`](netlify.md) | ❌ | ❔ | ❌ |
| [`NS1`](ns1.md) | ✅ | ❔ | ✅ |
| [`ORACLE`](oracle.md) | ❔ | ❔ | ❌ |
| [`PORKBUN`](porkbun.md) | ❌ | ❔ | ❌ |
| [`POWERDNS`](powerdns.md) | ✅ | ✅ | ✅ |
| [`REALTIMEREGISTER`](realtimeregister.md) | ✅ | ❔ | ❌ |
| [`SAKURACLOUD`](sakuracloud.md) | ❌ | ❌ | ❌ |
| [`TRANSIP`](transip.md) | ❌ | ❌ | ❌ |
<!-- provider-matrix-end -->
### Providers with "official support"