• v0.4.1-rc.1 cf550bd512

    Jarl v0.4.1-rc.1 Pre-release

    adam released this 2026-10-11 23:53:31 +01:00 | 74 commits to main since this release

    Upgrading from 0.4

    • Once you use address ranges, the database can't go back to 0.4: its
      parser doesn't know them. Remove the ranges first if you need to
      downgrade.

    Fixed

    • A changeset with a staged record delete could not be applied after that
      record was deleted elsewhere (e.g. with the CLI), and it was hard to see
      which operation to remove: the error only said "record 832 does not
      exist". A staged delete of a record that is already gone now counts as
      done (with a warning), and the other operations that no longer apply
      (an edit or disable of a deleted record, a change to an object changed
      since) are named with their number and summary. The Changes page marks
      that operation and offers to remove it right in the error.

    Added

    • jarl changeset show, diff, apply, discard and remove take the
      changeset from -C or JARL_CHANGESET when no ID is given
      (jarl changeset apply). A changeset from JARL_CHANGESET is now
      checked before it is used, for staging too: it must exist, be open and
      be yours, so a stale export (an applied changeset, or an ID that later
      turned into someone else's web UI draft) can't silently take your
      changes; the error says what to do. Commands say on stderr which
      changeset from JARL_CHANGESET they use, and apply/discard remind
      you to unset JARL_CHANGESET. -C and ID arguments are used as given.
    • Address ranges such as 10.0.10.101-10.0.10.199 or
      2001:db8::100-2001:db8::1ff (also ! negated, and with spaces around
      the dash) wherever an address match list is used: ACLs, views'
      match-clients and match-destinations, options such as allow-query, and
      blocking's client groups (docs/concepts.md). Jarl
      keeps the range as written and writes the fewest prefixes that cover
      exactly that range to named.conf, with the range as a comment. The web
      UI shows what a range becomes while you type it (GET /catalog/ranges). Mistakes are refused when entered: an end that isn't
      a full address, the start after the end, IPv4 mixed with IPv6, a range
      in an option that takes no address match list (forwarders). A range
      covered by an earlier element is reported as never matching, a range of
      every address counts as "any" for the open resolver and open transfer
      checks, and an IPv6 range in the IPv4-mapped space gets a warning. ACL
      names can no longer look like a range.
    • Prometheus metrics at /metrics (docs/metrics.md),
      set up in the new metrics: section of jarl.yaml (off by default).
      metrics.allow lists the addresses that may scrape (loopback by
      default), metrics.token lets anyone who sends it as a bearer token
      scrape, and metrics.listen adds addresses that serve only /metrics
      (for a Prometheus server elsewhere). Root and jarld's own user can also
      scrape on the local socket.
      • Health, always: named up, recursive and TCP clients against their
        limits, adopted, open changesets, last apply, validation problems by
        severity, drifted files, object counts, the last backup (and failure,
        and whether it is stale), blocking paused, each blocklist's entries,
        last check and change and whether it fails, the DNSSEC phase of every
        signed zone, and when API tokens expire.
      • With query statistics on: named's counters (queries, result codes,
        record types, UDP/TCP, authoritative/recursive, rate limiting, upstream
        round-trip times, DNSSEC validation, cache hits) and Jarl's (logged
        responses per view and zone, blocked queries per blocklist), as
        counters since jarld started, plus named's memory, CPU, threads, cache
        and sockets, and the collector's health.
      • Example queries and alert rules, checked with promtool.
    Downloads