CDNS (change DNS) is a dead-simple terminal tool that handles the messy details of systemd-resolved and NetworkManager for you, so you can swap DNS providers in seconds without the headache.
- 🔐 Privacy in a click: Easily switch to trusted providers like Quad9, Cloudflare, or AdGuard for a more secure browsing experience.
- ✨ Terminal-first: A clean, reactive TUI that makes managing network settings actually enjoyable.
- 🧠 Zero-config discovery: It just works. Whether you're on NetworkManager, systemd-resolved, or a plain old resolv.conf, CDNS finds it and handles the heavy lifting.
- 🚑 Fail-safe: Messed something up? Roll back to your previous configuration instantly with zero stress.
While CDNS is designed to work across various operating systems, here is the current status:
| Operating System | Distribution | Status |
|---|---|---|
| Linux | Ubuntu | ✅ Verified |
| Linux | Debian | |
| Linux | AlmaLinux | ✅ Verified |
| Linux | Fedora | |
| Linux | Arch Linux | |
| Linux | Manjaro | |
| Linux | Pop!_OS | |
| Linux | Linux Mint | |
| Linux | openSUSE | |
| Linux | NixOS | |
| Linux | CentOS | |
| Linux | Kali Linux | |
| macOS | Darwin | 🏗️ WIP |
| Windows | Windows 10+ | 🏗️ WIP |
If it works for you on an untested distro, please let us know!
The easiest way to install the latest release is via our installer script:
curl -sfL https://raw.githubusercontent.com/junevm/cdns/main/install.sh | shIf you have Go installed:
go install github.com/junevm/cdns@latestbrew tap junevm/homebrew-tap
brew install cdnsDownload the latest binary for your architecture from the Releases page.
CDNS works in two ways: through a friendly Interactive TUI (best for discovery) or via Quick Commands (best for automation and power users).
Just run cdns without any arguments to open the main menu. From here, you can navigate through all features using your arrow keys.
cdnsFor those who prefer the speed of the command line, CDNS provides a set of intuitive subcommands.
The set command is the heart of CDNS. You can use it with a preset name, custom IPs, or even target specific interfaces.
Note: Changing system DNS settings typically requires
sudoprivileges.
# Apply a preset (e.g., Cloudflare, Google, AdGuard, Yandex)
cdns set cloudflare
# Use custom IP addresses
cdns set 1.1.1.1 8.8.8.8
# Target a specific network interface
cdns set google --interface eth0Helpful Flags for set:
--dry-run: See what would happen without making any actual changes.--interfaceor-i: Manually specify which interfaces to modify.--yes: Skip confirmation prompts (perfect for scripts).
Not sure which provider to use? List all available presets to see names and IP addresses.
cdns listVerify your active DNS configuration and see which backend (NetworkManager, systemd-resolved, etc.) is being used.
cdns status
# Pro tip: Use --json for machine-readable output
cdns status --jsonIf you need to roll back to your previous configuration, the reset command has your back.
cdns resetSee CONTRIBUTING.md for guidelines on how to contribute to this project.
See LICENSE for details.