Introducing libdns: A collaborative effort for unified DNS provider APIs

libdns is a collection of free-range DNS provider client implementations written in Go. With libdns packages, your Go program can manage DNS records across any supported providers.

Caddy previously used go-acme/lego for DNS providers (75+ of them!) but those packages can only set and delete TXT records for ACME challenges. Other libraries like StackExchange/dnscontrol are useful if you need to control the whole zone, but not if you need incremental changes to a zone.

libdns APIs have methods like AppendRecords() and DeleteRecords(). See the libdns README and godoc for details.

I’m posting this here because Caddy uses these libraries, and I’ll need your help to implement the providers that you use. For more background, see:

Note that libdns APIs may not be able to express all of the nuances of each provider and DNS record type. But, it should be able to meet the needs of 90% of users who need to make adjustments to their DNS records. The API or its semantics may change slightly as we iron out the details to maximize cross-platform and cross-record-type compatibility along with simplicity and uniformity, while minimizing complexity and obscurity (for example, we want to avoid pointer types so as to reduce the possibility of panics from nil pointer dereferences).

If you can write Go, please help by getting involved! The linked README has instructions for contributing. Feel free to open issues if you think the APIs need to be improved, too.

1 Like

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.