Releases: drudge/sable
Release list
v1.3.5-rc.2
This second release candidate includes the performance and reliability
improvements from 1.3.5-rc.1, plus two console fixes found during cluster testing.
- Open Import from Catalog directly from the command palette. The action
follows zone-creation permissions and is hidden on read-only replicas. - Keep release versions such as
v1.3.5-rc.1on one line in the rolling-update
badge instead of splitting the version across lines.
v1.3.5-rc.1
This first release candidate for Sable 1.3.5 improves performance and reliability across catalog imports, cluster
status, and the web console, with more orderly shutdowns and clearer feedback
when console actions fail.
Faster imports and lighter background work
- Reduce processing time and memory use when reviewing large catalog imports.
- Reduce the work needed to refresh live cluster status and avoid repeating
cluster configuration capture when multiple refreshes arrive together. - Limit concurrent client-name lookups and bound their cache size, reducing
background DNS traffic and memory use when several console views are open.
A more reliable console
- Clean up dropdown, time-picker, and resolver controls when page sections are
refreshed, preventing unused event handlers from accumulating over time. - Show command-palette results consistently, including when the relevant page
is not open. Prevent duplicate submissions while an action is running and
report failed requests instead of announcing success. - Preserve useful validation and permission errors for zone and blocking
actions without replacing page content with an unformatted server error. - Save your profile display name and email with JavaScript disabled. Invalid
submissions return a full page with the entered values and an error message.
More orderly shutdowns
- Stop background tasks and DNS prefetch work before releasing the resources
they use during shutdown or failed startup. - Cancel stalled query-log and server-log writes during shutdown and give
queued entries a bounded opportunity to finish writing. - Skip DNS cache persistence when shutdown is incomplete, avoiding a snapshot
while background work may still be changing it.
v1.3.4
Sable 1.3.4 is a hotfix for cluster setup and certificate trust, including
replica enrollment after regenerating a private CA.
- Start initialization and reinitialization at the Node step with saved settings
prefilled. Resume the final step after saving or completing a requested restart. - Default fresh self-signed installations to Sable Private CA and prefill
editable DNS service addresses from configured listeners and local interfaces. - Support enrollment using the existing self-signed HTTPS certificate without
disabling certificate hostname or expiration checks. - Confirm replacement of an existing private CA before saving. Cancel leaves
it unchanged; Replace CA & Continue creates new certificate files and
preserves the previous CA and keys for recovery. - Detect changed certificate trust even at unchanged file paths, require a
restart, and reject enrollment-token creation while the loaded trust is stale.
Restart & Continue resumes setup after the service manager restarts Sable.
Update both nodes before retrying enrollment with an existing self-signed server
certificate: older builds accept CA certificates only in enrollment bundles.
Generate a fresh token after the primary has restarted. Replacing a private CA
can invalidate existing tokens and member trust; this hotfix does not provide
seamless CA rotation for a running cluster. See the cluster recovery procedure.
v1.3.3
Sable 1.3.3 is a hotfix for direct recursive DNS resolution. It fixes .com
delegation failures, DNSSEC validation after cached lookups, and failover when
an authoritative nameserver stops responding.
- Accept valid root-supplied addresses for
.comnameservers under
gtld-servers.net, fixingdelegation for com. has no resolvable name servers.
Referral addresses remain restricted to the named servers within the
referring parent's scope. - Query the parent authority for DNSSEC DS records even when a previous lookup
cached the child delegation, allowing validation to follow the correct
chain of trust. - Reserve time for alternative authoritative nameservers so retries against a
silent server cannot consume the entire resolution timeout before failover.
Existing recursive resolver configurations do not need to change. Conditional
forwarding routes and Forwarder zones continue to use their configured upstreams.
v1.3.2
Sable 1.3.2 lets you migrate Technitium forwarder zones with their local overrides,
keep them synchronized while you test, and move write ownership to Sable when
you are ready. It also improves zone-file imports and search controls throughout
the console.
Migrate forwarder zones without rebuilding overrides
- Zones → Import… → From catalog now recognizes supported Technitium
forwarder zones and preserves their forwarding rules and local records,
instead of rejecting them for an unsupported record type or missing apex NS. - Choose Secondary to create a read-only Secondary Forwarder that keeps
receiving source changes. Choose Primary to create an independent,
editable Forwarder after confirming that source writes are paused.
Importing does not subscribe Sable to the source catalog's membership. - Matching local answers take precedence before forwarding, including TXT and
MX as well as A, AAAA, and CNAME. Queries without a matching local answer
continue through the forwarding rules. Independent Forwarders allow adding
ordinary records alongside FWD records in the console. - Supported transfers preserve UDP, TCP, TLS, and QUIC forwarding, priorities,
and consistent DNSSEC validation settings. Technitium'sthis-serverrule
uses Sable's default resolver: configured upstreams in forward mode, or
iterative resolution in recursive mode.
Keep source changes in sync, then take ownership
- Secondary Forwarders refresh by full AXFR on their SOA schedule, authorized
NOTIFY, or Resync. Updates include changed forwarding rules and added or
deleted overrides. Failed or invalid refreshes retain the last valid snapshot
until SOA expiry; expired zones return SERVFAIL until synchronization recovers. - Actions → Convert to independent Forwarder makes Sable the writable
owner without deleting and recreating the zone. Pause source edits and
automatic writers, review the snapshot, and use Synchronize, then convert
to capture the final source changes. - Conversion retains records, forwarding and validation settings, permissions,
and history, advances the SOA serial, and stops source synchronization.
A failed final transfer or stale review leaves the Secondary Forwarder
unchanged. Use the stored snapshot explicitly skips the final transfer
and may retain stale or expired data.
Sable catalog-managed members cannot use this conversion; stage independent
imports for migration. Source-wide resolver and proxy settings are not copied.
Unsupported forwarding options are reported per zone without creating that
zone. The separate zone-file importer does not support Technitium's full textual
FWD syntax. See the migration guide
for supported settings and the cutover procedure.
Easier imports and consistent search
- A single Import… menu offers From file or text and From catalog.
Zone-file dialogs support drag-and-drop uploads, a selected-file summary,
and a separate text editor with Paste from clipboard. New-zone imports
detect the zone name from the file when possible. - Fix zone-file imports whose apex SOA owner is written as the full zone name
without a trailing dot, while preserving other relative names. - Keep catalog import controls positioned correctly as the dialog opens.
- Standardize search fields across the console, with consistent search icons
and clear buttons for quickly resetting a query or filter.
v1.3.1
Sable 1.3.1 adds native passkeys for standalone servers and clusters, making
passwords optional while retaining OpenID Connect and password sign-in.
Passkeys and account access
- Register and manage passkeys in Profile → Account, below Account details.
Sign in without a username using your device's fingerprint, face, PIN, or a
security key. Passkeys require an HTTPS DNS hostname; localhost is supported
for development. Unsupported browsers and ordinary HTTP connections hide
passkey sign-in and registration controls. - Disable password sign-in after adding a passkey, then re-enable the existing
password without resetting it. Accounts without a password can set one.
Credential removal and password controls use Sable's confirmation dialogs. - Passkey public credentials replicate and are included in authorization
backups. Existing HTTPS identities and cluster membership determine trusted
origins, with a stable RP ID derived from the registrable domain. Nodes under
the same domain can accept the same credential after replication. - Settings → Web → Enable passkeys controls availability and defaults on.
Disabling preserves saved credentials and blocks passkey authentication and
enrollment. The settings form checks that active accounts have an enabled
password or a link to the enabled OIDC provider before allowing the change. - The passkey guide covers enrollment, password
recovery, standalone HTTPS, reverse proxies, cluster failover, and backups.
Initial administrator setup still starts with a password.
Update preferences
- Software Updates in Settings now includes Include pre-releases alongside
Check for updates on sign-in. Both wait for Save Settings. - The About page retains its release-channel control and shares the same saved,
node-local preference with Settings.
v1.3.0
Sable 1.3.0 adds native passkeys for standalone servers and clusters, making
passwords optional while retaining OpenID Connect and password sign-in.
Passkeys and account access
- Register and manage passkeys in Profile → Account, below Account details.
Sign in without a username using your device's fingerprint, face, PIN, or a
security key. Passkeys require an HTTPS DNS hostname; localhost is supported
for development. Unsupported browsers and ordinary HTTP connections hide
passkey sign-in and registration controls. - Disable password sign-in after adding a passkey, then re-enable the existing
password without resetting it. Accounts without a password can set one.
Credential removal and password controls use Sable's confirmation dialogs. - Passkey public credentials replicate and are included in authorization
backups. Existing HTTPS identities and cluster membership determine trusted
origins, with a stable RP ID derived from the registrable domain. Nodes under
the same domain can accept the same credential after replication. - Settings → Web → Enable passkeys controls availability and defaults on.
Disabling preserves saved credentials and blocks passkey authentication and
enrollment. The settings form checks that active accounts have an enabled
password or a link to the enabled OIDC provider before allowing the change. - The passkey guide covers enrollment, password
recovery, standalone HTTPS, reverse proxies, cluster failover, and backups.
Initial administrator setup still starts with a password.
Update preferences
- Software Updates in Settings now includes Include pre-releases alongside
Check for updates on sign-in. Both wait for Save Settings. - The About page retains its release-channel control and shares the same saved,
node-local preference with Settings.
v1.2.0
Sable 1.2.0 makes it easier to migrate authoritative zones from Technitium and
other DNS servers, with bulk catalog import, in-place conversion to Primary,
and clearer guidance throughout the cutover. It also improves the everyday
console experience on desktop and mobile.
Import zones from a catalog
- A new Zones → Import from Catalog wizard connects to a source catalog,
discovers its members, and lets you import up to 25 selected zones at a time.
Configure the source servers, transfer protocol, and TSIG key in the dialog. - Choose Secondary to keep zones synchronized with the existing DNS server
while you test, or Primary to make Sable writable immediately. Primary
imports require confirmation that source edits and automatic writers are paused. - Imported zones are independent of the source catalog. This is a one-time
import, not a catalog subscription; Sable's native cluster replication
distributes the imported zones to its replicas. - Existing Sable zones are left unchanged. Results show each zone's outcome,
so a failed transfer does not discard successful imports. Catalog membership
is checked again before importing to catch changes since discovery. - Signed zones can be imported as Secondaries. Primary import is blocked until
their DNSSEC transition is complete; a blocked Primary import does not silently
create a Secondary instead. Forwarder settings and catalog-specific properties
must be configured separately.
Convert a Secondary to Primary
- Convert to Primary Zone moves write ownership of an independent, unsigned
Secondary to Sable without deleting and recreating the zone. Zone identity,
records, permissions, and revision history are retained. Conversion is available
in the console and API. - Review the source servers, SOA serial, and record count, confirm the source
write freeze, and synchronize once more before converting. A failed final
transfer leaves the zone Secondary. A stored-snapshot option is available when
needed, but requires you to verify that the saved data is suitable for cutover. - Conversion advances the SOA serial and stops upstream refresh and Secondary
expiry tracking. Stale confirmations and late transfers cannot overwrite the
converted Primary. Existing SOA and NS targets remain for you to review before
retiring the source. - DNSSEC-signed zones and members managed by a Sable catalog show why conversion
is unavailable. Expandable DNSSEC migration guidance explains the signing
transition; transferred public records do not include private signing keys.
Membership in a catalog on the source server alone does not block conversion
of an independent Sable Secondary. - Migration dialogs use clearer status cards, warning and information alerts,
and aligned confirmation controls. When conversion is unavailable, the dialog
offers Close instead of a disabled conversion button.
Cluster visibility
- Zone lists and detail pages identify the catalog managing each zone, with a
link to the catalog on the detail page. - Rolling Updates remains visible when a clustered installation cannot use
it. A warning explains the blocking condition, and unavailable update actions
are hidden. Docker guidance clarifies that automatic restart requires both
SABLE_WEB_UPDATES=trueandupdates.restart_managed=true, plus a working
container restart policy. - Cluster IDs use the available space and wrap instead of being truncated early.
- Updated timestamps and node uptime animate changing digits in place, with
fixed-width digits and consistent lowercase time units. Reduced-motion
preferences are respected.
Console polish
- The Sable logo uses a black background behind the gold S in light mode for
stronger contrast, without an extra black outline around the badge. - Delete buttons for blocked and allowed entries remain visible without hovering,
making them easier to find and use on touchscreens. - Dashboard stat text uses darker shadows matched to each tile's color.
- About, Support, and Metrics headings use consistent icons in the logo's gold.
Migration documentation and demo
- A Technitium migration guide covers inventory, transfer staging, catalog import,
ownership cutover, DNSSEC transitions, verification, and rollback planning. - A disposable migration lab runs a real Technitium container alongside a
three-node Sable cluster. It includes standalone, catalog-managed, and signed
zone examples for trying the workflow before a production migration.
v1.1.0
Updates
- The console checks for releases after sign-in by default and shows a dismissible
notification with release notes. Turn checks off for this node in Settings → General. - About displays notes from the GitHub release, and installed versions on About
and Cluster link to their release pages. - Notifications let you install this node or update the entire cluster and
remember your last choice in this browser. Installation progress and the
restart action stay in the notification, with confirmation after an update. - Release notes remain available after restarting, including while offline.
- Cluster can update all nodes to one reviewed release, restarting replicas one
at a time and waiting for their running version and synchronization before
updating the primary. Progress survives the primary's final restart. Failures,
timeouts, or an operator stop prevent further restarts. - Rolling updates require support and automatic restart on every node. Older
nodes need a manual upgrade first. DNS clients must use multiple nodes to
maintain service during a restart. - Publishing now requires curated notes for every release, including candidates;
merge commits and raw commit lists no longer become user-facing notes.
v1.0.2
This patch release keeps live console updates from interrupting keyboard
navigation and makes block-list downloads easier to follow.
Console interaction
- Dashboard stat cards and scope controls retain keyboard focus through live
updates. Automatically refreshed panels also preserve open controls and
unsaved form edits, including backup settings. - Routine dashboard refreshes keep the chart at full brightness. Loading
feedback appears when changing the chart range or overview scope. Stat cards
update in place so their focus and hover highlights do not pulse. - Query logs discard in-flight refreshes after pausing live updates or changing
filters, so an older response cannot replace the selected view. - About shows a seven-character commit SHA on mobile while retaining the full
SHA on larger screens and in the tooltip.
Block-list feedback
- Adding a catalog or custom block list shows a compact loading spinner and
prevents duplicate submissions while the download and compilation finish.
The dialog stays in place, and mobile Add buttons keep their visible icons. - Manual add and update failures show error toasts. Connection interruptions
and unrendered HTTP errors now show a dismissible notice, including inside
the open Add dialog, without clearing the custom URL.