Infrastructure as code CLI that plans and applies declarative configuration files to create, change, and version cloud and service resources.
DNSControl/dnscontrol
Infrastructure as Code for DNS: define DNS records in a JavaScript-based config and push them to many providers.
- Stars
- 3,979
- Forks
- 550
- Open issues
- 32
- Last commit
- yesterday
What is it?
DNSControl manages DNS records as code. You describe zones and records in a JavaScript-compatible configuration file, and DNSControl compares that desired state with what each provider currently holds, then previews and applies the differences through the provider's API.
It ships with plugins for around 77 DNS providers and registrars, including Amazon Route 53, Cloudflare, Gandi, Google Cloud DNS, and self-hosted options such as ISC BIND and PowerDNS. One configuration can push the same records to several providers at once, which makes switching providers or testing a new one less risky. The tool runs on Linux, macOS, and Windows, and the provider model is designed so new providers can be added as plugins.
The project is written in Go and is typically run from the command line, in a Docker container, or through a GitHub Action, so DNS changes can be reviewed in pull requests and rolled out by CI.
Key features
- 01Describes DNS zones and records in a JavaScript-compatible config file.
- 02Previews changes against live providers before applying them with push.
- 03Syncs the same records to multiple DNS providers from one configuration.
- 04Supports around 77 DNS providers and registrars through plugins.
- 05Provides variables and macros to reuse IPs, SPF and MX settings across domains.
- 06Runs on Linux, macOS, and Windows, and is available as a Docker image.
Use cases
- Managing DNS records for many domains through Git and pull-request review.
- Migrating a zone from one DNS provider to another while keeping both in sync during testing.
- Automating DNS changes in CI/CD pipelines with the official GitHub Action.
- Keeping DNS records for self-hosted BIND or PowerDNS servers in version control.
Quick start
- 1
Install DNSControl from packages or source, following the official instructions
- 2
Run the interactive setup wizard to create creds.json and dnsconfig.js
dnscontrol init - 3
Or run it without installing, using the Docker container
docker run --rm -it -v "$(pwd):/dns" ghcr.io/dnscontrol/dnscontrol preview
Things to know
- REV() will switch from RFC2317 to RFC4183 after v5.0, which is a breaking change.
- The NAMEDOTCOM, OPENSRS and SOFTLAYER providers currently have no maintainer.
Topics
FAQ
- What is dnscontrol?
- Infrastructure as Code for DNS: define DNS records in a JavaScript-based config and push them to many providers. DNSControl manages DNS records as code. You describe zones and records in a JavaScript-compatible configuration file, and DNSControl compares that desired state with what each provider currently holds, then previews and applies the differences through the provider's API.
- Is dnscontrol free to use? What license does it have?
- dnscontrol is open source under the MIT license. Check the license terms before using it in commercial products.
- Is dnscontrol still maintained?
- Actively maintained. The last commit to dnscontrol was on Oct 21, 2026.
- What can I use dnscontrol for?
- Managing DNS records for many domains through Git and pull-request review. Migrating a zone from one DNS provider to another while keeping both in sync during testing. Automating DNS changes in CI/CD pipelines with the official GitHub Action. Keeping DNS records for self-hosted BIND or PowerDNS servers in version control.
- How do I install dnscontrol?
- Install DNSControl from packages or source, following the official instructions Run the interactive setup wizard to create creds.json and dnsconfig.js: dnscontrol init Or run it without installing, using the Docker container: docker run --rm -it -v "$(pwd):/dns" ghcr.io/dnscontrol/dnscontrol preview
- Where can I get dnscontrol?
- The source code and installation instructions are on GitHub: https://github.com/DNSControl/dnscontrol
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
Meshery is an open source cloud native manager for designing, deploying and operating Kubernetes infrastructure and applications across multiple clusters and clouds.
Self-hosted server control panel for deploying web apps, managing databases, Docker containers, DNS, backups and security on a VPS or dedicated server.
A declarative GitOps continuous delivery tool that syncs Kubernetes applications to the state defined in Git repositories.
Git-native feature flag platform that stores flags in your own Git repositories and deploys them alongside code.
OpenTofu is an open-source infrastructure-as-code tool for declaratively building, changing, and versioning cloud infrastructure.