Repository navigation
v0.2.1
Pre-releaseLibrary no longer waits behind background syncs
The Library screen could stay loading for minutes while the app's AniList sync waited its turn in the background. It now loads right away.
Train
- Version: 0.2.1 (patch), committed as "Release 0.2.1".
- Branch: train/0.2.1 from main, with fix/library-lock merged and nothing else.
- Conflicts: none.
- Checked locally under the HOME guard:
cargo check --workspace --all-targets --locked,cargo test -p kaeri-track(includes the new library_waits test),cargo test -p kaeri-engine --lib, clippy with-D warningsfor kaeri-track and kaeri-engine,cargo fmt --all -- --check. The branch's own run also passedtools/check-boundaries.sh. - Built locally: the Mac Release app (signing off,
adhoc-sign.shverifies) and the Android app-flavour R8 release APKs for the phone and the TV (arm64, armv7). - Not checked: the fix was not reproduced on a real library database, no device runs were made, and the rest of the workspace's tests, the Windows and Linux builds and iOS were not run.
🤖 Generated with Claude Code
Terminal
The installers are the .pkg on macOS, setup.exe on Windows and the .deb on Debian and
Ubuntu. Each one puts kaeri on your PATH and adds a launcher, so you can type it or click
it. The launcher opens your terminal, because Kaeri runs in one.
On any other Linux distribution, use the AppImage: chmod +x it and run it from a terminal.
Nothing is installed. Every Linux build needs glibc 2.28 or newer.
The .tar.gz and .zip archives hold only the binary, for putting on your PATH yourself.
Once it is installed, kaeri --update takes each new release.
These builds are not code-signed. macOS stops the .pkg the first time it opens: choose Done,
then Open Anyway in System Settings › Privacy & Security. Windows SmartScreen warns about the
installer: choose More info, then Run anyway.
mpv and ffmpeg are not bundled. Kaeri drives mpv for playback and runs ffmpeg to mux
subtitles into a finished download, so install both first; see the
requirements.
Check a download against its .sha256 before running it.
Every package carries the licences of what it is built from in a third-party folder, the Rust
crates' among them, and kaeri-0.2.1-rust-licences.txt has those for all four builds.
Kaeri doesn't host any shows. You add your own sources. See https://kaeri.app/legal/.
Apps
Kaeri for Android phones and TVs, the Mac, iPhone, iPad, Windows and Linux, on the same engine as the terminal app. Like
it, the apps host no content and supply no sources. You add the sources you are entitled to use.
Android
kaeri-0.2.1-android-arm64.apk, for Android 15 or later on a 64-bit ARM phone or tablet.
Open the APK on the device. Android asks once whether the app you opened it from, your browser or
file manager, may install apps: allow it, then choose Install. The APK is signed with Kaeri's
release key, so each release installs over the one before and keeps your data. It is not on
Google Play, and Play Protect may offer to scan it. Once it is installed, the app updates itself
when you choose Update in its notice or in Settings › About. The first time, Android asks you to
allow it for Kaeri too.
Android TV
kaeri-0.2.1-android-tv-arm64.apk or kaeri-0.2.1-android-tv-armv7.apk, for
Android TV and Google TV on Android 11 or later. Most TV boxes, including the Chromecast with
Google TV, run a 32-bit system and take the armv7 file; the Nvidia Shield and newer boxes take the
arm64 file. If the install says the app is not compatible, try the other file.
Install it with a sideloading app on the TV, or with adb install and the file's name
from a computer on the same network. It is signed with the same release key as the phone app and
installs beside it. It is not on Google Play. Pair it with your phone from the TV's first screen.
Mac
kaeri-0.2.1-macos.dmg, for macOS 26 or later on a Mac with Apple silicon.
Open the disk image and drag Kaeri to Applications. The app isn't signed with an Apple
developer account, and it is not notarized, so macOS stops it the first time it opens:
- Open Kaeri, and choose Done when macOS says it cannot verify it.
- In System Settings › Privacy & Security, under Security, choose Open Anyway beside the message
about Kaeri, and confirm with your password or Touch ID.
That is once for each version you download. Right-click › Open no longer skips the check since
macOS 15. From a terminal, xattr -dr com.apple.quarantine /Applications/Kaeri.app does the
same. Once it is installed, the app updates itself when you choose Update in its notice or in
Settings › Integrations, and macOS does not ask again.
After an update macOS may ask again whether Kaeri can use what it keeps in your keychain.
Choose Always Allow.
iPhone and iPad
kaeri-0.2.1-ios-unsigned.ipa, for iOS or iPadOS 26 or later.
The .ipa is not signed for any device. Install it with AltStore or
SideStore, which sign it with your own Apple ID as they install it. Add
Kaeri's source to either, and they offer each new release:
https://github.com/bitknox/kaeri/releases/latest/download/sidestore.json. They
use two of your Apple ID's App IDs, one for the app and one for its widgets, and an App Group the
two share. With a free Apple ID that signature lasts 7 days: AltStore or SideStore has to refresh
the app within that time, or it will not open until they do. Your data stays either way.
Windows
kaeri-0.2.1-windows-x64-setup.exe, or kaeri-0.2.1-windows-arm64-setup.exe for
Windows on Arm, for Windows 10 version 2004 or later.
Run the installer. It installs for your account only, with no administrator prompt, adds Kaeri
to the Start menu and to Settings › Apps, where you can uninstall it, and lets the app open
kaeri:// links. The installer is not code-signed, so SmartScreen stops it the first time:
choose More info, then Run anyway. A new release installs over the one before and keeps your
library and settings.
Linux
kaeri-0.2.1-linux-x86_64.AppImage, or kaeri-0.2.1-linux-aarch64.AppImage on
64-bit ARM, for systems with glibc 2.41 or newer: Debian 13, Ubuntu 25.04, Fedora 42 and later. It
carries GTK 4, libadwaita and the player.
Make it executable with chmod +x kaeri-0.2.1-linux-x86_64.AppImage and open it. The first
run registers it for kaeri:// links. The app updates itself: it downloads each new version,
checks it, and puts it in place of the AppImage when you choose Restart to Update in its notice or
in Settings. AppImageUpdate, AppImageLauncher and Gear Lever can update it in place too, from the
release's .zsync file. Without FUSE, run it with --appimage-extract-and-run.
Checking a download
Each file has a .sha256 beside it. With both in one folder, run
shasum -a 256 -c kaeri-0.2.1-macos.dmg.sha256 (or sha256sum -c on Linux).
Third-party
The apps play video with libmpv and FFmpeg, which kaeri builds as LGPL, without their GPL
parts, and ships as dynamic libraries of their own:
- Android phone and TV, built from source with NDK 30.0.16248370: abis arm64-v8a armeabi-v7a api 30 page-size 16384 vulkan 0, mbedtls 3.6.7, dav1d 1.5.3, libxml2 2.15.4, ffmpeg n9.0.2 (LGPL version 3 or later), freetype 2.15.0, fontconfig 2.18.3, fribidi 1.0.17, harfbuzz 14.6.0, unibreak 8.0, libass 0.17.5, mpv v0.41.0, libplacebo v7.360.1 (cee9b07).
- Mac, iPhone and iPad: mpv v0.41.0 and libass 0.17.5, built from source with
kaeri's patches, over MPVKit 1.1.0-n9.0.2's LGPL builds of FFmpeg n9.0.2 and the
libraries beneath it. - Windows: mpv's own LGPL build of libmpv, v0.41.0-dev-g703e59b0e-40117195812.
- Linux: mpv v0.41.0 and FFmpeg n9.0.2 (LGPL version 2.1 or later), built from source, with
Debian 13's GTK 4, libadwaita and the libraries beneath them, whose sources are Debian's.
kaeri-0.2.1-apps-sources.tar is the source they were built from, every archive by its
SHA-256, with the scripts that built them and kaeri's patches. kaeri-0.2.1-apps-third-party.zip has every licence
and notice: the libraries', the engine's Rust crates', and the engine's upscaling shaders', one of
which, the AniSD model, is CC BY-NC 4.0, for non-commercial use only.
What's Changed
- Name the latest stable release on the download page by @bitknox in #6
- Library no longer waits behind background syncs by @bitknox in #7
Full Changelog: v0.2.0...v0.2.1