LEARN MORE
Updates
Kiri updates itself. It reads one small release feed, downloads the new app in the background, and only installs it after checking that it’s genuine, notarized and really newer. You choose when it goes in, because installing restarts the engine.
Where updates come from
The feed is https://download.runkiri.com/latest.json, a JSON file with the newest version, the URL of its download (Kiri-<version>.tar.gz), its SHA-256 and, optionally, a link to what’s new. The window asks it once each time it opens, quietly. Kiri → Check for Updates… in the menu asks straight away and also tells you when you’re already on the newest version.
KIRI_UPDATE_URL points Kiri at a different feed, if you need to.
What Kiri checks
A download is never installed just because it arrived. Kiri hashes it as it streams to disk, unpacks it into .kiri-update/ next to the app (the same volume, so installing is a rename), and runs every check below. If any fails, the staged folder is deleted and nothing changes.
- SHA-256. The download must match the hash in the feed.
- Signature. A valid signature isn’t enough on its own, since anyone can sign an app. The new app must be signed by the same identity as the Kiri already installed (its designated requirement), checked with
codesign --verify --deep --strict. - Notarization. macOS’s Gatekeeper must accept it (
spctl). - Version. The app’s own version must be the one the feed promised, and newer than yours. A tampered feed can’t send you back to an older, genuinely signed release.
Installing runs the checks again, since the staged app sat on disk since the download. Then the running app moves aside, the new one takes its place, and the old one is deleted only once the new one is in.
Updating from the window
When there’s a new release, a card appears in the bottom-right corner of the window.
- Download fetches the release in the background. The status bar shows its progress (hover it for the time left), with a button to cancel.
- Snooze hides the card until tomorrow or for a week. Skip this version hides it until a newer release. The × hides it until Kiri next opens. Check for Updates… brings back a skipped or snoozed version.
- Restart now installs the update, restarts the engine on the new binary, and opens the new Kiri.
- Later installs it when you quit Kiri. If that quit never happens (say the Mac shuts down first), it goes in the next time Kiri opens.
After a Later, the app is new but the engine can still be running the old build. The window then offers Restart engine to finish the update, whenever it suits you.
Updating from the terminal
kiri update does the whole thing at once: it checks the feed, downloads, runs every check, installs and restarts the engine. kiri update --check only reports.
$ kiri update --check
Kiri 0.1.1 is available (this is 0.1.0)
$ kiri update
Kiri 0.1.1 is available (this is 0.1.0)
updated to Kiri 0.1.1On the newest version it says Kiri 0.1.0 is up to date and does nothing. kiri update replaces Kiri.app, so it only works from the app’s own kiri (the one in ~/.kiri/bin is a link to it).
Running containers
This is why Kiri never installs behind your back: Later waits until you quit, and Restart engine waits until you click it.
Other platforms
Kiri on Windows updates the same way, from its own feed, latest-windows.json, with an MSI that must carry Kiri’s upgrade code and the promised version. The MSI isn’t signed, so on Windows the check rests on HTTPS and the SHA-256. See Kiri on Windows. On Linux you upgrade by installing the newer .deb or .rpm; the running engine keeps going until you restart it. See Kiri on Linux.
© 2026 Kiri · runkiri.com