When the world needed it the least, an all new universal DDNS client was born.
Find a file
2026-01-08 20:41:22 +05:00
docs asdsad 2025-10-17 19:21:44 +05:00
src release 0.1.1 2026-01-08 19:27:02 +05:00
.gitignore Initial commit 2024-07-16 19:59:30 +05:00
Cargo.lock release 0.1.2 2026-01-08 20:19:04 +05:00
Cargo.toml release 0.1.2 2026-01-08 20:19:04 +05:00
Containerfile container build system pinning 2026-01-08 20:41:22 +05:00
justfile justfile fix 2026-01-08 19:28:03 +05:00
mkdocs.yml asdsad 2025-10-17 19:21:44 +05:00
README.md README cleanup 2025-10-17 19:24:46 +05:00

ddnnss

When the world needed it the least, it appeared - a universal dynamic DNS client, written in Rust.

This software is created so you configure it once and forget its existence, while it does the job of configuring DNS records for you - reliably and with a low footprint.

Features

  • High configurability
  • Support for many IP resolvers and DNS/DDNS providers
  • Support for IPv4 and IPv6
  • Low memory and CPU usage
  • Easy to add your own resolvers and providers
  • Different resolve modes

Usage

  1. Install ddnnss using cargo install ddnnss or with your preferred distro package manager.
  2. Configure the client (see Configuration below)
  3. Run it in the foreground or in the background, for example with a systemd service.

Configuration

If you downloaded ddnnss from a package manager, it may include a configuration file. If not, you can generate one using ddnnss generate-config [path], then put it in a common directory or use it with ddnnss --config [path].

Adding resolvers and providers

Resolvers: custom API

If you get your IP from a JSON or plaintext api, you might not even need to modify the code!

You can just use CustomJSONApi or CustonPlaintextApi resolvers.

Resolvers and providers

You basically need a file in a correct directory (src/{resolver,provider}/your_provider.rs) and have a struct with your configuration with implementation of Resolver/Provider trait marked with #[typetag::serde].

The *State structs provide you with global, configured HTTP reqwest client if you need to make HTTP requests.