selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
ddns logo

Self-host ddns

4.0.11

Personal DDNS client using DigitalOcean DNS

ReleaseOpen SourceMIT
Updated9 hours ago
LanguageGo
Setup difficultyEasy
Stars
268
Docker
skibish/ddns

What is ddns?

DDNS is a personal Dynamic DNS client written in Go that uses DigitalOcean's DNS as its backend. It runs as a daemon that periodically checks the public IP address and updates configured DNS records (A, TXT, etc.) on DigitalOcean. The tool supports multiple domains and records per domain, IPv6, configurable check intervals, and notifications via Gotify, SMTP, or Telegram when IP changes occur. It can be run as a standalone binary (Linux, macOS, Windows) or via Docker. Configuration is done through a YAML file or environment variables. There is no web UI; it operates as a background service.

Should you self-host ddns?

ddns scores 48/100 on selfhost.directory (how scoring works) and ranks #26 of 41 in DNS. It has 268 GitHub stars.

It shipped 2 stable releases in the past year. The latest, 4.0.11, came out on 24 October 2026.

Setup is easy: most people get it running in one sitting. An official Docker image is available. It is MIT-licensed and written mostly in Go.

Its closest alternative on selfhost.directory is Pi-hole (87/100, 61 531 stars). It scores higher overall, so compare the two before you pick. See ddns vs Pi-hole side by side.

Features

  • Cross-platform binaries
  • Environment Variable Configuration

ddns README

How to configure ddns

  • check-period5m0sCheck if IP has been changed period (default 5m0s)

    Check if IP has been changed period (default 5m0s)

  • checkPeriod5mIP check interval (default 5m)

    IP check interval (default 5m)

  • conf-fileLocation of the configuration file (default searches current directory then $HOME for ddns.yml)

    Location of the configuration file (default searches current directory then $HOME for ddns.yml)

  • DDNS_CHECKPERIODIP check interval via environment variable

    IP check interval via environment variable

  • DDNS_IPV6Enable IPv6 via environment variable

    Enable IPv6 via environment variable

    values: true, false

  • DDNS_REQUESTTIMEOUTRequest timeout via environment variable

    Request timeout via environment variable

  • DDNS_TOKENDigitalOcean API token via environment variable

    DigitalOcean API token via environment variable

  • domainsList of domains and their records to update

    List of domains and their records to update

  • ipv6falseEnable IPv6 address resolution (default false)

    Enable IPv6 address resolution (default false)

    values: true, false

  • notificationsNotification configuration (Gotify, SMTP, Telegram)

    Notification configuration (Gotify, SMTP, Telegram)

  • paramsAdditional template parameters for record data

    Additional template parameters for record data

  • req-timeout10sRequest timeout to external resources (default 10s)

    Request timeout to external resources (default 10s)

  • requestTimeout10sTimeout to external resources (default 10s)

    Timeout to external resources (default 10s)

  • tokenDigitalOcean API token (mandatory)

    DigitalOcean API token (mandatory)

ddns releases & version history

More in DNS

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…