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.
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:
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.