Self-hosted service
TimothyYe/godns avatar
TimothyYe/godns

GoDNS: A Self-Hosted DDNS Client with 21 Providers and a Built-In Web Panel

A dynamic DNS client tool that supports AliDNS, Cloudflare, Google Domains, DNSPod, HE.net & DuckDNS & DreamHost, etc, written in Go.

1,778 stars247 forksGoApache-2.0

At a glance

What is it?
GoDNS is a Go-based dynamic DNS client that updates records across 21 providers, including Cloudflare, AliDNS, and HE.net. It offers a web panel and multiple deployment paths, but root domain support is uneven and the project's own hosted service competes with it.
Who is it for?
Adopt GoDNS if you self-host a domain on a supported provider and want a single binary or Docker container to keep A and AAAA records current, especially if you need the web panel or MIPS router support. Skip it if you need guaranteed root domain updates across all providers, if you prefer a managed service (then use godns.app or a provider-native client), or if you cannot tolerate the extra moving part of a web panel.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What GoDNS Solves and Who It Is For

GoDNS addresses the problem of keeping DNS records in sync with a changing public IP address. If you host a service at home, on a VPS with a non-static IP, or on a router, you need a dynamic DNS client to update the A or AAAA record when the IP changes. GoDNS is a self-hosted client written in Go, a rewrite of an earlier DynDNS project. It targets individuals who own a domain and have delegated it to a supported DNS provider. The README also notes a free alternative: you can use DuckDNS to get a subdomain without owning a domain. The tool is for people who want control over the update process rather than relying on a third-party managed service. It is not for users who want zero configuration or who use a provider outside the 21 listed.

Provider Coverage and the Root Domain Caveat

The README lists 21 DNS providers, from Cloudflare and DigitalOcean to smaller ones like Strato and LoopiaSE. The feature table shows that all providers support IPv4 and IPv6, but root domain support varies. Google Domains, Dynv6, DuckDNS, Dreamhost, No-IP, Strato, LoopiaSE, Infomaniak, OVH, Dynu, IONOS, and TransIP do not support root domain updates. The README points to a GitHub issue (#76) for the current status of root domain DDNS, which suggests this is a known limitation and not a static guarantee. If you need to update the apex domain, you must check whether your provider is in the supported group. The table is a quick reference, but the issue link implies that support may change. This is a concrete constraint: before adopting, verify your provider's root domain capability, because the tool cannot work around provider API limits.

How It Works: Configuration and Update Loop

GoDNS runs as a daemon that periodically checks the public IP and compares it to the DNS record. The exact mechanism is not detailed in the README, but the configuration uses a TOML file, likely named config.toml based on the project's history. The README mentions a 'Configuration' section and a sample config, though the truncated text does not show the full keys. Based on typical GoDNS usage, you set provider credentials, domain, subdomain, and an interval. The tool then queries an external IP service, compares the current IP to the last known value, and calls the provider's API to update the record if it changed. The web panel, described as built-in, likely exposes a status page and manual update control, but the README does not specify its endpoints. The documentation states that the web panel is part of the open-source project, but the hosted version at godns.app is separate. The update loop is straightforward, but the lack of detail in the README means you should inspect the sample config after installation.

Getting It Running: Installation and Platforms

The README gives several installation paths. On macOS or Linux, you can use Homebrew: brew install godns. For containers, there is a Docker image at timothyye/godns, and the README links to Docker Hub. You can also download a compiled binary from the releases page. Building from source is covered in the Installation section, which is truncated but likely involves go get or git clone and go build. The supported platforms include Linux, macOS, ARM Linux (Raspberry Pi), Windows, and MIPS32. The MIPS support is notable: the README gives a command to cross-compile for routers: GOOS=linux GOARCH=mips/mipsle GOMIPS=softfloat go build -a. That command is specific and confirms router deployment is a real use case. For configuration, you need to create a TOML file with provider-specific keys. The README does not list the exact keys in the visible text, so the first step after installation should be to read the sample config in the repository. The Docker path is the fastest for container users, but the binary is simplest for a single host.

The Web Panel: A Differentiator with Trade-offs

GoDNS includes a built-in web panel, which is unusual for a DDNS client. Most clients are headless daemons. The panel likely gives you a browser interface to view status, trigger updates, and edit settings. This is a selling point for users who want visibility without SSH. However, it also adds attack surface: a web server listening on a port, even on localhost, is another service to secure. The README does not specify authentication for the panel, which is a concern. If the panel binds to a public interface without a password, anyone could trigger updates or read your provider credentials. The documentation should be checked for security guidance. The hosted version at godns.app is a separate product, so the open-source panel is not a managed service. For a headless router deployment, the web panel may be unnecessary overhead. The trade-off is real: convenience versus complexity.

Maintenance and Upgrade Cost

GoDNS is under active development, with releases v3.4.3, v3.4.2, and v3.4.1 pushed in 2026. The last push date is 2026-07-26, so the project is not abandoned. The release cadence suggests regular bug fixes and provider updates. Upgrading is straightforward if you use Homebrew (brew upgrade godns) or pull a new Docker image. The Apache-2.0 license means you can use it freely, even commercially, with attribution. There is no indication of a migration cost between versions, but the README does not mention upgrade notes. The main maintenance cost is keeping the config file in sync with new releases, especially if provider APIs change. The provider list is large, and each provider may have different rate limits or API changes. The project's maintainer updates the code, but you must test after upgrades. The Docker image size is not specified, but the badge suggests it is tracked. The license is permissive, so no legal friction for adoption.

Alternatives and When GoDNS Is the Wrong Tool

The main alternative is the hosted service godns.app, which the README itself promotes. That service removes the need to run your own server, manage DNS manually, or even own a domain in advance. The difference is approach: GoDNS is self-hosted software you install and configure, while godns.app is a managed service where you delegate updates to a third party. Another alternative is using each provider's own DDNS client, such as DuckDNS's script or Cloudflare's dynamic update tools. Those are provider-specific and simpler, but they do not give you a unified interface across multiple providers. GoDNS is the wrong tool if you only use one provider and want minimal setup, because a provider-specific client may be lighter. It is also wrong if you need root domain updates on a provider that does not support it, as the table shows. The web panel is a differentiator, but if you do not need it, a simpler client may suffice. The choice depends on whether you value multi-provider flexibility and a UI over minimalism.

Editorial conclusion

Adopt GoDNS if you self-host a domain on a supported provider and want a single binary or Docker container to keep A and AAAA records current, especially if you need the web panel or MIPS router support. Skip it if you need guaranteed root domain updates across all providers, if you prefer a managed service (then use godns.app or a provider-native client), or if you cannot tolerate the extra moving part of a web panel. Before adopting, verify that your provider is in the supported list, confirm whether root domain updates work for that provider (the README points to issue #76 for status), and test the config format against the sample config.toml. The project is actively maintained with recent releases, but you must check your specific provider's capabilities rather than assuming the full feature table applies.

Official sources

  1. Official README
  2. Project repository
  3. Release notes
Community notes

Community notes