github mietzen/porkbun-ddns v2.0.0

2 hours ago

Breaking changes

This release contains breaking changes to the public API, the CLI, and configuration handling.

1. PorkbunDDNS constructor signature

  • Before: PorkbunDDNS(config, domain, ipv4=..., ipv6=...)
  • After: PorkbunDDNS(credentials, retry, domain, public_ips=..., ipv4=..., ipv6=...)

The single monolithic Config is split into AppConfig with three sub-configs:

  • Credentialsapikey, secretapikey, endpoint
  • RetryPolicyretry_count, retry_delay
  • WebhookConfigwebhook_url, webhook_template, webhook_template_file

Load a full config object via AppConfig/extract_config, and pass app.credentials and app.retry to the constructor.

2. --fritzbox / -f CLI flag removed

Fritz!Box IP discovery is no longer core. It lives in a new fritzbox-ips console-script sidecar.

Migrate:

# before
porkbun-ddns domain.com --fritzbox fritz.box

# after
porkbun-ddns domain.com --public-ips "$(fritzbox-ips fritz.box)"

3. Credentials.endpoint default

Credentials.endpoint now defaults to the real Porkbun endpoint (https://api.porkbun.com/api/json/v3) instead of raising when unset.

New features

  • PublicIPResolver — public IPv4/IPv6 discovery via public HTTP endpoints
  • fritzbox-ips sidecar console-script for Fritz!Box device retrieval
  • Dedicated PorkbunAPIClient with typed DNS endpoints
  • Webhook configuration extracted into WebhookConfig (Jinja templating)

Bug fixes

  • Fixed dual-IPv4 (Dual-Stack) replacement intents being duplicated
  • Fixed an IPv6-only Fritz!Box crash
  • Restored DEBUG logging in the update_records driver

Internal refactors

  • ConfigAppConfig with Credentials / RetryPolicy / WebhookConfig
  • Reconciliation logic extracted into a pure reconcile function returning Ensure intents
  • Migration of tests away from the private _api to the client seam
  • Docs updated (README, AGENTS.md, ADR-0003)

Don't miss a new porkbun-ddns release

NewReleases is sending notifications on new releases.