Skip to content

knit-spool 0.8.0

Latest

Choose a tag to compare

@github-actions github-actions released this 28 Oct 19:51
· 18 commits to main since this release
v0.8.0
b4d3c6e

The signal release. Typing indicators cross a Spool now, for every phone: a new sig record is
fanned out live to a conversation's other members and never stored, and no ticket gates it, so
phones without one get them too. Pre-1.0, so every interface below is still subject to change. The
wire change is additive: a new optional hello key and a record that only a client told of it
sends, and that an older client skips. What an operator sees move: signals are on by default,
and a Spool that sets SPOOL_MAX_RECORD below 8704 must lower SPOOL_MAX_SIG, or it refuses
to start
. A 0.7 Spool on the default record size upgrades in place.

Added

  • Signals: typing cues relayed live, never stored, and open to every phone (knit-next
    docs/SPOOL_PROTOCOL.md §7.8, ba26a7904; ADR 2026-10.2q49). hello carries sig: { maxBytes, rate }, and
    a new sig record goes to every other subscriber of its scope, with casts' lane rules: no q, never
    answered, never struck, never stored, and never counted toward the slow-consumer close. Unlike a
    cast, no ticket gates a sig, whatever SPOOL_TICKET_GATES says, so phones without a ticket get
    typing indicators over the Internet too. On by default: SPOOL_RATE_SIGS (2 a second per
    connection, burst 4×, one address 8× that), SPOOL_MAX_SIG (8 KiB) and the Spool-wide
    SPOOL_RATE_SIGS_TOTAL (200), budgets apart from the casts'. All reloadable, and
    SPOOL_RATE_SIGS=0 turns signals off and stops them on live connections at once. Metrics
    knit_spool_sigs_total, knit_spool_sigs_fanned_total and knit_spool_sigs_dropped_total{reason},
    and sigs=+N on the status line. New conformance checks sig-advertised, sig-fanout,
    sig-silent-refusal and the advisory sig-rate. A client that predates signals skips the record.
    A Spool that sets SPOOL_MAX_RECORD below 8704 must set SPOOL_MAX_SIG to fit, or it refuses to
    start. 0.8.0-dev.2 was the first development build to read the three variables.

Container image

Published to GHCR and Docker Hub for linux/amd64 and linux/arm64:

docker pull ghcr.io/getknit/knit-spool@sha256:90798dcae551caa95010711039a32b4f8b788670a7c5e1e9d8f00a604ea5fbe0
docker pull docker.io/getknit/knit-spool@sha256:90798dcae551caa95010711039a32b4f8b788670a7c5e1e9d8f00a604ea5fbe0

Pin the digest in SPOOL_IMAGE rather than a tag — see deploy/.env.example. The GHCR
image carries a signed build provenance attestation:

gh attestation verify oci://ghcr.io/getknit/knit-spool:0.8.0 --repo getknit/knit-spool

Standalone archives

For running the daemon without Docker. SHA256SUMS covers every archive attached here.
Both need a JDK 21 runtime on the host; unpack and run bin/knit-spool.

Upgrading a live spool? HOSTING.md covers the operational side, and CHANGELOG.md calls
out anything that moves the wire, the on-disk store, or a configuration default.