Updates

What's new in Knit

What changed in each release of Knit, and why any of it was worth doing.

Knit publishes its changelog alongside its source, and this page reads from that file. The versions, dates and change lists below come from the app itself; the paragraphs in between are ours.

  1. 2.4.0#

    Voice notes, and optional Internet relays for when nobody is in radio range.

    Knit works with no internet needed and no account, the same as it always has. What 2.4.0 adds is a way around the one situation the mesh has never had an answer for: the person you want to reach is nowhere near you, and no chain of phones between you ever forms.

    Internet relays are opt-in continuity, not a service Knit runs. The Internet plane stays off until you add a relay yourself, and once it is on, a relay carries only conversations you already have, as sealed frames it cannot read. There are no accounts to make and nobody to look up. What a relay can see is that a conversation is active and the IP addresses connecting to it, which is why Knit explains all of that before you switch it on. Sealed copies expire within 48 hours. Anyone can run one; the server is called knit-spool and it is AGPL.

    Voice notes arrive in direct messages and group chats, sealed the way photos already were. Hold the microphone to record, and you hear the recording back before deciding to send it. The public Nearby room does not take them: it is plaintext by design, and Knit has no way to check speech the way it checks images before a stranger sees one.

    The Wi-Fi Aware retry loop that 2.3.1 only slowed down is finished. On the phone that fix was written for, Knit was throwing its own backoff away every time the system mentioned Wi-Fi, and ended up asking hundreds of times a second. It now tells a radio genuinely coming back from a phone repeating itself, gives up on one that keeps refusing, and remembers that it gave up.

    • Opt-in Internet relays park a sealed copy of a message when no chain of phones can reach the other end. They stay off until you add one, and the copies expire within 48 hours.
    • Voice notes in direct messages and group chats, sealed the way image attachments are. The public Nearby room does not take them, because Knit cannot check speech before a stranger hears it.
    • Add a contact from a link when you are too far apart to scan each other's code. Verifying and adding are one screen now, and a link proves less than a scan, so compare safety numbers over a call if it matters who is on the other end.
    • Two people with the same name are told apart by the alias Knit gives every device, so you can say which Sam you are.

    How Internet relays actually work

    All 25 changes in 2.4.0

    Added

    • Knit puts less on the air. Between two current phones the delivered tick — for a private message, a reaction, a nearby-room or group post — now crosses the Wi-Fi Aware fast lane in one packet instead of two, a short message likewise, and a profile in two instead of three. The frame travels in a compact form the receiver unpacks before checking the signature, so nothing about what is signed changes, and an older phone keeps receiving exactly what it did.
    • Two people with the same name are now told apart. When someone nearby uses a name Knit already knows, both show their alias after it — the two-word name Knit gives every device, like "Sam (JoyfulFerret)" — in the room, the chat list, Contacts, group members and notifications, and it goes away again when the names differ. Your own alias is now shown in Settings under your name, and on a contact's profile, so you can tell someone which Sam you are. Typing an alias after "@" finds the right person to mention.
    • Add a contact from a link. Too far apart to scan each other's code? Share your contact link (menu › Add contact › Share link) over any messenger, and add someone from theirs — tap it, share it to Knit, or paste it into Add contact. Each of you ends up with the other's key pinned and in Contacts, no message needed; with Internet relays on, the two of you also meet at a relay before you have ever exchanged a message. A link is not a scan: compare safety numbers over a call if it matters who is on the other end.
    • Voice notes. Hold the microphone in a chat to record, slide up to keep recording hands-free, and slide away to cancel. You hear the recording back before deciding to send it, and can add text to it like any other attachment. Voice notes travel exactly the way photos do — encrypted end to end, carried by nearby phones when you are out of range of each other, and by your Internet relays if you have turned them on. They are available in direct messages and group chats. They are not offered in the Nearby room, because Knit checks images for explicit content before they reach you and there is no equivalent check it can run on speech, so it does not put unchecked audio in front of strangers.
    • Group delivered-ticks (the ✓✓ on your own group messages) now survive you being away: members' receipts are batched, encrypted, and carried by the mesh — and the Internet relays, where enabled — until they reach you, just like the messages themselves.
    • Knit can now use Internet relays, which you turn on yourself. Knit remains a messenger that works with no internet and no account, but a message to somebody out of radio range used to wait for the two phones, or a chain of phones between them, to meet. With relays on, Knit parks a sealed copy on a relay server, which hands it over the next time the other phone connects. A one-time explanation spells out what a relay can see — your IP address, when you send, and roughly how much — and what it cannot: your messages or photos, who you are talking to, or who else is in a group.
    • A Settings screen for relays lists the ones you use, adds and removes them, and reports each one as connected, still connecting, or why it refused. Knit ships with one relay already listed and unused; it stays inert until you turn the feature on, and removing it sticks.
    • Each relay also has its own switch, so you can stop using one without deleting it. Deleting forgets its address and any access token it came with, which for a private relay cannot be undone; switching one off just stops sending to it. The main switch still decides whether sealed copies leave your phone at all — a relay's own only narrows which of them carry.
    • Group chats travel over relays as well as direct messages, without anyone learning from the relay that a group exists or who is in it.
    • Photos travel over relays too, in sealed pieces. A photo waits while a phone that can carry it is still in radio range, so an ordinary in-person exchange never touches a relay. Where a relay cannot take it — no photo support, or the photo is larger than any relay in your list will hold — the message says "Nearby only" rather than reporting a failure: it still arrives over Wi-Fi or Bluetooth as it always did.
    • Changes to your name, status, or photo now reach people you have only ever met across a relay. They previously spread by radio alone, so such a contact kept whatever it saw when you were last in range.
    • A conversation says how it is being carried. A globe appears beside the double tick when the other phone answered over the internet, and beside a message that arrived that way; the connection header says when the radios are dark and a relay is carrying the conversation. The Nearby room is exempt by design — it is public and unencrypted, so it is never uploaded, and says so.
    • Diagnostics gains an Internet relays section: what has been sent and received over them, photo pieces moved, photos left to the radios, and any errors a relay reported.
    • A fresh install now says what to do next. The chat list always has the Nearby room in it, so it never looked empty even when there was nothing to open; a short card under that row now names the two ways in — broadcast to everyone in range, or add one person. It disappears on its own as soon as you have a conversation to open.

    Changed

    • Adding someone is one screen again. "Verify contact" and "Add by link" were two entries in the menu that did halves of the same job; they are now a single Add contact screen — your code to be scanned, a scanner for theirs, your link to send, and a box to paste the link they sent you. Nothing about how a contact is added changed: a scan still verifies the key on the spot, and a link still asks you to compare safety numbers before you trust who is on the other end.
    • Knit is a smaller download and starts faster. The build strips out the parts of its bundled libraries the app never actually calls — about four megabytes of code that was being shipped and loaded for no reason. Nothing about what Knit does changed; there is just less of it to install and less for your phone to hold in memory while it runs.
    • Nearby phones relaying your messages no longer learn what kind of attachment one carries. A photo and a voice note used to be told apart by a label sent alongside them in the clear; that label now travels encrypted with the message, where only the person you sent it to can read it. Relays still see roughly how large an attachment is, which they need in order to carry it for you.

    Fixed

    • The last fix for phones that shut Knit down seconds after opening did not hold on the phone it was written for. Knit was slowing its retries down correctly, then throwing that away every time the phone announced anything about Wi-Fi Aware — and a phone that cannot run Wi-Fi Aware announces something after every refusal, so the two fed each other and Knit ended up asking hundreds of times a second. It now tells a radio genuinely coming back from a phone just repeating itself, never asks more than once every three seconds no matter what, stops entirely well before Android would step in, and remembers that it gave up so a restart does not start the whole thing over. Bluetooth carries the mesh throughout.
    • Knit no longer gets stuck restarting on a phone where the on-device checking model won't run. The model that screens messages and photos runs in native code, and on unusual hardware it could close the app a few seconds after opening, every time, with nothing to show for it. Knit now notices that pattern, turns that model off, and carries on — Diagnostics says so, and offers to try it again. While it is off, messages in the Nearby room are still checked against the word list; direct messages, group chats and photos are not checked.
    • Knit no longer crashes when Android restarts the mesh out of sight. Phones that run short of memory — and some that simply prune background apps hard — stop Knit while it is off screen and start it again a moment later. Since Android 12 that restart is not allowed to put the mesh notification back up, and Knit was treating the refusal as a crash. It now stands down quietly and picks the mesh up again the next time you open the app or restart your phone. To have the mesh survive on its own instead, turn on Allow background battery use during setup or from Profile.
    • A relay you have configured can no longer flood the app's memory. Knit now holds only what it actually asked a relay for, ignores anything else the relay volunteers, and treats the relay's stated size limits as a claim to be capped rather than a fact. Relays were always untrusted with the contents of your messages; now they are untrusted with how much of your phone they can use.
    • A notification can no longer be used to exhaust your phone's memory. When someone messaged you, Knit opened their profile photo at whatever size the picture claimed to be — and a picture that arrives from someone else is theirs to choose. A tiny file can unpack into hundreds of megabytes. Knit now opens every photo at the size it actually needs, and remembers the ones it has already opened, so a busy conversation does the work once instead of once per message.
    • Opening "New message" no longer flashes "no contacts yet" before your contacts appear. The list takes about a second to read on a cold start, and the screen could not tell "still loading" from "nothing here", so it drew the empty state over the transition. It now shows placeholder rows that fade into the real ones.
    • Phones a few miles away, and phones with no Wi-Fi Aware radio at all, no longer show up as directly connected over Wi-Fi Aware. A relayed message carries its original sender's name, and Knit was crediting that name with the link the message actually arrived on. It now credits the phone that put the message on the air, which is the only sender Wi-Fi Aware really tells it about.
    • Knit no longer re-downloads the same messages from a relay over and over. Relays hold a sealed copy longer than a phone keeps one, so for the back half of that window Knit kept asking for messages it had already delivered and thrown away, on every reconnect, and never counted a conversation as caught up. It now remembers that it dealt with them.

    Read 2.4.0 in full on What’s New →Tag and signed APK on GitHub

    Knit is free and ad-free. Donations are what pay for the next one of these: Ko-fi or Liberapay.

  2. 2.3.1#

    One fix, for phones that were being shut down seconds after Knit opened.

    Worth updating if Knit had started closing itself a minute after you opened it. Only some phones hit the bug, and the ones that did gave almost nothing away. Messages still went through, because Bluetooth was carrying the mesh the entire time, so the only symptom was the app disappearing.

    The cause was a Wi-Fi chip that reports Wi-Fi Aware as available and then declines to hand it over. Knit asked again every three seconds, forever, until Android decided the app was misbehaving and shut it down. This release slowed those retries down, which was not enough on the phone it was written for; the finished fix landed in 2.4.0.

    The one change in 2.3.1

    Fixed

    • Knit no longer disappears seconds after you open it on a phone whose Wi-Fi chip will not run Wi-Fi Aware. Some phones report Wi-Fi Aware as available and then refuse to hand it over while Wi-Fi is connected, and Knit kept asking every three seconds, forever — each attempt costing the system a little memory it never got back. Android eventually stopped the app for asking too often: within a minute of opening it, over and over, with nothing in the logs to explain why. Knit now slows those attempts down and gives up on a radio that keeps refusing, then picks it up again if Wi-Fi Aware becomes usable. Bluetooth carried the mesh the whole time, which is why messages still went through.

    Read 2.3.1 in full on What’s New →Tag and signed APK on GitHub

    Knit is free and ad-free. Donations are what pay for the next one of these: Ko-fi or Liberapay.

  3. 2.3.0#

    Forward secrecy for direct messages and group chats, encrypted delivery receipts and reactions, taking a photo without leaving the chat, and a crash report you can read before deciding to send it.

    Direct messages and group chats were already encrypted. What changed here is that Knit now forgets: conversations re-key as they run and the spent keys are deleted, so traffic somebody recorded off the air last month cannot be opened with a phone seized this month.

    Keys rotate per block of messages rather than per message, and a chat with a peer on an older build keeps using the previous static-key scheme, which has none of this, until both phones have updated. None of it protects a phone someone is holding, either. Messages sit encrypted at rest under a hardware-backed key, so reading them means unlocking the device.

    • Direct messages and group chats re-key as they run and drop the spent keys, so traffic recorded off the air cannot be decrypted later.
    • Delivery receipts and reactions travel sealed in direct messages and group chats, rather than readable by any phone relaying them. They stay in the clear in the public Nearby room, which is plaintext by design, and toward peers on older builds.
    • Long-press the attach button to take a photo without leaving the chat. Knit sends the shot without writing it to your gallery.
    • Message info says when a message actually reached you, beside the time its author sent it. The gap is how long the mesh took to carry it.
    All 11 changes in 2.3.0

    Added

    • Direct messages between updated phones are now forward-secret. Each conversation derives its own key material from a prekey published in your profile, then re-keys as the conversation goes back and forth, and drops the old keys. Someone who records traffic today and gets hold of a phone later cannot read the earlier messages.
    • Group chats gain the same property. Every member drives their own key chain and hands its current seed to the others inside encrypted direct messages. A group's info screen says whether the group is running the new scheme or still waiting on somebody to update.
    • Delivery receipts and reactions are encrypted. Until now they crossed the mesh readable by any phone relaying them, so an onlooker could tell when a message reached you, and who reacted to which message with what. They now travel sealed and look like ordinary messages on the wire.
    • You can take a photo without leaving the chat. Long-press the attach button — the round button beside an empty message field — and a viewfinder opens in place of the conversation. The shot is sent as an attachment without ever being written to your gallery or handed to another app.
    • Long-pressing a message offers "Message info": who sent it, when, whether it has been delivered and how it travelled, and the full list of who reacted with each emoji, which the reaction tally on the bubble does not show.
    • Message info also says when a message reached you, on your own phone's clock, beside the time its author says they sent it. The gap between the two is how long the mesh took to carry it — sometimes seconds, sometimes hours if it came the long way round through someone else's phone. A direct message you sent shows the moment it landed on theirs. Messages already on your phone have no arrival time and never will: Knit wasn't watching for it then, and would rather say nothing than guess.
    • Knit records its own crashes on the device. A Diagnostics row shows the report, with identifiers, file paths and contact names stripped out of it, and you decide what happens next — copy it, share it, or open a prefilled bug report. Nothing is uploaded, and there is no code in Knit that could upload it.

    Changed

    • Chats with a phone on an older version keep working, on the previous encryption scheme. A group falls back the same way while any one member has not updated, and moves over on its own once everyone has.
    • The Profile entry in the overflow menu is now called Settings, since the screen also holds settings that are not about you, such as content filtering.

    Fixed

    • Saving a received photo to your gallery now saves the photo. Attachments in direct messages and group chats are stored encrypted, and the export wrote those encrypted bytes to Pictures/Knit under an image name — an unopenable file, reported as a success.
    • Editing your name, status or photo now reaches the other phone straight away. An edit made soon after first contact was re-sent under a label the mesh had already seen, so it was discarded on arrival and stayed invisible for up to twelve hours.

    Read 2.3.0 in full on What’s New →Tag and signed APK on GitHub

    Knit is free and ad-free. Donations are what pay for the next one of these: Ko-fi or Liberapay.

  4. 2.2.3#

    A themed launcher icon, and a launch screen that follows the system light/dark theme.

    Knit's launcher icon now ships a monochrome layer, so on Android 13 and newer it picks up your home screen's theme instead of sitting there in its own colours. Opening the app on a dark phone no longer flashes near-white at you first. Neither is a big change; both are the sort you see every day.

    All 2 changes in 2.2.3

    Added

    • The launcher icon supplies a monochrome layer, so on Android 13 and newer it takes part in themed-icon colour schemes instead of falling back to a generic shape.

    Fixed

    • Starting Knit on a dark-themed device no longer flashes a near-white screen before the app draws. The launch window and splash background now track the system theme, in lockstep with the in-app colours.

    Read 2.2.3 in full on What’s New →Tag and signed APK on GitHub

    Knit is free and ad-free. Donations are what pay for the next one of these: Ko-fi or Liberapay.

  5. 2.2.2#

    Fixes a crash in "Scan their code".

    A safety number only means something if you can actually scan one, and on some phones scanning closed the app. The scanner has been rebuilt on CameraX, so a frame it cannot decode is now a frame without a code in it rather than a crash. Declining the camera permission gets you an explanation instead of a blank screen, and showing your own code works either way.

    All 2 changes in 2.2.2

    Fixed

    • "Scan their code" no longer crashes when the camera opens. The scanner has been rebuilt on CameraX; the library it used before could crash the app on devices whose camera reports one frame size and delivers another, which is why it worked on some phones and not others. Decoding now treats any unexpected frame as a frame without a code in it.
    • Declining the camera permission, or running on a device with no camera, now shows an explanation instead of a blank screen. Showing your own code still works either way.

    Read 2.2.2 in full on What’s New →Tag and signed APK on GitHub

    Knit is free and ad-free. Donations are what pay for the next one of these: Ko-fi or Liberapay.

  6. 2.2.1Housekeeping

    The first release available on F-Droid. A build-only change with no code or feature differences from 2.2.0.

    Read 2.2.1 in full on What’s New →Tag and signed APK on GitHub

    Knit is free and ad-free. Donations are what pay for the next one of these: Ko-fi or Liberapay.

  7. 2.2.0#

    The first release published on F-Droid, and the first built reproducibly: F-Droid rebuilds Knit from source, byte-compares its result against ours, and ships ours.

    You do not have to take our word for what is inside a Knit build. F-Droid rebuilds it from source, byte-compares the result against the APK on our releases page, and ships ours only if the two match.

    It also means there is only one signed build. The copy on F-Droid, the one you download directly, and the one a friend hands you over the mesh are all the same file, so a phone that got Knit without an app store still takes updates normally.

    All 2 changes in 2.2.0

    Added

    • The Support Knit screen offers Liberapay alongside Ko-fi.

    Changed

    • Release builds are reproducible. F-Droid rebuilds this release from source and byte-compares it against the APK on Knit's GitHub Releases page, then distributes ours — so one signed APK serves F-Droid, a direct download, and Knit's own offline "share the app" feature alike, and a phone handed Knit over the mesh can still take updates normally.

    Read 2.2.0 in full on What’s New →Tag and signed APK on GitHub

    Knit is free and ad-free. Donations are what pay for the next one of these: Ko-fi or Liberapay.

Older releases

This page starts at 2.2.0, which is as far back as Knit’s changelog file goes. What’s New has indexed the releases before it, along with the pre-release builds this page leaves out.

Every Knit release on What’s New →Older tags on GitHub

Knit publishes these notes itself, as part of its source, at its changelog, in a format built to be read by machines as well as people. What’s New indexes it there, beside every other changelog it tracks. Subscribe to new releases with the Atom feed.

← Back to Knit

Stay connected, wherever you are

Knit is on Android. Grab it on Google Play or F-Droid, and support development on Ko-fi or Liberapay.

Requires Android 10+ — no Google Play services, no SIM, no account.