Skip to content

Explainer

What a spool is.

Knit carries messages phone to phone. A spool is the piece that carries them further — Knit's optional internet plane, and the only part of it that touches a server.

A relay, not a server

Knit works without any server. Phones pass messages to each other over Bluetooth and Wi-Fi, and a paired LoRa radio can carry them for kilometres. What that mesh cannot do is reach a phone that is nowhere near it. A spool is Knit's answer: a small store-and-forward relay on the internet that holds a message until its recipient connects, then hands it over.

Nothing about Knit requires one. A device can use one spool, several or none, and the mesh keeps working either way. A spool adds reach — the people who are not in range — and a place for messages to wait.

What it holds

Every message is sealed on the sending device before it leaves. What reaches a spool is a sealed frame filed under a conversation id — a code derived so that it maps to nobody. The spool keeps a bounded set of those frames per conversation, streams new arrivals to the devices that are connected, and lets a device that has been away catch up on what it missed.

A spool is a relay, not an archive. Frames are held for a bounded window — seven days by default in the current Knit Spool release — and when a spool is full, the least-active conversation is dropped first. Your messages live on your devices.

What it can see

Enough to do its job, and nothing that would tell it whose job it is doing.

  • Conversation ids, derived so they map to nobody
  • Sealed frames, and how big they are
  • Attachment ids, and the size of each chunk
  • When frames arrive

What it never sees

This is how the daemon is built, not a promise its operator makes. It holds on a spool you run yourself and on one we run for you alike.

  • Who you are, or who is in a conversation
  • What any message says
  • Who read what
  • Which other spools your devices use

Photos and files

An attachment takes the same sealed path a message does: split into chunks on the device, held on the spool until the other device connects, and put back together there. The spool stores the chunks and their sizes. It never has the picture.

Private or open

A spool can ask for a token, or take anyone with the address. Behind a token, only the devices holding it connect, and the daemon accepts two tokens at once so a rotation drops nobody. An open spool can protect itself with proof-of-work instead: connecting costs a device a little compute and flooding costs a lot. On Knit Hosted it switches on by default the moment you remove the token.

Several spools, and no single point

Spools never talk to each other. A device sends the same sealed frame to every spool it knows and reads back from each, so two people need only one spool in common — not the same list. A spool that goes away takes nothing with it that another device in the conversation cannot send again.

A commons

A spool can also carry one shared room, the commons, for everyone who holds its invite — sealed like any other conversation. Whoever runs the spool mints the invite. The spool relays the room without being able to read it or join it, and shows devices the name the room was given.

Where a spool comes from

The reference spool is Knit Spool: free software under the AGPL, published on GitHub, and small enough to run from one docker compose file on a modest box. It implements a published protocol and ships the conformance suite that any other implementation can be checked against.

Knit Hosted runs that same released daemon for you: under a hostname of its own, sized to the devices you connect, with the token, the commons and the usage on a dashboard.

Next: Run your own, or let us · See pricing