-
Jarl v0.6.4
StableAll checks were successfulrelease / release (push) Successful in 5m15sreleased this
2026-10-25 19:06:47 +00:00 | 0 commits to main since this releaseAdded
- Failed logins in the journal. A failed login (a wrong password, or
a wrong two-factor code) and a refused API token are logged as well as
audited, with the address first (msg="login failed" ip=… user=…,
msg="token refused" ip=…), for Guard'sjarlpreset or a fail2ban
filter to ban such addresses (docs/operations.md). jarl cert get --combined PATHalso writes the key and the full
chain in one file (mode 600, written all at once), for HAProxy. It
belongs outside--dir, so a directory of combined files can be
HAProxy'scrtdirectory. The hook gets it asJARL_CERT_COMBINED.
Adding it to a certificate this host already has writes it from the
files on disk and runs the hook;--combined ''removes it.jarl cert get --localdoesn't ask jarld: it writes the combined
file and runs the hook from this host's files, to apply a changed
setting or test a hook.jarl cert saved NAMEshows all of one certificate's saved
settings (names, key type, dir, combined file, hook, server) and this
host's copy. The token is never shown.jarl cert listhas a PULLED column: when the certificate was last
downloaded, with(old)while a host hasn't fetched the renewed one.
The owner of a certificate obtained withjarl cert getnow sees their
own downloads (pulled_by) injarl cert listandjarl cert show, not
only administrators.
Changed
jarl cert listshowsgetas USES for a certificate obtained with
jarl cert get, not-.jarl cert getwithout a name refuses--dir,--hook,--key-type,
--combined,--replaceand--no-save, which change one
certificate; they used to be ignored.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Failed logins in the journal. A failed login (a wrong password, or
-
Jarl v0.6.4-rc.2 Pre-release
released this
2026-10-25 00:24:45 +01:00 | 1 commits to main since this releaseAdded
- Failed logins in the journal. A failed login (a wrong password, or
a wrong two-factor code) and a refused API token are logged as well as
audited, with the address first (msg="login failed" ip=… user=…,
msg="token refused" ip=…), for Guard'sjarlpreset or a fail2ban
filter to ban such addresses (docs/operations.md). jarl cert get --combined PATHalso writes the key and the full
chain in one file (mode 600, written all at once), for HAProxy. It
belongs outside--dir, so a directory of combined files can be
HAProxy'scrtdirectory. The hook gets it asJARL_CERT_COMBINED.
Adding it to a certificate this host already has writes it from the
files on disk and runs the hook;--combined ''removes it.jarl cert get --localdoesn't ask jarld: it writes the combined
file and runs the hook from this host's files, to apply a changed
setting or test a hook.jarl cert saved NAMEshows all of one certificate's saved
settings (names, key type, dir, combined file, hook, server) and this
host's copy. The token is never shown.jarl cert listhas a PULLED column: when the certificate was last
downloaded, with(old)while a host hasn't fetched the renewed one.
The owner of a certificate obtained withjarl cert getnow sees their
own downloads (pulled_by) injarl cert listandjarl cert show, not
only administrators.
Changed
jarl cert listshowsgetas USES for a certificate obtained with
jarl cert get, not-.jarl cert getwithout a name refuses--dir,--hook,--key-type,
--combined,--replaceand--no-save, which change one
certificate; they used to be ignored.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Failed logins in the journal. A failed login (a wrong password, or
-
Jarl v0.6.4-rc.1 Pre-release
released this
2026-10-22 18:58:56 +01:00 | 3 commits to main since this releaseAdded
- Failed logins in the journal. A failed login (a wrong password, or
a wrong two-factor code) and a refused API token are logged as well as
audited, with the address first (msg="login failed" ip=… user=…,
msg="token refused" ip=…), for Guard'sjarlpreset or a fail2ban
filter to ban such addresses (docs/operations.md).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Failed logins in the journal. A failed login (a wrong password, or
-
Jarl v0.6.2 Stable
released this
2026-10-21 22:08:54 +01:00 | 7 commits to main since this releaseAdded
- A
certificatesrole (template):certificates:write, for tokens and
users that get certificates for other hosts withjarl cert get. In
the web UI's user and token forms it is in "Insert a template…", to
narrow withnames=; in the CLI,--role certificates.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- A
-
Jarl v0.6.1 Stable
released this
2026-10-20 22:42:42 +01:00 | 9 commits to main since this releaseAdded
- Certificates for other hosts:
jarl cert get NAME -d DOMAIN --dir DIR --hook CMDon a mail server or proxy has jarld obtain the certificate
(and renew it), waits, downloads it when it is newer than the host's
copy, and runs the hook with the file paths inJARL_CERT_*
variables. Its settings are saved, sojarl cert getalone refreshes
them all;jarl cert schedulewrites a daily systemd timer for that;
jarl cert savedlists them with their expiry;jarl cert forget
stops one. A certificate belongs to the user that asked for it (other
users can't take the name), is obtained again only when a name is
added or removed, and the Certificates page shows its owner and who
downloaded it, flagging hosts that haven't fetched a renewal. A new
certificatesgrant (certificates:write names=*.adbraun.lol) says
which names a user may have; it is never part of*. Users may own
certificates.max_per_usercertificates (10), or their own
--cert-limit. API:POST /certificates/{name}/request. - Certificates can be exported for use outside Jarl: Export… on the
Certificates page (download, or copy to the clipboard),
jarl cert export NAME [--dir DIR | --part PART]
andGET /certificates/{name}/pem?part=fullchain|cert|key|bundle.
Administrators only; every export of the private key is audited
(certificate.export_key). - A reverse zone's "addresses have no PTR record" banner lists them, with
the name each would get, instead of only counting them
(ptr_missing_listin the zone API). - A zone's page links to the same zone in the other views ("also in
external"), in each view's colour, keeping the tab you are on. It
works for zones that aren't linked too, and the zone API's new
in_viewslists them. jarl.servicehas the aliasjarld.service, sosystemctl restart jarldworks too. The alias is linked when the unit is enabled; the
package relinks a unit enabled by an older version on upgrade.
Changed
-
The Statistics page's range buttons follow
stats.retention: ranges
longer than any data kept are left out, and 1y and 2y appear
whenretention.day(orretention.hour) covers them (with the
default 730d, both do). The busiest-times heatmap says how far back it
really goes (at mostretention.hour), and links to the Explore page
keep withinretention.queriesinstead of assuming 7 days.
GET /stats/statusandGET /stats/exploreaddretention_seconds. -
A reverse zone's missing PTR records count only its own view's A and
AAAA records. An address only another view's records use (an internal
host, seen from the vps view's copy of10.0.10.in-addr.arpa) is no
longer reported as missing; it shows apart, asOther viewsinjarl zone show,ptr_other_viewsin the API and a note on the zone's page.
Filling (--fill,jarl zone fill-ptr, the page's button) names those
from the other view only when asked, with--other-views
(fill_other_views,?other_views=1, a checkbox in the New reverse
zone dialog), so one view's host names don't leak into another. When
there is nothing else to fill, Jarl says how many there are and how to
add them. The page andjarl zone showlist those addresses with the
name each would get, and the view it comes from
(ptr_other_views_list);jarl zone showlists the missing ones too. -
Records, zones and validation findings sort numeric labels by value, so
2.10.0.10.in-addr.arpacomes before101.10.0.10.in-addr.arpain the
web UI, the CLI and the rendered zone files. Names still group by label
from the right (subdomains stay under their parent); other labels keep
the old byte order (host10beforehost2). Zone files are rewritten
in the new order the next time they change; named doesn't care about
record order. -
cname_chainno longer warns about one CNAME pointing at another (a
service name at a host alias is common, and named answers the chain at
once). A chain of three or more CNAMEs gets an info note that shows
it. -
A certificate's private key is only exported over HTTPS, the local
socket, or to the server itself (plain HTTP from another host is
refused withhttps_required). -
The Certificates page's "Used for" column says DoT and DoH for named,
with the addresses in the tooltip, instead of listing every address. A
certificate with no use says "not used by Jarl" rather than "nothing
yet": it may well be used elsewhere. -
Deleting a linked zone's local records (an override) removes that name
and type from that view only. It used to bring the shared records back
into the view, so a delete looked undone. The other views keep their
records, local to each now; Share one view's version (jarl record update ID --shared) to have it everywhere again. -
A linked zone's Compare views tab starts with a view it is linked to,
not the first other view. -
The New token form only offers templates within what the token's user
may do. A token never does more than its user, so offering more only
misled. -
A zone update that changes nothing is no change: saving a zone's
settings without changing them says "Nothing changed" instead of
staging an empty change. Staging operations that change nothing
(POST /changesets/{id}/ops, or?stage=) is a 400 "nothing to
change".
Fixed
-
jarl cert get NAMEno longer takes over a name this host has saved
for another Jarl server, which overwrote that certificate's settings
(and, with the default--dir, its files), so it stopped being
renewed. It is refused, as is a--dirholding another certificate's
files;--replacetakes the name or directory over. -
The "query log is off" error named a setting that doesn't exist,
stats.query_retention; it'sstats.retention.queries. -
jarl zone showfor a reverse zone printed only "and 1 more" under
"Other views:" when the server was older than the CLI (0.6.1-rc.2
sends the count but not the addresses). It now prints just the count
line then. -
jarl changeset showprinted its Created and Applied times in UTC,
whilejarl historyandjarl statusprint local time. It uses local
time now too. -
The statistics' "Busiest times" grid drew hours without data taller
than the others (they picked up the page's padding for empty
messages). -
A token for one view of a linked zone (such as an ACME token with
views=external) couldn't add records: a new record is shared, and
that reached the other view. A new name and type is now local to the
view when the user may not change it in the other views. -
A zone name in several views had to be given with
--vieweven when
the user could see it in only one (jarl record list adbraun.lolwith
a one-view token), and the error named views the user can't see. Now
the one they can see is used. -
jarl view listwas empty for a user withoutviews:read, though
they can see zones in views. It now lists those views by name, colour
and visible zone count (markedlimitedin the API), without their
settings. -
The DNSSEC tab told you to give the DS record to your registrar for
every zone whose parent isn't in Jarl in the same view. Now it (and
jarl zone dnssec status, and the API's newds_at,ds_placeand
ds_note) says where it really goes: the parent zone in Jarl (in any
view now, the zone's own first), the registrar for a registered
domain, the parent zone wherever it is hosted for a subdomain, your
ISP or RIR for a reverse zone, and nowhere for a private name such as
home.lan(signing it has no effect). -
The Registrar tab (and
jarl zone registrar, and the DNSSEC page's
registrar button) was offered for every zone whenporkbun.domainsis
empty, and always failed for subdomain zones (lab.adbraun.lol),
reverse zones and private names (home.lan): Porkbun only knows
registered domains. Only zones that are a registered domain (by the
public suffix list) get it now; the others say what delegates them
instead. -
Auto-PTR in linked zones changed PTR records in every linked view, not
just where the address record is. A record local to one view got PTR
records in the other views too; deleting or changing the address in
one view deleted or moved the PTR records of views that still had it.
PTR records now follow each view's own address records, are local to
their view in a linked reverse zone, and each zone's Reverse DNS
setting counts for its own view. Fill also adds local PTR records
now, not shared ones. The same applies to Update PTR (--ptr). -
Saving the settings of a zone whose primary name server is outside it
(ns1.adbraun.lol.forwg.adbraun.lol) changed the name server to
ns1.adbraun.lol.wg.adbraun.lol.. The form showed the name without its
final dot, which the server reads as relative to the zone. Names outside
the zone now keep the dot, and the name server is only sent when it was
changed.
Upgrading
- Tested: a 0.6.0 install with views, linked and reverse zones and
statistics, opened by 0.6.1-rc.1: every zone, record and view kept,
named answered as before, and the new grant and limits worked. - The database gains a migration (certificate owners, per-user
certificate limits, certificate downloads). Going back to an older
version afterwards means restoring a backup made before the upgrade.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Certificates for other hosts:
-
Jarl v0.6.1-rc.4 Pre-release
released this
2026-10-20 22:32:19 +01:00 | 11 commits to main since this releaseAdded
- Certificates for other hosts:
jarl cert get NAME -d DOMAIN --dir DIR --hook CMDon a mail server or proxy has jarld obtain the certificate
(and renew it), waits, downloads it when it is newer than the host's
copy, and runs the hook with the file paths inJARL_CERT_*
variables. Its settings are saved, sojarl cert getalone refreshes
them all;jarl cert schedulewrites a daily systemd timer for that;
jarl cert savedlists them with their expiry;jarl cert forget
stops one. A certificate belongs to the user that asked for it (other
users can't take the name), is obtained again only when a name is
added or removed, and the Certificates page shows its owner and who
downloaded it, flagging hosts that haven't fetched a renewal. A new
certificatesgrant (certificates:write names=*.adbraun.lol) says
which names a user may have; it is never part of*. Users may own
certificates.max_per_usercertificates (10), or their own
--cert-limit. API:POST /certificates/{name}/request. - Certificates can be exported for use outside Jarl: Export… on the
Certificates page (download, or copy to the clipboard),
jarl cert export NAME [--dir DIR | --part PART]
andGET /certificates/{name}/pem?part=fullchain|cert|key|bundle.
Administrators only; every export of the private key is audited
(certificate.export_key). - A reverse zone's "addresses have no PTR record" banner lists them, with
the name each would get, instead of only counting them
(ptr_missing_listin the zone API). - A zone's page links to the same zone in the other views ("also in
external"), in each view's colour, keeping the tab you are on. It
works for zones that aren't linked too, and the zone API's new
in_viewslists them. jarl.servicehas the aliasjarld.service, sosystemctl restart jarldworks too. The alias is linked when the unit is enabled; the
package relinks a unit enabled by an older version on upgrade.
Changed
-
The Statistics page's range buttons follow
stats.retention: ranges
longer than any data kept are left out, and 1y and 2y appear
whenretention.day(orretention.hour) covers them (with the
default 730d, both do). The busiest-times heatmap says how far back it
really goes (at mostretention.hour), and links to the Explore page
keep withinretention.queriesinstead of assuming 7 days.
GET /stats/statusandGET /stats/exploreaddretention_seconds. -
A reverse zone's missing PTR records count only its own view's A and
AAAA records. An address only another view's records use (an internal
host, seen from the vps view's copy of10.0.10.in-addr.arpa) is no
longer reported as missing; it shows apart, asOther viewsinjarl zone show,ptr_other_viewsin the API and a note on the zone's page.
Filling (--fill,jarl zone fill-ptr, the page's button) names those
from the other view only when asked, with--other-views
(fill_other_views,?other_views=1, a checkbox in the New reverse
zone dialog), so one view's host names don't leak into another. When
there is nothing else to fill, Jarl says how many there are and how to
add them. The page andjarl zone showlist those addresses with the
name each would get, and the view it comes from
(ptr_other_views_list);jarl zone showlists the missing ones too. -
Records, zones and validation findings sort numeric labels by value, so
2.10.0.10.in-addr.arpacomes before101.10.0.10.in-addr.arpain the
web UI, the CLI and the rendered zone files. Names still group by label
from the right (subdomains stay under their parent); other labels keep
the old byte order (host10beforehost2). Zone files are rewritten
in the new order the next time they change; named doesn't care about
record order. -
cname_chainno longer warns about one CNAME pointing at another (a
service name at a host alias is common, and named answers the chain at
once). A chain of three or more CNAMEs gets an info note that shows
it. -
A certificate's private key is only exported over HTTPS, the local
socket, or to the server itself (plain HTTP from another host is
refused withhttps_required). -
The Certificates page's "Used for" column says DoT and DoH for named,
with the addresses in the tooltip, instead of listing every address. A
certificate with no use says "not used by Jarl" rather than "nothing
yet": it may well be used elsewhere. -
Deleting a linked zone's local records (an override) removes that name
and type from that view only. It used to bring the shared records back
into the view, so a delete looked undone. The other views keep their
records, local to each now; Share one view's version (jarl record update ID --shared) to have it everywhere again. -
A linked zone's Compare views tab starts with a view it is linked to,
not the first other view. -
The New token form only offers templates within what the token's user
may do. A token never does more than its user, so offering more only
misled. -
A zone update that changes nothing is no change: saving a zone's
settings without changing them says "Nothing changed" instead of
staging an empty change. Staging operations that change nothing
(POST /changesets/{id}/ops, or?stage=) is a 400 "nothing to
change".
Fixed
-
The "query log is off" error named a setting that doesn't exist,
stats.query_retention; it'sstats.retention.queries. -
jarl zone showfor a reverse zone printed only "and 1 more" under
"Other views:" when the server was older than the CLI (0.6.1-rc.2
sends the count but not the addresses). It now prints just the count
line then. -
jarl changeset showprinted its Created and Applied times in UTC,
whilejarl historyandjarl statusprint local time. It uses local
time now too. -
The statistics' "Busiest times" grid drew hours without data taller
than the others (they picked up the page's padding for empty
messages). -
A token for one view of a linked zone (such as an ACME token with
views=external) couldn't add records: a new record is shared, and
that reached the other view. A new name and type is now local to the
view when the user may not change it in the other views. -
A zone name in several views had to be given with
--vieweven when
the user could see it in only one (jarl record list adbraun.lolwith
a one-view token), and the error named views the user can't see. Now
the one they can see is used. -
jarl view listwas empty for a user withoutviews:read, though
they can see zones in views. It now lists those views by name, colour
and visible zone count (markedlimitedin the API), without their
settings. -
The DNSSEC tab told you to give the DS record to your registrar for
every zone whose parent isn't in Jarl in the same view. Now it (and
jarl zone dnssec status, and the API's newds_at,ds_placeand
ds_note) says where it really goes: the parent zone in Jarl (in any
view now, the zone's own first), the registrar for a registered
domain, the parent zone wherever it is hosted for a subdomain, your
ISP or RIR for a reverse zone, and nowhere for a private name such as
home.lan(signing it has no effect). -
The Registrar tab (and
jarl zone registrar, and the DNSSEC page's
registrar button) was offered for every zone whenporkbun.domainsis
empty, and always failed for subdomain zones (lab.adbraun.lol),
reverse zones and private names (home.lan): Porkbun only knows
registered domains. Only zones that are a registered domain (by the
public suffix list) get it now; the others say what delegates them
instead. -
Auto-PTR in linked zones changed PTR records in every linked view, not
just where the address record is. A record local to one view got PTR
records in the other views too; deleting or changing the address in
one view deleted or moved the PTR records of views that still had it.
PTR records now follow each view's own address records, are local to
their view in a linked reverse zone, and each zone's Reverse DNS
setting counts for its own view. Fill also adds local PTR records
now, not shared ones. The same applies to Update PTR (--ptr). -
Saving the settings of a zone whose primary name server is outside it
(ns1.adbraun.lol.forwg.adbraun.lol) changed the name server to
ns1.adbraun.lol.wg.adbraun.lol.. The form showed the name without its
final dot, which the server reads as relative to the zone. Names outside
the zone now keep the dot, and the name server is only sent when it was
changed.
Upgrading
- Tested: a 0.6.0 install with views, linked and reverse zones and
statistics, opened by 0.6.1-rc.1: every zone, record and view kept,
named answered as before, and the new grant and limits worked. - The database gains a migration (certificate owners, per-user
certificate limits, certificate downloads). Going back to an older
version afterwards means restoring a backup made before the upgrade.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Certificates for other hosts:
-
Jarl v0.6.1-rc.3 Pre-release
released this
2026-10-20 14:46:12 +01:00 | 15 commits to main since this releaseAdded
- Certificates for other hosts:
jarl cert get NAME -d DOMAIN --dir DIR --hook CMDon a mail server or proxy has jarld obtain the certificate
(and renew it), waits, downloads it when it is newer than the host's
copy, and runs the hook with the file paths inJARL_CERT_*
variables. Its settings are saved, sojarl cert getalone refreshes
them all;jarl cert schedulewrites a daily systemd timer for that;
jarl cert savedlists them with their expiry;jarl cert forget
stops one. A certificate belongs to the user that asked for it (other
users can't take the name), is obtained again only when a name is
added or removed, and the Certificates page shows its owner and who
downloaded it, flagging hosts that haven't fetched a renewal. A new
certificatesgrant (certificates:write names=*.adbraun.lol) says
which names a user may have; it is never part of*. Users may own
certificates.max_per_usercertificates (10), or their own
--cert-limit. API:POST /certificates/{name}/request. - Certificates can be exported for use outside Jarl: Export… on the
Certificates page (download, or copy to the clipboard),
jarl cert export NAME [--dir DIR | --part PART]
andGET /certificates/{name}/pem?part=fullchain|cert|key|bundle.
Administrators only; every export of the private key is audited
(certificate.export_key). - A reverse zone's "addresses have no PTR record" banner lists them, with
the name each would get, instead of only counting them
(ptr_missing_listin the zone API). - A zone's page links to the same zone in the other views ("also in
external"), in each view's colour, keeping the tab you are on. It
works for zones that aren't linked too, and the zone API's new
in_viewslists them. jarl.servicehas the aliasjarld.service, sosystemctl restart jarldworks too. The alias is linked when the unit is enabled; the
package relinks a unit enabled by an older version on upgrade.
Changed
-
A reverse zone's missing PTR records count only its own view's A and
AAAA records. An address only another view's records use (an internal
host, seen from the vps view's copy of10.0.10.in-addr.arpa) is no
longer reported as missing; it shows apart, asOther viewsinjarl zone show,ptr_other_viewsin the API and a note on the zone's page.
Filling (--fill,jarl zone fill-ptr, the page's button) names those
from the other view only when asked, with--other-views
(fill_other_views,?other_views=1, a checkbox in the New reverse
zone dialog), so one view's host names don't leak into another. When
there is nothing else to fill, Jarl says how many there are and how to
add them. The page andjarl zone showlist those addresses with the
name each would get, and the view it comes from
(ptr_other_views_list);jarl zone showlists the missing ones too. -
Records, zones and validation findings sort numeric labels by value, so
2.10.0.10.in-addr.arpacomes before101.10.0.10.in-addr.arpain the
web UI, the CLI and the rendered zone files. Names still group by label
from the right (subdomains stay under their parent); other labels keep
the old byte order (host10beforehost2). Zone files are rewritten
in the new order the next time they change; named doesn't care about
record order. -
cname_chainno longer warns about one CNAME pointing at another (a
service name at a host alias is common, and named answers the chain at
once). A chain of three or more CNAMEs gets an info note that shows
it. -
A certificate's private key is only exported over HTTPS, the local
socket, or to the server itself (plain HTTP from another host is
refused withhttps_required). -
The Certificates page's "Used for" column says DoT and DoH for named,
with the addresses in the tooltip, instead of listing every address. A
certificate with no use says "not used by Jarl" rather than "nothing
yet": it may well be used elsewhere. -
Deleting a linked zone's local records (an override) removes that name
and type from that view only. It used to bring the shared records back
into the view, so a delete looked undone. The other views keep their
records, local to each now; Share one view's version (jarl record update ID --shared) to have it everywhere again. -
A linked zone's Compare views tab starts with a view it is linked to,
not the first other view. -
The New token form only offers templates within what the token's user
may do. A token never does more than its user, so offering more only
misled. -
A zone update that changes nothing is no change: saving a zone's
settings without changing them says "Nothing changed" instead of
staging an empty change. Staging operations that change nothing
(POST /changesets/{id}/ops, or?stage=) is a 400 "nothing to
change".
Fixed
-
The statistics' "Busiest times" grid drew hours without data taller
than the others (they picked up the page's padding for empty
messages). -
A token for one view of a linked zone (such as an ACME token with
views=external) couldn't add records: a new record is shared, and
that reached the other view. A new name and type is now local to the
view when the user may not change it in the other views. -
A zone name in several views had to be given with
--vieweven when
the user could see it in only one (jarl record list adbraun.lolwith
a one-view token), and the error named views the user can't see. Now
the one they can see is used. -
jarl view listwas empty for a user withoutviews:read, though
they can see zones in views. It now lists those views by name, colour
and visible zone count (markedlimitedin the API), without their
settings. -
The DNSSEC tab told you to give the DS record to your registrar for
every zone whose parent isn't in Jarl in the same view. Now it (and
jarl zone dnssec status, and the API's newds_at,ds_placeand
ds_note) says where it really goes: the parent zone in Jarl (in any
view now, the zone's own first), the registrar for a registered
domain, the parent zone wherever it is hosted for a subdomain, your
ISP or RIR for a reverse zone, and nowhere for a private name such as
home.lan(signing it has no effect). -
The Registrar tab (and
jarl zone registrar, and the DNSSEC page's
registrar button) was offered for every zone whenporkbun.domainsis
empty, and always failed for subdomain zones (lab.adbraun.lol),
reverse zones and private names (home.lan): Porkbun only knows
registered domains. Only zones that are a registered domain (by the
public suffix list) get it now; the others say what delegates them
instead. -
Auto-PTR in linked zones changed PTR records in every linked view, not
just where the address record is. A record local to one view got PTR
records in the other views too; deleting or changing the address in
one view deleted or moved the PTR records of views that still had it.
PTR records now follow each view's own address records, are local to
their view in a linked reverse zone, and each zone's Reverse DNS
setting counts for its own view. Fill also adds local PTR records
now, not shared ones. The same applies to Update PTR (--ptr). -
Saving the settings of a zone whose primary name server is outside it
(ns1.adbraun.lol.forwg.adbraun.lol) changed the name server to
ns1.adbraun.lol.wg.adbraun.lol.. The form showed the name without its
final dot, which the server reads as relative to the zone. Names outside
the zone now keep the dot, and the name server is only sent when it was
changed.
Upgrading
- Tested: a 0.6.0 install with views, linked and reverse zones and
statistics, opened by 0.6.1-rc.1: every zone, record and view kept,
named answered as before, and the new grant and limits worked. - The database gains a migration (certificate owners, per-user
certificate limits, certificate downloads). Going back to an older
version afterwards means restoring a backup made before the upgrade.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Certificates for other hosts:
-
Jarl v0.6.1-rc.2 Pre-release
released this
2026-10-20 11:42:34 +01:00 | 17 commits to main since this releaseAdded
- Certificates for other hosts:
jarl cert get NAME -d DOMAIN --dir DIR --hook CMDon a mail server or proxy has jarld obtain the certificate
(and renew it), waits, downloads it when it is newer than the host's
copy, and runs the hook with the file paths inJARL_CERT_*
variables. Its settings are saved, sojarl cert getalone refreshes
them all;jarl cert schedulewrites a daily systemd timer for that;
jarl cert savedlists them with their expiry;jarl cert forget
stops one. A certificate belongs to the user that asked for it (other
users can't take the name), is obtained again only when a name is
added or removed, and the Certificates page shows its owner and who
downloaded it, flagging hosts that haven't fetched a renewal. A new
certificatesgrant (certificates:write names=*.adbraun.lol) says
which names a user may have; it is never part of*. Users may own
certificates.max_per_usercertificates (10), or their own
--cert-limit. API:POST /certificates/{name}/request. - Certificates can be exported for use outside Jarl: Export… on the
Certificates page (download, or copy to the clipboard),
jarl cert export NAME [--dir DIR | --part PART]
andGET /certificates/{name}/pem?part=fullchain|cert|key|bundle.
Administrators only; every export of the private key is audited
(certificate.export_key). - A reverse zone's "addresses have no PTR record" banner lists them, with
the name each would get, instead of only counting them
(ptr_missing_listin the zone API). - A zone's page links to the same zone in the other views ("also in
external"), in each view's colour, keeping the tab you are on. It
works for zones that aren't linked too, and the zone API's new
in_viewslists them. jarl.servicehas the aliasjarld.service, sosystemctl restart jarldworks too. The alias is linked when the unit is enabled; the
package relinks a unit enabled by an older version on upgrade.
Changed
-
A reverse zone's missing PTR records count only its own view's A and
AAAA records. An address only another view's records use (an internal
host, seen from the vps view's copy of10.0.10.in-addr.arpa) is no
longer reported as missing; it shows apart, asOther viewsinjarl zone show,ptr_other_viewsin the API and a note on the zone's page.
Filling (--fill,jarl zone fill-ptr, the page's button) names those
from the other view only when asked, with--other-views
(fill_other_views,?other_views=1, a checkbox in the New reverse
zone dialog), so one view's host names don't leak into another. When
there is nothing else to fill, Jarl says how many there are and how to
add them. -
Records, zones and validation findings sort numeric labels by value, so
2.10.0.10.in-addr.arpacomes before101.10.0.10.in-addr.arpain the
web UI, the CLI and the rendered zone files. Names still group by label
from the right (subdomains stay under their parent); other labels keep
the old byte order (host10beforehost2). Zone files are rewritten
in the new order the next time they change; named doesn't care about
record order. -
cname_chainno longer warns about one CNAME pointing at another (a
service name at a host alias is common, and named answers the chain at
once). A chain of three or more CNAMEs gets an info note that shows
it. -
A certificate's private key is only exported over HTTPS, the local
socket, or to the server itself (plain HTTP from another host is
refused withhttps_required). -
The Certificates page's "Used for" column says DoT and DoH for named,
with the addresses in the tooltip, instead of listing every address. A
certificate with no use says "not used by Jarl" rather than "nothing
yet": it may well be used elsewhere. -
Deleting a linked zone's local records (an override) removes that name
and type from that view only. It used to bring the shared records back
into the view, so a delete looked undone. The other views keep their
records, local to each now; Share one view's version (jarl record update ID --shared) to have it everywhere again. -
A linked zone's Compare views tab starts with a view it is linked to,
not the first other view. -
The New token form only offers templates within what the token's user
may do. A token never does more than its user, so offering more only
misled. -
A zone update that changes nothing is no change: saving a zone's
settings without changing them says "Nothing changed" instead of
staging an empty change. Staging operations that change nothing
(POST /changesets/{id}/ops, or?stage=) is a 400 "nothing to
change".
Fixed
-
The statistics' "Busiest times" grid drew hours without data taller
than the others (they picked up the page's padding for empty
messages). -
A token for one view of a linked zone (such as an ACME token with
views=external) couldn't add records: a new record is shared, and
that reached the other view. A new name and type is now local to the
view when the user may not change it in the other views. -
A zone name in several views had to be given with
--vieweven when
the user could see it in only one (jarl record list adbraun.lolwith
a one-view token), and the error named views the user can't see. Now
the one they can see is used. -
jarl view listwas empty for a user withoutviews:read, though
they can see zones in views. It now lists those views by name, colour
and visible zone count (markedlimitedin the API), without their
settings. -
The DNSSEC tab told you to give the DS record to your registrar for
every zone whose parent isn't in Jarl in the same view. Now it (and
jarl zone dnssec status, and the API's newds_at,ds_placeand
ds_note) says where it really goes: the parent zone in Jarl (in any
view now, the zone's own first), the registrar for a registered
domain, the parent zone wherever it is hosted for a subdomain, your
ISP or RIR for a reverse zone, and nowhere for a private name such as
home.lan(signing it has no effect). -
The Registrar tab (and
jarl zone registrar, and the DNSSEC page's
registrar button) was offered for every zone whenporkbun.domainsis
empty, and always failed for subdomain zones (lab.adbraun.lol),
reverse zones and private names (home.lan): Porkbun only knows
registered domains. Only zones that are a registered domain (by the
public suffix list) get it now; the others say what delegates them
instead. -
Auto-PTR in linked zones changed PTR records in every linked view, not
just where the address record is. A record local to one view got PTR
records in the other views too; deleting or changing the address in
one view deleted or moved the PTR records of views that still had it.
PTR records now follow each view's own address records, are local to
their view in a linked reverse zone, and each zone's Reverse DNS
setting counts for its own view. Fill also adds local PTR records
now, not shared ones. The same applies to Update PTR (--ptr). -
Saving the settings of a zone whose primary name server is outside it
(ns1.adbraun.lol.forwg.adbraun.lol) changed the name server to
ns1.adbraun.lol.wg.adbraun.lol.. The form showed the name without its
final dot, which the server reads as relative to the zone. Names outside
the zone now keep the dot, and the name server is only sent when it was
changed.
Upgrading
- Tested: a 0.6.0 install with views, linked and reverse zones and
statistics, opened by 0.6.1-rc.1: every zone, record and view kept,
named answered as before, and the new grant and limits worked. - The database gains a migration (certificate owners, per-user
certificate limits, certificate downloads). Going back to an older
version afterwards means restoring a backup made before the upgrade.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Certificates for other hosts:
-
Jarl v0.6.1-rc.1 Pre-release
released this
2026-10-18 17:00:20 +01:00 | 20 commits to main since this releaseAdded
- Certificates for other hosts:
jarl cert get NAME -d DOMAIN --dir DIR --hook CMDon a mail server or proxy has jarld obtain the certificate
(and renew it), waits, downloads it when it is newer than the host's
copy, and runs the hook with the file paths inJARL_CERT_*
variables. Its settings are saved, sojarl cert getalone refreshes
them all;jarl cert schedulewrites a daily systemd timer for that;
jarl cert savedlists them with their expiry;jarl cert forget
stops one. A certificate belongs to the user that asked for it (other
users can't take the name), is obtained again only when a name is
added or removed, and the Certificates page shows its owner and who
downloaded it, flagging hosts that haven't fetched a renewal. A new
certificatesgrant (certificates:write names=*.adbraun.lol) says
which names a user may have; it is never part of*. Users may own
certificates.max_per_usercertificates (10), or their own
--cert-limit. API:POST /certificates/{name}/request. - Certificates can be exported for use outside Jarl: Export… on the
Certificates page (download, or copy to the clipboard),
jarl cert export NAME [--dir DIR | --part PART]
andGET /certificates/{name}/pem?part=fullchain|cert|key|bundle.
Administrators only; every export of the private key is audited
(certificate.export_key). - A reverse zone's "addresses have no PTR record" banner lists them, with
the name each would get, instead of only counting them
(ptr_missing_listin the zone API). - A zone's page links to the same zone in the other views ("also in
external"), in each view's colour, keeping the tab you are on. It
works for zones that aren't linked too, and the zone API's new
in_viewslists them. jarl.servicehas the aliasjarld.service, sosystemctl restart jarldworks too. The alias is linked when the unit is enabled; the
package relinks a unit enabled by an older version on upgrade.
Changed
-
cname_chainno longer warns about one CNAME pointing at another (a
service name at a host alias is common, and named answers the chain at
once). A chain of three or more CNAMEs gets an info note that shows
it. -
A certificate's private key is only exported over HTTPS, the local
socket, or to the server itself (plain HTTP from another host is
refused withhttps_required). -
The Certificates page's "Used for" column says DoT and DoH for named,
with the addresses in the tooltip, instead of listing every address. A
certificate with no use says "not used by Jarl" rather than "nothing
yet": it may well be used elsewhere. -
Deleting a linked zone's local records (an override) removes that name
and type from that view only. It used to bring the shared records back
into the view, so a delete looked undone. The other views keep their
records, local to each now; Share one view's version (jarl record update ID --shared) to have it everywhere again. -
A linked zone's Compare views tab starts with a view it is linked to,
not the first other view. -
The New token form only offers templates within what the token's user
may do. A token never does more than its user, so offering more only
misled. -
A zone update that changes nothing is no change: saving a zone's
settings without changing them says "Nothing changed" instead of
staging an empty change. Staging operations that change nothing
(POST /changesets/{id}/ops, or?stage=) is a 400 "nothing to
change".
Fixed
-
The statistics' "Busiest times" grid drew hours without data taller
than the others (they picked up the page's padding for empty
messages). -
A token for one view of a linked zone (such as an ACME token with
views=external) couldn't add records: a new record is shared, and
that reached the other view. A new name and type is now local to the
view when the user may not change it in the other views. -
A zone name in several views had to be given with
--vieweven when
the user could see it in only one (jarl record list adbraun.lolwith
a one-view token), and the error named views the user can't see. Now
the one they can see is used. -
jarl view listwas empty for a user withoutviews:read, though
they can see zones in views. It now lists those views by name, colour
and visible zone count (markedlimitedin the API), without their
settings. -
The DNSSEC tab told you to give the DS record to your registrar for
every zone whose parent isn't in Jarl in the same view. Now it (and
jarl zone dnssec status, and the API's newds_at,ds_placeand
ds_note) says where it really goes: the parent zone in Jarl (in any
view now, the zone's own first), the registrar for a registered
domain, the parent zone wherever it is hosted for a subdomain, your
ISP or RIR for a reverse zone, and nowhere for a private name such as
home.lan(signing it has no effect). -
The Registrar tab (and
jarl zone registrar, and the DNSSEC page's
registrar button) was offered for every zone whenporkbun.domainsis
empty, and always failed for subdomain zones (lab.adbraun.lol),
reverse zones and private names (home.lan): Porkbun only knows
registered domains. Only zones that are a registered domain (by the
public suffix list) get it now; the others say what delegates them
instead. -
Auto-PTR in linked zones changed PTR records in every linked view, not
just where the address record is. A record local to one view got PTR
records in the other views too; deleting or changing the address in
one view deleted or moved the PTR records of views that still had it.
PTR records now follow each view's own address records, are local to
their view in a linked reverse zone, and each zone's Reverse DNS
setting counts for its own view. Fill also adds local PTR records
now, not shared ones. The same applies to Update PTR (--ptr). -
Saving the settings of a zone whose primary name server is outside it
(ns1.adbraun.lol.forwg.adbraun.lol) changed the name server to
ns1.adbraun.lol.wg.adbraun.lol.. The form showed the name without its
final dot, which the server reads as relative to the zone. Names outside
the zone now keep the dot, and the name server is only sent when it was
changed.
Upgrading
- Tested: a 0.6.0 install with views, linked and reverse zones and
statistics, opened by 0.6.1-rc.1: every zone, record and view kept,
named answered as before, and the new grant and limits worked. - The database gains a migration (certificate owners, per-user
certificate limits, certificate downloads). Going back to an older
version afterwards means restoring a backup made before the upgrade.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Certificates for other hosts:
-
Jarl v0.6.0 Stable
released this
2026-10-13 19:44:10 +01:00 | 34 commits to main since this releaseAdded
-
Reverse zones made easy (docs/reverse.md):
- Missing reverse zones: the Zones page and
jarl zone suggest-reverselist the reverse zones the private views lack for
their A and AAAA records' addresses: the /24 of a private IPv4 network,
a /32 for a public address (the rest of its /24 belongs to others),
the /48 of IPv6 addresses. Create one, or all (--create), filled. - Fill:
jarl zone create 10.0.10.0/24 --fill(ticked in the New
zone dialog) adds a PTR record for each address the view's records use
there;jarl zone fill-ptrand the reverse zone's page add the ones
missing later. An address with several names gets its mail or name
server's name, else a host's. - The right view: a reverse zone created without a view goes to the
private view whose records use its addresses. - PTR records kept in step per zone (
jarl zone update ZONE --auto-ptr, zone settings → Reverse DNS): adding, changing,
disabling or deleting an A or AAAA record does the same to its PTR
record, as the Update PTR box does for one change. - Suggestions come in two groups: yours (private networks, a ULA or
an IPv6 /48 this server has an address in), which Create all
creates, and public addresses, each a /32 or /128 to create only
if it is yours (not a web host's) or Dismiss. A view can turn
suggestions off (jarl view update vps --reverse-suggestions=false),
e.g. one only a VPS uses.
- Missing reverse zones: the Zones page and
-
A zone created inside another in the same view (a /24 inside a /8,
lab.adbraun.lolinsideadbraun.lol) takes the parent's records
under it, which named would no longer serve from the parent; a
delegation and its glue stay. -
Zone commands take a network for a reverse zone:
jarl zone show 10.0.10.0/24. -
New reverse zone (Zones page) lists the networks your records use
without a reverse zone, in every view, also where nothing is suggested
(suggestions off, dismissed, public views); pick one, change its size
(/48, /56, /64, /128 for IPv6, around the records' address) and create
it filled. With a view chosen, it also lists the addresses only other
views' records use, and fill names them from there (a VPS's AAAA in
external, its PTR in internal).jarl zone suggest-reverse --all [--view V]. Both lists have a search, so hundreds of addresses stay
manageable: the public addresses fold away, show 25 at a time, and
Dismiss these N dismisses everything a search found in one change
(--dismisstakes several networks). -
Encrypted DNS: several host names (one certificate for all; the
health check says when the served certificate misses one), and each
listen address gets its own views for the host names' records
(--address 10.0.10.5=internal, a view checkbox per address in the
form), local to the view, with a warning when a public view would get
a private address. A view no longer ticked loses the address. The form
starts from where the records are now. The Certificates page andjarl cert showsay what named uses a certificate for (DNS over TLS or HTTPS,
on which addresses and ports). -
docs/encrypted-dns.md: forwarding to Quad9 or Cloudflare over TLS, how to
check it works, and why not over HTTPS. -
Comparing one name across views:
jarl zone diff adbraun.lol nas [A],
and a Compare button on each record. -
Exploring the statistics: jarld keeps every answer for a while
(stats.retention.queries, default 7 days), and every client, name,
view, record type, result and blocklist on the Statistics page leads to
an explore page for it: answers over time, the top clients, names,
views, types, results and blocklists among them (each a link that
narrows it further), and the latest answers. "NXDOMAIN in external" →
the clients asking → everything one of them asks. A filter bar types
filters in, several values each (any of them),!valueto leave one
out and*.example.comfor a domain and below; hide on a list entry
leaves it out. Explore the answers opens the page from the
Statistics page.GET /stats/explore. -
Storage on the dashboard: the size of Jarl's databases (and how many
answers the query log holds), and per disk Jarl uses a bar of how full it
is and how much of it the databases take. The Statistics page shows the
statistics database's size too, and its disk tiles get the same bar.
Changed
jarl option set tls NAME …(andkey,remote-servers,http,
dnssec-policy,server…) replaces only the statement with that name:
settingtls cloudflareused to replacetls quad9.jarl option unset tls cloudflareremoves one by its name.- Compare views and
jarl zone diffare rebuilt around the view
you're on (docs/views.md#comparing-views): a summary per view, then
what is answered differently (a view's own records in linked zones,
drift otherwise) with Use this everywhere, the names only some
views have, grouped, with Add to VIEW, and how many are the same.
One line per record: the CLI cuts long TXT records to the terminal
(--wideshows them whole).--withpicks the views to compare with.
GET /zones/{zone}/comparereturns these sections instead ofrows.
Fixed
- Encrypted DNS: the client hints tested with kdig (Knot's, often not
installed) and with curl's JSON API, which named's DoH doesn't speak;
they use BIND'sdig +tls/dig +httpsnow. - Server options → Added by Jarl: long statements didn't wrap, and the
browser console reported a Content Security Policy violation (an inline
style the page's policy blocks).
Upgrading from 0.5
- Tested: 0.5.2 packages with views, a linked zone, a reverse zone,
blocking, atlsstatement and statistics, upgraded in place in Debian
13 (BIND 9.20.29): everything kept and answered as before, the new
features worked on the upgraded data, and a 0.5.2 backup restored. - The database gets two new versions (12 and 13), applied when jarld
starts; a 0.5 jarld can't open it afterwards, so take a backup first (sudo jarld backup). Nothing changes until you turnauto_ptron for a
zone. - The statistics database gets a new version too (the query log); 0.5
can't open it afterwards either. It starts empty and fills from then on.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-