Repository navigation
The signal release. Typing indicators cross a Spool now, for every phone: a new
sigrecord 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 optionalhellokey 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 setsSPOOL_MAX_RECORDbelow 8704 must lowerSPOOL_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).hellocarriessig: { maxBytes, rate }, and
a newsigrecord goes to every other subscriber of its scope, with casts' lane rules: noq, never
answered, never struck, never stored, and never counted toward the slow-consumer close. Unlike a
cast, no ticket gates a sig, whateverSPOOL_TICKET_GATESsays, 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=0turns signals off and stops them on live connections at once. Metrics
knit_spool_sigs_total,knit_spool_sigs_fanned_totalandknit_spool_sigs_dropped_total{reason},
andsigs=+Non the status line. New conformance checkssig-advertised,sig-fanout,
sig-silent-refusaland the advisorysig-rate. A client that predates signals skips the record.
A Spool that setsSPOOL_MAX_RECORDbelow 8704 must setSPOOL_MAX_SIGto fit, or it refuses to
start.0.8.0-dev.2was 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:90798dcae551caa95010711039a32b4f8b788670a7c5e1e9d8f00a604ea5fbe0Pin 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-spoolStandalone 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.