A very minimal dynamic DNS tool to routinely update Cloudflare DNS records with my latest IP address.
  • TypeScript 75.8%
  • Shell 18.4%
  • Dockerfile 3.6%
  • Nix 2.2%
Find a file
NachoToast c83e07fdef
Merge pull request 'refactor: migrate to deno' (#1) from skylar/dddns:main into main
Reviewed-on: #1
Reviewed-by: NachoToast <nachotoast@noreply.forge.elsie.cafe>
2026-06-20 04:26:06 +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 refactor: migrate to deno 2026-06-20 03:24:57 +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 Revert "chore: run deno fmt" 2026-06-20 03:54:46 +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 Revert "chore: run deno fmt" 2026-06-20 03:54:46 +12:00
Dockerfile first commit 2026-02-05 20:55:08 +13: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 Revert "chore: run deno fmt" 2026-06-20 03:54:46 +12:00
SETUP_GUIDE.md Revert "chore: run deno fmt" 2026-06-20 03:54:46 +12:00

BunDDNS

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.