{"id":37995972,"url":"https://github.com/plaenkler/ddns-updater","last_synced_at":"2026-04-26T00:01:10.048Z","repository":{"id":114106107,"uuid":"601767254","full_name":"Plaenkler/DDNS-Updater","owner":"Plaenkler","description":"DDNS client with user-friendly frontend","archived":false,"fork":false,"pushed_at":"2026-04-25T23:07:16.000Z","size":1269,"stargazers_count":8,"open_issues_count":2,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-25T23:27:13.272Z","etag":null,"topics":["ddns","ddns-client","ddns-updater","docker-image","dynamic-dns"],"latest_commit_sha":null,"homepage":"https://github.com/Plaenkler/DDNS-Updater","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Plaenkler.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"Plaenkler"}},"created_at":"2023-02-14T19:22:24.000Z","updated_at":"2026-04-25T22:14:58.000Z","dependencies_parsed_at":"2023-08-19T04:01:00.132Z","dependency_job_id":"fa84f8ca-4b88-4392-82f5-2ddec7d4e9e6","html_url":"https://github.com/Plaenkler/DDNS-Updater","commit_stats":null,"previous_names":["plaenkler/ddns"],"tags_count":146,"template":false,"template_full_name":null,"purl":"pkg:github/Plaenkler/DDNS-Updater","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Plaenkler%2FDDNS-Updater","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Plaenkler%2FDDNS-Updater/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Plaenkler%2FDDNS-Updater/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Plaenkler%2FDDNS-Updater/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Plaenkler","download_url":"https://codeload.github.com/Plaenkler/DDNS-Updater/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Plaenkler%2FDDNS-Updater/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32280981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"ssl_error","status_checked_at":"2026-04-25T18:29:32.149Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ddns","ddns-client","ddns-updater","docker-image","dynamic-dns"],"created_at":"2026-01-16T18:52:51.520Z","updated_at":"2026-04-26T00:01:10.029Z","avatar_url":"https://github.com/Plaenkler.png","language":"Go","funding_links":["https://github.com/sponsors/Plaenkler","https://www.buymeacoffee.com/Plaenkler"],"categories":[],"sub_categories":[],"readme":"# 🌐 DDNS Updater\n\n[![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)\n[![Release](https://img.shields.io/badge/Calver-YY.WW.REVISION-22bfda.svg)](https://calver.org/)\n[![Linters](https://github.com/plaenkler/ddns-updater/actions/workflows/linters.yml/badge.svg)](https://github.com/plaenkler/ddns-updater/actions/workflows/linters.yml)\n[![Go Report](https://goreportcard.com/badge/github.com/plaenkler/ddns-updater)](https://goreportcard.com/report/github.com/plaenkler/ddns-updater)\n[![CQL](https://github.com/plaenkler/ddns-updater/workflows/CodeQL/badge.svg)](https://github.com/plaenkler/ddns-updater)\n[![Support me](https://img.shields.io/badge/Support%20me%20%E2%98%95-orange.svg)](https://www.buymeacoffee.com/Plaenkler)\n\nDDNS Updater provides a straightforward way to update dynamic DNS records without messing with the command-line or a file.\nThe user-friendly interface allows for straightforward secure setup and management.\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"https://user-images.githubusercontent.com/60503970/219900612-b4d7d3c4-7e0a-4dca-bc73-63c4822c5133.png\" width=\"480\" alt=\"DDNS Updater Dashboard\"/\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://user-images.githubusercontent.com/60503970/219900611-dfaa9c4b-13ac-4fc4-b7ca-1cdae47961a9.png\" width=\"480\" alt=\"DDNS Updater add Job\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## 🎯 Noteworthy features\n\n- [x] Simple \u0026 User friendly UI\n- [x] Secure authentication with TOTP\n- [x] Encryption of sensitive data\n- [x] Scheduled update service\n- [x] Supports multiple IP resolvers\n- [x] Deploy as Windows Service\n- [x] Available as Docker Container\n- [x] Custom update URL with check\n\n## 🏷️ Supported providers\n\n`Strato` `DDNSS` `Dynu` `Aliyun` `NoIP` `DD24` `INWX` `Infomaniak` `Hetzner` `IONOS`\n\n\u003e **Note:** If your DynDNS provider is not listed open an issue and I will integrate it.\n\n### Custom provider\n\nSelect the provider **Custom** from the provider list.\nThen enter the user-defined URL in the **URL** field.\nUse the placeholder `\u003cipv4\u003e` at the point where the IPv4 address is to be inserted.\nIn the **“Check”** field, enter a string that will be used for checking to ensure that the update server's response is successful.\n\n## 📜 Installation guide\n\n### 🐋 Deploy with Docker\n\nIt is recommended to use [Compose](https://docs.docker.com/compose/) as it is very convenient. The following examples show simple deployment options:\n\n#### Bridge network\n\n```yaml\n---\n\nservices:\n  ddns:\n    image: plaenkler/ddns-updater:latest\n    container_name: ddns\n    restart: always\n    networks:\n      - web\n    ports:\n      - 80:80\n    volumes:\n      - ./ddns:/app/data\n    environment:\n      - DDNS_INTERVAL=600\n      - DDNS_TOTP=false\n      - DDNS_PORT=80\n\nnetworks:\n  web:\n    external: false\n```\n\n#### Macvlan network\n\n```yaml\n---\n\nservices:\n  ddns:\n    image: plaenkler/ddns-updater:latest\n    container_name: ddns\n    restart: always\n    networks:\n      web:\n        ipv4_address: 10.10.10.2\n    volumes:\n      - ./ddns:/app/data\n    environment:\n      - DDNS_INTERVAL=600\n      - DDNS_TOTP=false\n      - DDNS_PORT=80\n\nnetworks:\n  web:\n    name: web\n    driver: macvlan\n    driver_opts:\n      parent: eth0\n    ipam:\n      config:\n        - subnet: \"10.10.10.0/24\"\n          ip_range: \"10.10.10.0/24\"\n          gateway: \"10.10.10.1\"\n```\n\n\u003e **Note:** DDNS Updater can also be deployed behind a proxy like [Traefik](https://doc.traefik.io/traefik/) or [NGINX](https://www.nginx.com/).\n\n### 📄 Build from source\n\nDDNS Updater requires the following software to be installed on your system:\n\n- [Go](https://golang.org/dl/)\n- [CGO](https://gist.github.com/Plaenkler/0c319b89fbc884a928612b7fdef97fbd)\n\n**Windows Service**\n\nAfter cloning the repository, navigate to the root of the source tree and run the following command to build the executable file:\n\n```text\ngo build -o ddns-updater.exe cmd/svc/main.go\n```\n\nThe program can then be stored in any file path and set up as a service using the CMD:\n\n```text\nsc create DDNS-Updater binPath=[INSTALL_DIR]\\ddns-updater.exe type=share start=auto DisplayName=DDNS-Updater\n```\n\n**Standalone application**\n\nTo build the standalone application, run the following command:\n\n```text\ngo build -o ddns-updater cmd/def/main.go\n```\n\n### ⚙️ Configuration\n\nDepending on personal preferences, there are several ways to configure DDNS Updater. Users can select from three different methods:\n\n**1. User Interface (Frontend)**\n\nThe easiest way to configure DDNS Updater is to use the integrated web interface. This can be accessed via the browser at `http://host-ip`.\nChanges to the interval take effect immediately. The program must be restarted for the other settings to take effect.\n\n**2. Configuration File**\n\nA config.yaml file is provided to store all settings. In the absence of this file, the program generates one. Users have the option to directly modify settings within this file. It is important to note that changes made here will only take effect upon restarting the program. Default settings within the file are as follows:\n\n```yaml\n# How often the IP address is checked in seconds\nInterval: 600\n# Enable TOTP authentication\nTOTP: false\n# Port for the web interface\nPort: 80\n# Custom IP resolver returns IPv4 address in plain text\nResolver: \"\"\n```\n\n**3. Environment Variables**\n\nAn alternative to the configuration file are environment variables. During the program start these are read they are superordinate to the configuration file.\n\n```text\nDDNS_INTERVAL=600\nDDNS_TOTP=false\nDDNS_PORT=80\nDDNS_RESOLVER=ipv4.example.com\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplaenkler%2Fddns-updater","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplaenkler%2Fddns-updater","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplaenkler%2Fddns-updater/lists"}