A very minimal dynamic DNS tool to routinely update Cloudflare DNS records with my latest IP address.
  • TypeScript 77.2%
  • Shell 18.7%
  • Nix 2.2%
  • Dockerfile 1.9%
Find a file
2026-09-11 16:08:42 +12:00
.vscode Revert "chore: run deno fmt" 2026-06-20 03:54:46 +12:00
images first commit 2026-02-05 20:55:08 +13:00
src Revert "chore: run deno fmt" 2026-06-20 03:54:46 +12:00
.dockerignore fix everything 2026-09-11 15:51:37 +12:00
.editorconfig first commit 2026-02-05 20:55:08 +13:00
.env.example first commit 2026-02-05 20:55:08 +13:00
.envrc refactor: migrate to deno 2026-06-20 03:24:57 +12:00
.gitignore refactor: migrate to deno 2026-06-20 03:24:57 +12:00
compose.yaml fix everything 2026-09-11 15:51:37 +12:00
config-schema.json Revert "chore: run deno fmt" 2026-06-20 03:54:46 +12:00
config.example.json Revert "chore: run deno fmt" 2026-06-20 03:54:46 +12:00
deno.json fix scripts 2026-09-11 16:08:42 +12:00
Dockerfile fix everything 2026-09-11 15:51:37 +12:00
flake.lock refactor: migrate to deno 2026-06-20 03:24:57 +12:00
flake.nix refactor: migrate to deno 2026-06-20 03:24:57 +12:00
implementation.sh remove .github stuff 2026-06-20 02:45:20 +12:00
LICENSE add license 2026-02-05 20:55:20 +13:00
README.md remove old names 2026-09-11 15:52:59 +12:00
SETUP_GUIDE.md remove old names 2026-09-11 15:52:59 +12:00

DDDNS

A very minimal dynamic DNS tool to routinely update Cloudflare DNS records with my latest IP address.

Setup

See the setup guide.

Details

  • Only updates A records.
  • Runs on startup and then every 5 minutes (on the minute).
  • For the purposes of efficiency, only the first record is checked when deciding whether to update all of them.
  • Supports multiple Cloudflare accounts.

Why

  • Why make this?

    Because I need a way to handle my IP address changing that doesn't involve a third party service like no-ip.

  • Why not use an existing tool?

    That's still a third-party service, plus this is basic enough that I can make it myself, so why not.

  • Why TypeScript?

    I did originally write this as a bash script, however I wanted the added monitoring functionality of Docker.

  • Why store variables in both .env and config.json?

    I use .env for sensitive information, since many applications have extra measures to "secure" it, such as VS Code not showing its contents in search results. However when variables start becoming more complicated than a simple key=value, I prefer to use JSON since it can be directly imported in TypeScript and I can make a schema for it.