{"id":20153744,"url":"https://github.com/zachstence/cloudflare-ddns","last_synced_at":"2026-05-06T13:04:18.225Z","repository":{"id":106797787,"uuid":"477202761","full_name":"zachstence/cloudflare-ddns","owner":"zachstence","description":"Automatically update Cloudflare DNS when your public IP changes","archived":false,"fork":false,"pushed_at":"2024-01-05T16:41:51.000Z","size":185,"stargazers_count":0,"open_issues_count":3,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-03T01:28:25.067Z","etag":null,"topics":["cloudflare","ddns","docker","ipify","typescript"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/zachstence/cloudflare-ddns","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zachstence.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-03T00:30:31.000Z","updated_at":"2022-04-03T21:47:44.000Z","dependencies_parsed_at":"2024-01-05T17:50:16.884Z","dependency_job_id":null,"html_url":"https://github.com/zachstence/cloudflare-ddns","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/zachstence/cloudflare-ddns","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachstence%2Fcloudflare-ddns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachstence%2Fcloudflare-ddns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachstence%2Fcloudflare-ddns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachstence%2Fcloudflare-ddns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zachstence","download_url":"https://codeload.github.com/zachstence/cloudflare-ddns/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachstence%2Fcloudflare-ddns/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32694980,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T08:33:17.875Z","status":"ssl_error","status_checked_at":"2026-05-06T08:33:17.221Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["cloudflare","ddns","docker","ipify","typescript"],"created_at":"2024-11-13T23:21:14.180Z","updated_at":"2026-05-06T13:04:18.198Z","avatar_url":"https://github.com/zachstence.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cloudflare-ddns\nAutomatically update your Cloudflare DNS when your public IP changes\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/zachstence/cloudflare-ddns/blob/main/LICENSE\"\u003e\n        \u003cimg alt=\"license mit\" src=\"https://img.shields.io/github/license/zachstence/cloudflare-ddns?style=for-the-badge\" /\u003e\n    \u003c/a\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://hub.docker.com/r/zachstence/cloudflare-ddns\"\u003e\n        \u003cimg alt=\"docker pulls\" src=\"https://img.shields.io/docker/pulls/zachstence/cloudflare-ddns?style=for-the-badge\" /\u003e\n        \u003cimg alt=\"docker size\" src=\"https://img.shields.io/docker/image-size/zachstence/cloudflare-ddns?style=for-the-badge\" /\u003e\n    \u003c/a\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"#\"\u003e\n        \u003cimg alt=\"wakatime\" src=\"https://wakatime.com/badge/user/2a0a4013-ea89-43b7-99d9-1a215b4c34d0/project/440bac4f-98d5-4762-ac2f-117b0ea4c805.svg?style=for-the-badge\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n## Table of Contents\n- [Usage](#usage)\n  - [Run using Docker](#run-using-docker)\n  - [Run using `docker-compose`](#run-using-docker-compose)\n- [Future Features](#future-features)\n\n## Usage\n1. [Create a Cloudflare API token](https://developers.cloudflare.com/api/tokens/create/) with the following configuration\n\n    ![docs/permissions.png](docs/permissions.png)\n\n    Permissions\n    - Zone - Zone - Read\n    - Zone - DNS - Edit\n\n    Zone Resources\n    - Include - All zones\n\n2. [Identify your Cloudflare Zone ID](https://developers.cloudflare.com/fundamentals/get-started/basic-tasks/find-account-and-zone-ids/)\n\n    ![docs/zone-id.png](docs/zone-id.png)\n\n3. Copy [`config.json.template`](config.json.template) to a new file named `config.json`\n\n    | Config                  | Description                                                  | Example                                    |\n    | ----------------------- | ------------------------------------------------------------ | ------------------------------------------ |\n    | `cloudflare.apiToken`   | A Cloudflare API Token with the [proper permissions](#usage) | `XDX6YXn0MU2tpwJUa49UYLrtS5r4q-Ia9ng6H5Pu` |\n    | `zones.zoneId`          | The Zone ID of the domain you want to update DNS for         | `gq3pvvxfr6x4fpfdgz7w7n4d3ckfk9pk`         |\n    | `zones.recordNames`     | The name of each record you would like to update             | `example.com`                              |\n    | `intervalSeconds`       | How often to check your DNS records (in seconds)\u003csup\u003e1\u003c/sup\u003e | `300`                                        |\n\n    \u003csup\u003e1\u003c/sup\u003e [Cloudflare's Rate Limits](https://support.cloudflare.com/hc/en-us/articles/200171456-How-many-API-calls-can-I-make) are pretty lenient, so feel free to set the interval as small as you want.\n\n4. Run `cloudflare-ddns` using your `config.json`\n\n    #### Run using Docker\n    ```sh\n    docker run \\\n        -v /path/to/config.json:/app/config.json \\\n        zachstence/cloudflare-ddns\n    ```\n\n    #### Run using `docker-compose`\n    ```yaml\n    version: \"3.8\"\n\n    services:\n    cloudflare-ddns:\n        image: zachstence/cloudflare-ddns\n        volumes:\n        - /path/to/config.json:/app/config.json:ro\n        restart: unless-stopped\n    ```\n\n## Future Features\n- Accept file for Cloudflare API token to enable better security (Docker secrets)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzachstence%2Fcloudflare-ddns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzachstence%2Fcloudflare-ddns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzachstence%2Fcloudflare-ddns/lists"}