Skip to content

Releases: drudge/sable

v1.3.5-rc.2

v1.3.5-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Sep 02:33
Immutable release. Only release title and notes can be modified.
f27ca5b

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.1 on one line in the rolling-update
    badge instead of splitting the version across lines.

v1.3.5-rc.1

v1.3.5-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Sep 01:50
Immutable release. Only release title and notes can be modified.
9628f09

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

Choose a tag to compare

@github-actions github-actions released this 14 Sep 16:13
Immutable release. Only release title and notes can be modified.
df67056

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

Choose a tag to compare

@github-actions github-actions released this 13 Sep 16:48
Immutable release. Only release title and notes can be modified.
5bc0813

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 .com nameservers under
    gtld-servers.net, fixing delegation 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

Choose a tag to compare

@github-actions github-actions released this 13 Sep 15:58
Immutable release. Only release title and notes can be modified.
16e1e9c

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's this-server rule
    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

Choose a tag to compare

@github-actions github-actions released this 13 Sep 00:29
Immutable release. Only release title and notes can be modified.
73975ee

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

Choose a tag to compare

@github-actions github-actions released this 13 Sep 00:12
Immutable release. Only release title and notes can be modified.
51dfe47

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

Choose a tag to compare

@github-actions github-actions released this 11 Sep 22:38
Immutable release. Only release title and notes can be modified.
5be94e1

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=true and updates.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

Choose a tag to compare

@github-actions github-actions released this 11 Sep 04:30
Immutable release. Only release title and notes can be modified.
fec8fcc

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

Choose a tag to compare

@github-actions github-actions released this 10 Sep 13:08
Immutable release. Only release title and notes can be modified.
edee1a1

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.