Skip to content

Releases

DigitDNS v5.8.15 — complete DNS, relay and ad blocking

Choose a tag to compare

@github-actions github-actions released this 15 Nov 08:29

DigitDNS v5.8.15 — quiet switches, a calm live log

A UI polish release on top of v5.8.14. No database schema migration is required;
existing settings, clients, blocklists, certificates, relay agents, egress
options and stored query history are preserved.

Fixed

  • Server-backed switches no longer animate when a page opens. They were
    rendered in the markup as off and corrected only after the settings fetch
    returned, so every visit replayed an OFF→ON slide. The six affected switches —
    Enable ad blocking, Relay mode, query-log Enabled, alerts Enabled,
    Public/Whitelist mode and Single upstream resolver — now start hidden with
    their space reserved and are revealed already carrying the saved value. A
    failed read reveals the markup state instead of leaving an invisible control.
  • The live-log status pill no longer flickers or shifts the toolbar. Every
    dropped EventSource used to paint three labels in a row — Reconnecting… from
    the error, Polling from the REST fallback, Live from the 1-second
    reconnect — and because the label changes width, the Pause/Clear buttons moved
    with it. Degraded states are now delayed: the current label holds through the
    first backoff, Reconnecting… appears after 1.5 s, and Polling only after
    12 s if the fallback is actually carrying the log. Any delivered frame restores
    Live in one step. The pill also has a fixed width for every label.
  • An idle stream is no longer labelled Polling. Opening the Logs tab, or
    returning to the browser, used to start the REST fallback whenever no query had
    arrived for three seconds — even though the EventSource was open and healthy.
    The fallback now starts only when the socket is not open; the buffered-stream
    check at connect time still detects a proxy that swallows the stream.
  • Android: the live-log connection chip moved to the right edge of the filter
    row.
    It used to sit at the end of the scrolling Reload/Sort/Pause/Clear row,
    which put it off-screen on a phone exactly when it mattered. The action chips
    scroll; the status stays pinned and visible.

Changed

  • The AdGuard rules field grows with the window. The Ad Blocking page's left
    column ended in dead space under the rule tester while the blocklist card ran
    to the bottom. The policy card now fills that height and the Custom filtering
    rules textarea absorbs it (minimum 9 rem, still resizable), so both columns end
    level at any window height. On a short window the card keeps its content height
    and the column scrolls instead of compressing the fields.

Upgrade

In-place upgrades from the dashboard are supported. The release assets include
the Linux amd64/arm64 hub binary, relay-agent binaries, the offline bundle,
checksums and their ed25519 signature, and the Android APKs attached from the
android-v5.8.15 tag.

curl -fsSL https://raw.githubusercontent.com/digitrob/DigitDNS/v5.8.15/scripts/install.sh | sudo bash

Docker:

docker pull ghcr.io/digitrob/digitdns:5.8.15
docker pull ghcr.io/digitrob/digitdns-agent:5.8.15
docker pull robmeister/digitdns:5.8.15
docker pull robmeister/digitdns-agent:5.8.15

Stable release (v5.8.15).
Recommended for production. Install with the one-liner in the README,
or upgrade in place from the dashboard's self-updater.
Full list of changes: docs/CHANGELOG.md.

Full Changelog: v5.8.14...v5.8.15

DigitDNS v5.8.14 — complete DNS, relay and ad blocking

Choose a tag to compare

@github-actions github-actions released this 15 Nov 07:07

DigitDNS v5.8.14 — query history parity and a live log that tells the truth

A polish and correctness release on top of v5.8.13. No database schema migration
is required; existing settings, clients, blocklists, certificates, relay agents,
egress options and stored query history are preserved.

Added

  • Query history is paged, not truncated. /api/query-log now returns a
    cursor (next_cursor / has_more) built from the stored record key, so both
    the web dashboard and the Android app can page through the whole retention
    window instead of seeing the newest slice and nothing else. One page is 100
    records by default, 500 at most.
  • Full-answer history on Android. History rows open the same DNS-response
    dialog as the live log: answer chain with TTLs, response code, latency,
    transports, cache state, upstream, block source and relay. Both screens now
    share one DnsDetails model, so the two views cannot drift apart.
  • Filters that match the data. Query history gained time range, query type,
    response code and cache-state filters on both clients, alongside the existing
    domain, client, action and protocol filters. Query type and response code are
    accepted as either wire numbers (28) or names (AAAA).
  • Visible connectivity. The live log has a status pill that says Live,
    Connecting, Reconnecting, Polling or Offline. The Android live log
    shows the stream state it was already tracking but never displayed. The panel
    reacts to the browser going offline and reconnects immediately when the network
    returns instead of waiting out the 30-second backoff.
  • Storage is visible and bounded. The query-log card shows how many records
    are stored and how much space they occupy against the configured cap, and the
    cap is now editable (64 MB to 2 GB). Cleanup enforces a storage cap.

Changed

  • CSV and JSON exports stream the whole result set — up to 100 000 records —
    instead of the first 1000 rows, and report truncation in an
    X-Query-Log-Truncated trailer when the ceiling is reached. CSV gained
    qtype_name, rcode_name, upstream, resolved_ips and answers.
  • The fallback poll revalidates. /api/stream/recent serves an ETag, so the
    two-second fallback costs a 304 with no body when the ring has not changed.
  • Query-log cleanup runs every 15 minutes and deletes in bounded batches, so a
    large retention sweep no longer stalls the store.
  • The mobile DNS-response panel becomes a full-width bottom sheet; the desktop
    popover keeps its caret and stays anchored beside the (i) button.

Fixed

  • Saving query-log settings no longer resets fields the form does not edit.
    The web card used to send opt_out: [] and max_mb: 256 on every save,
    silently un-excluding every opted-out client and resetting the storage cap.
  • Time filtering honours both bounds. The descending walk now breaks at the
    lower bound and skips rows newer than the upper bound; an upper bound used to
    return nothing.
  • Clearing history survives a pending flush. Clear is routed through the
    writer goroutine, so a batch already queued cannot land after the delete.
  • Records are serialised before the write transaction opens, shortening the
    time the query store is write-locked.

Upgrade

In-place upgrades from the dashboard are supported. The release assets include
the Linux amd64/arm64 hub binary, relay-agent binaries, the offline bundle,
checksums and their ed25519 signature, and the Android APKs attached from the
android-v5.8.14 tag.

curl -fsSL https://raw.githubusercontent.com/digitrob/DigitDNS/v5.8.14/scripts/install.sh | sudo bash

Docker:

docker pull ghcr.io/digitrob/digitdns:5.8.14
docker pull ghcr.io/digitrob/digitdns-agent:5.8.14
docker pull robmeister/digitdns:5.8.14
docker pull robmeister/digitdns-agent:5.8.14

Stable release (v5.8.14).
Recommended for production. Install with the one-liner in the README,
or upgrade in place from the dashboard's self-updater.
Full list of changes: docs/CHANGELOG.md.

Full Changelog: v5.8.13...v5.8.14

DigitDNS v5.8.13 — complete DNS, relay and ad blocking

Choose a tag to compare

@github-actions github-actions released this 14 Nov 19:38

DigitDNS v5.8.13 — live-log DNS response detail

A feature release on top of v5.8.11. No database schema migration is required;
existing settings, clients, blocklists, certificates, relay agents and egress
options are preserved.

Added

  • See what a query actually resolved to, from the live log. Both the web
    dashboard and the Android app can open a DNS-response panel for any row. It
    shows the answer section in the order the resolver returned it — the CNAME
    chain followed by the address records, each with its own TTL:

    Response code  NOERROR
    Response       CNAME: proud-forest-0346aa81e.4.azurestaticapps.net. (ttl=30)
                   CNAME: azurestaticappstm4.trafficmanager.net. (ttl=30)
                   A: 51.105.228.104 (ttl=30)
    

    It also carries the processing latency, the client and upstream transports,
    the cache state, the query type, the block source and the relay.

  • Web popover. Hovering the (i) button in the ACTION column opens a panel
    anchored beside it, with a caret pointing at the button. The pointer can move
    into the panel; moving away closes it. Values keep the same protocol colours
    used everywhere else in the panel.

  • Android dialog. Tap the domain on a live-log row to open a compact
    DNS-response dialog; long-press still copies the domain. The per-row info
    button was removed, so the row keeps its width for the domain.

Changed

  • Sub-millisecond latency is shown, not rounded. Cache hits, blocks and
    proxied names are usually answered in well under a millisecond and used to read
    0 ms; they now read values such as 0.042 ms.
  • Answer records are grouped under one Response field, one record per line,
    instead of repeating the label for each address.
  • Labels: Latency, Response code, Response, Query Type; block
    categories are spelled Ads, Tracker, Malware.

Fixed

  • Blocked queries no longer show the null-IP sinkhole (0.0.0.0) as a
    resolved answer.
    A block is a policy reply, not a resolution.
  • DNSCrypt keeps readable contrast on the light theme in the response panel.

Upgrade

In-place upgrades from the dashboard are supported. The release assets include
the Linux amd64/arm64 hub binary, relay-agent binaries, the offline bundle,
checksums and their ed25519 signature, and the Android APKs attached from the
android-v5.8.13 tag.

curl -fsSL https://raw.githubusercontent.com/digitrob/DigitDNS/v5.8.13/scripts/install.sh | sudo bash

Docker:

docker pull ghcr.io/digitrob/digitdns:5.8.13
docker pull ghcr.io/digitrob/digitdns-agent:5.8.13
docker pull robmeister/digitdns:5.8.13
docker pull robmeister/digitdns-agent:5.8.13

Stable release (v5.8.13).
Recommended for production. Install with the one-liner in the README,
or upgrade in place from the dashboard's self-updater.
Full list of changes: docs/CHANGELOG.md.

Full Changelog: v5.8.12...v5.8.13

DigitDNS v5.8.12 — complete DNS, relay and ad blocking

Choose a tag to compare

@github-actions github-actions released this 14 Nov 17:53

DigitDNS v5.8.11 — Android sinkhole status alignment

A patch release on top of v5.8.10. No database schema migration is required;
existing settings, clients, blocklists, certificates, relay agents and egress
options are preserved.

Fixed

  • Android: the folded Custom Blocklist (Sinkhole) row now puts its Blocked pill
    in the right-hand status column.
    It used to sit immediately after the
    chevron, on the left, while every domain row below carried its status pill on
    the right. The group row now lays the title/count out first and reserves the
    same gap + switch width as a domain row, so the Blocked pill lines up with the
    DIRECT/PROXY/BLOCKED pills it summarises. The pill width is shared with the row
    pills, so the column stays consistent at every font scale.

Also in this line (v5.8.10)

  • Type scale. The stylesheet gained a named text-size scale
    (--text-2xxs … --text-2xl, with line-height variants) and every hard-coded
    font-size: Npx was replaced with a token reference, so type adjustments are
    one-token changes rather than a sweep.
  • Semantic button intents. .btn-primary, .btn-ghost and .btn-soft carry
    their own token-based colours and render correctly on dark, light and grey
    without per-theme overrides. They replace the brittle
    [data-theme="grey"] button[class*="bg-cyan-500/"] substring selectors.

Upgrade

In-place upgrades from the dashboard are supported. The release assets include
the Linux amd64/arm64 hub binary, relay-agent binaries, the offline bundle,
checksums and their ed25519 signature, and the Android APKs attached from the
android-v5.8.11 tag.

curl -fsSL https://raw.githubusercontent.com/digitrob/DigitDNS/v5.8.11/scripts/install.sh | sudo bash

Docker:

docker pull ghcr.io/digitrob/digitdns:5.8.11
docker pull ghcr.io/digitrob/digitdns-agent:5.8.11
docker pull robmeister/digitdns:5.8.11
docker pull robmeister/digitdns-agent:5.8.11

Stable release (v5.8.12).
Recommended for production. Install with the one-liner in the README,
or upgrade in place from the dashboard's self-updater.
Full list of changes: docs/CHANGELOG.md.

Full Changelog: v5.8.11...v5.8.12

DigitDNS v5.8.11 — complete DNS, relay and ad blocking

Choose a tag to compare

@github-actions github-actions released this 14 Nov 17:32

DigitDNS v5.8.11 — Android sinkhole status alignment

A patch release on top of v5.8.10. No database schema migration is required;
existing settings, clients, blocklists, certificates, relay agents and egress
options are preserved.

Fixed

  • Android: the folded Custom Blocklist (Sinkhole) row now puts its Blocked pill
    in the right-hand status column.
    It used to sit immediately after the
    chevron, on the left, while every domain row below carried its status pill on
    the right. The group row now lays the title/count out first and reserves the
    same gap + switch width as a domain row, so the Blocked pill lines up with the
    DIRECT/PROXY/BLOCKED pills it summarises. The pill width is shared with the row
    pills, so the column stays consistent at every font scale.

Also in this line (v5.8.10)

  • Type scale. The stylesheet gained a named text-size scale
    (--text-2xxs … --text-2xl, with line-height variants) and every hard-coded
    font-size: Npx was replaced with a token reference, so type adjustments are
    one-token changes rather than a sweep.
  • Semantic button intents. .btn-primary, .btn-ghost and .btn-soft carry
    their own token-based colours and render correctly on dark, light and grey
    without per-theme overrides. They replace the brittle
    [data-theme="grey"] button[class*="bg-cyan-500/"] substring selectors.

Upgrade

In-place upgrades from the dashboard are supported. The release assets include
the Linux amd64/arm64 hub binary, relay-agent binaries, the offline bundle,
checksums and their ed25519 signature, and the Android APKs attached from the
android-v5.8.11 tag.

curl -fsSL https://raw.githubusercontent.com/digitrob/DigitDNS/v5.8.11/scripts/install.sh | sudo bash

Docker:

docker pull ghcr.io/digitrob/digitdns:5.8.11
docker pull ghcr.io/digitrob/digitdns-agent:5.8.11
docker pull robmeister/digitdns:5.8.11
docker pull robmeister/digitdns-agent:5.8.11

Stable release (v5.8.11).
Recommended for production. Install with the one-liner in the README,
or upgrade in place from the dashboard's self-updater.
Full list of changes: docs/CHANGELOG.md.

Full Changelog: v5.8.10...v5.8.11

DigitDNS v5.8.10

Choose a tag to compare

@digitrob digitrob released this 14 Nov 16:49

v5.8.10 release

DigitDNS v5.8.9 — complete DNS, relay and ad blocking

Choose a tag to compare

@github-actions github-actions released this 14 Nov 13:23

DigitDNS v5.8.9 — sinkhole groups, faster dashboard, pasted-list repair

A minor release on top of v5.8.8. No database schema migration is required;
existing settings, clients, blocklists, certificates, relay agents and egress
options are preserved.

Added

  • Custom Blocklist (Sinkhole) is now one entry in the Domains list. The
    blocked set collapses into a single expandable row with a live domain count;
    the chevron reveals every blocked name inline, each with its normal checkbox,
    service, relay, Remove and status pill. Expanding a large sinkhole grows 50
    members at a time. The same grouping ships in the Android app.
  • Android live-log copy. Long-press a domain in the Live Log to copy it, with
    long-press haptics and a confirmation toast. TalkBack gets the long-click
    action too.

Changed

  • Faster dashboard loading. The dashboard document is minified at build time
    (287 KB → 195 KB; 58 KB → 37 KB gzipped), JavaScript and CSS are served as
    Brotli sidecars (app.js 108 KB → 87 KB), and app.js is preloaded. The
    ten-second delay before the first stats poll is gone, so the dashboard fills
    immediately; the stats settings card is fetched on first Settings visit instead
    of on every boot.
  • Startup benchmark. The first upstream benchmark waits ten seconds after the
    listeners are up, so its figures describe the steady state rather than boot
    contention. Adaptive mode performs one forced selection at that point and then
    sleeps until the configured interval, instead of probing twice at startup.
  • Blocked status naming. The blocked status reads “Blocked” everywhere
    (web and Android), matching the filter chip and the Android app. Other status
    labels are unchanged.
  • Domains table. The domain column is now Domain/Blocklist and the web
    sidebar page is Domains/Blocklists. The blocked pill sits in the STATUS
    column; the sinkhole title stays in the Domain column.

Fixed

  • Pasted blocklists were stored as one unmatched pattern. Pasting a list into
    the single-line Block or Add box used to save the whole blob as one
    space-separated entry: the Domains page showed one row and the matcher blocked
    none of the names. The Add boxes now split on whitespace, commas and
    semicolons, and the server splits any existing blob on load and save. Existing
    installs are repaired automatically.
  • Android sinkhole expansion. Expanded member domains now render directly
    under the group instead of after the flat list.
  • Domain/Blocklist header no longer overlaps SERVICE at narrow widths.

Upgrade

In-place upgrades from the dashboard are supported. The release assets include
the Linux amd64/arm64 hub binary, relay-agent binaries, the offline bundle,
checksums and their ed25519 signature, and the Android APKs attached from the
android-v5.8.9 tag.

curl -fsSL https://raw.githubusercontent.com/digitrob/DigitDNS/v5.8.9/scripts/install.sh | sudo bash

Docker:

docker pull ghcr.io/digitrob/digitdns:5.8.9
docker pull ghcr.io/digitrob/digitdns-agent:5.8.9
docker pull robmeister/digitdns:5.8.9
docker pull robmeister/digitdns-agent:5.8.9

Stable release (v5.8.9).
Recommended for production. Install with the one-liner in the README,
or upgrade in place from the dashboard's self-updater.
Full list of changes: docs/CHANGELOG.md.

Full Changelog: v5.8.8...v5.8.9

DigitDNS v5.8.8 — complete DNS, relay and ad blocking

Choose a tag to compare

@github-actions github-actions released this 13 Nov 18:49

DigitDNS v5.8.2 — AdGuard custom rules, command palette, performance

A minor release on top of v5.8.1. No database schema migration is required;
existing settings, clients, blocklists, certificates, relay agents and egress
options are preserved.

Added

  • AdGuard-syntax custom filtering rules. A text area on the Ad Blocking card
    (web + Android) accepts AdGuard/uBlock network rules (||domain^, @@||,
    $dnsrewrite=, $important, hosts format). Rules compile into the same index
    as your blocklists.
  • $dnsrewrite support. $dnsrewrite=IP (A/AAAA), $dnsrewrite=host
    (CNAME), $dnsrewrite=TXT "text", and $dnsrewrite=NXDOMAIN/REFUSED/SERVFAIL.
  • Command palette. Ctrl/Cmd+K opens a fuzzy search over tabs, settings
    sections and global actions (theme toggle, sign out) on the web panel.
  • Android status widget. A 2×1 home-screen widget showing queries today and
    the live query rate; tap to open the app.
  • Android toggle widget. A 1×1 widget showing filtering on/off; tap opens
    the app's Ad Blocking page.
  • Android switches contrast. Switches in the grey theme now use the success
    colour for the checked track (was nearly white).

Changed

  • Resolver hot path. System metrics sampled once per second in
    telemetryLoop instead of on every /api/stats call. normalizeProto uses
    EqualFold (zero alloc per query). Aggregator uses a per-bucket mutex and an
    atomic current-bucket pointer.
  • Web theming. Non-theme-mapped sky-* and violet-* Tailwind utilities
    replaced with theme-mapped cyan-*/purple-* across DoT settings, custom
    policy groups, the top-upstreams icon, the 2FA card and the zap icon.
  • Adaptive selection. adaptiveHealthy now accepts resolvers that have a
    successful probe, so the Force button switches to the fastest probed resolver
    even if it never served live traffic. The timer resets after each forced run.

Fixed

  • Upstream Force button. Not all the time did it switch to the fastest
    resolver (probed-but-unmeasured resolvers were excluded). Fixed.
  • Android detekt. TransportChips no longer exceeds the
    cyclomatic-complexity threshold (the transport colour/label lookup moved to
    the theme).
  • Android alert channel name collapse. The weight(1f) field now has a
    real row to fill instead of being squeezed beside the kind selector, switch
    and delete button.
  • Web alert type picker. The native <select> (which cannot render icons)
    was replaced with a pictogram menu.

Upgrade

In-place upgrades from the dashboard are supported. The release assets include
the Linux amd64/arm64 hub binary, relay-agent binaries, the offline bundle,
checksums and their ed25519 signature, and the Android APKs attached from the
android-v5.8.2 tag.

curl -fsSL https://raw.githubusercontent.com/digitrob/DigitDNS/v5.8.2/scripts/install.sh | sudo bash

Docker:

docker pull ghcr.io/digitrob/digitdns:5.8.2
docker pull ghcr.io/digitrob/digitdns-agent:5.8.2
docker pull robmeister/digitdns:5.8.2
docker pull robmeister/digitdns-agent:5.8.2

Stable release (v5.8.8).
Recommended for production. Install with the one-liner in the README,
or upgrade in place from the dashboard's self-updater.
Full list of changes: docs/CHANGELOG.md.

Full Changelog: v5.8.7...v5.8.8

DigitDNS v5.8.2 — complete DNS, relay and ad blocking

Choose a tag to compare

@github-actions github-actions released this 13 Nov 13:47

DigitDNS v5.8.2 — AdGuard custom rules, command palette, performance

A minor release on top of v5.8.1. No database schema migration is required;
existing settings, clients, blocklists, certificates, relay agents and egress
options are preserved.

Added

  • AdGuard-syntax custom filtering rules. A text area on the Ad Blocking card
    (web + Android) accepts AdGuard/uBlock network rules (||domain^, @@||,
    $dnsrewrite=, $important, hosts format). Rules compile into the same index
    as your blocklists.
  • $dnsrewrite support. $dnsrewrite=IP (A/AAAA), $dnsrewrite=host
    (CNAME), $dnsrewrite=TXT "text", and $dnsrewrite=NXDOMAIN/REFUSED/SERVFAIL.
  • Command palette. Ctrl/Cmd+K opens a fuzzy search over tabs, settings
    sections and global actions (theme toggle, sign out) on the web panel.
  • Android status widget. A 2×1 home-screen widget showing queries today and
    the live query rate; tap to open the app.
  • Android toggle widget. A 1×1 widget showing filtering on/off; tap opens
    the app's Ad Blocking page.
  • Android switches contrast. Switches in the grey theme now use the success
    colour for the checked track (was nearly white).

Changed

  • Resolver hot path. System metrics sampled once per second in
    telemetryLoop instead of on every /api/stats call. normalizeProto uses
    EqualFold (zero alloc per query). Aggregator uses a per-bucket mutex and an
    atomic current-bucket pointer.
  • Web theming. Non-theme-mapped sky-* and violet-* Tailwind utilities
    replaced with theme-mapped cyan-*/purple-* across DoT settings, custom
    policy groups, the top-upstreams icon, the 2FA card and the zap icon.
  • Adaptive selection. adaptiveHealthy now accepts resolvers that have a
    successful probe, so the Force button switches to the fastest probed resolver
    even if it never served live traffic. The timer resets after each forced run.

Fixed

  • Upstream Force button. Not all the time did it switch to the fastest
    resolver (probed-but-unmeasured resolvers were excluded). Fixed.
  • Android detekt. TransportChips no longer exceeds the
    cyclomatic-complexity threshold (the transport colour/label lookup moved to
    the theme).
  • Android alert channel name collapse. The weight(1f) field now has a
    real row to fill instead of being squeezed beside the kind selector, switch
    and delete button.
  • Web alert type picker. The native <select> (which cannot render icons)
    was replaced with a pictogram menu.

Upgrade

In-place upgrades from the dashboard are supported. The release assets include
the Linux amd64/arm64 hub binary, relay-agent binaries, the offline bundle,
checksums and their ed25519 signature, and the Android APKs attached from the
android-v5.8.2 tag.

curl -fsSL https://raw.githubusercontent.com/digitrob/DigitDNS/v5.8.2/scripts/install.sh | sudo bash

Docker:

docker pull ghcr.io/digitrob/digitdns:5.8.2
docker pull ghcr.io/digitrob/digitdns-agent:5.8.2
docker pull robmeister/digitdns:5.8.2
docker pull robmeister/digitdns-agent:5.8.2

Stable release (v5.8.2).
Recommended for production. Install with the one-liner in the README,
or upgrade in place from the dashboard's self-updater.
Full list of changes: docs/CHANGELOG.md.

Full Changelog: v5.8.1...v5.8.2

DigitDNS v5.8.1 — complete DNS, relay and ad blocking

Choose a tag to compare

@github-actions github-actions released this 13 Nov 10:43

DigitDNS v5.8.1 — alert pictograms and resolver hot-path

A minor release on top of v5.8.0. No database schema migration is required;
existing settings, clients, blocklists, certificates, relay agents and egress
options are preserved.

Added

  • Alert channel pictograms. Web and Android alert channel rows show a
    destination pictogram (ntfy, Telegram, Discord, Slack, Gotify, Webhook) in the
    kind picker and on the card, with a check on the active choice. The web
    picker is a custom menu so the glyphs render in dark, grey and light themes.
  • Android alert channel cards. Each channel is its own bordered tile: the
    kind pictogram opens the type menu, "Enabled" is labelled, and the channel
    name gets its own full-width row so it can never collapse on a phone.
  • Empty state. "No channels yet — add one to receive alerts." on both
    clients when there are no channels.
  • Benchmarks. BenchmarkOrderedByLatencyWarm, BenchmarkRecordStat and
    BenchmarkQueryLogPushDisabled in the upstream and service packages.

Changed

  • Resolver hot path. Upstream stats are published through an
    atomic.Pointer so recordStat and upstreamAvailable no longer take the
    pool RLock on every answer; the cached latency order is an immutable
    snapshot read with a single atomic load (Hedged/Best Known). The query-log
    service caches its settings, so Push no longer reads (and decrypts) the
    setting from bbolt on every DNS query — the default, with logging off, is
    8.5 ns/op, 0 allocs.
  • Dashboard 1 Hz polish. renderCacheHealth, renderProxyDrops and the
    latency badge compare before writing, and the resolver list and QPS chart are
    skipped while another tab is visible — the poll keeps running, only the paint
    is deferred.
  • Transport palette sharing. The Android resolver chips resolve their colour
    and label from the theme's ProtocolPalette (transportColor /
    transportLabelRes) instead of a second local table, matching the live log
    and history cards.

Fixed

  • Android detekt. TransportChips no longer exceeds the
    cyclomatic-complexity threshold (the transport colour/label lookup moved to
    the theme).
  • Android alert channel name collapse. The weight(1f) field now has a
    real row to fill instead of being squeezed beside the kind selector, switch
    and delete button.
  • Web alert type picker. The native <select> (which cannot render icons)
    was replaced with a pictogram menu.

Upgrade

In-place upgrades from the dashboard are supported. The release assets include
the Linux amd64/arm64 hub binary, relay-agent binaries, the offline bundle,
checksums and their ed25519 signature, and the Android APKs attached from the
android-v5.8.1 tag.

curl -fsSL https://raw.githubusercontent.com/digitrob/DigitDNS/v5.8.1/scripts/install.sh | sudo bash

Docker:

docker pull ghcr.io/digitrob/digitdns:5.8.1
docker pull ghcr.io/digitrob/digitdns-agent:5.8.1
docker pull robmeister/digitdns:5.8.1
docker pull robmeister/digitdns-agent:5.8.1

Stable release (v5.8.1).
Recommended for production. Install with the one-liner in the README,
or upgrade in place from the dashboard's self-updater.
Full list of changes: docs/CHANGELOG.md.

Full Changelog: v5.8.0...v5.8.1