Skip to content

Installation

The apps for Mac, iPhone, iPad, Android, Android TV, Windows and Linux, and the terminal app for macOS, Linux and Windows, from the releases on GitHub or from source.

Every release on the releases page has the apps and the terminal app. Each file has a .sha256 beside it. With both in one folder, shasum -a 256 -c <file>.sha256 checks the file on macOS, and sha256sum -c <file>.sha256 on Linux.

The apps are not in the App Store, on Google Play or in the Microsoft Store. Download them from the latest release and allow them once, as below. The apps page shows what each one looks like.

anistream-<version>-macos.dmg, for macOS 26 or later on a Mac with Apple silicon.

Open the disk image and drag Anistream to Applications. The app is signed without an Apple developer account and is not notarized, so macOS stops it the first time it opens:

  1. Open Anistream, and choose Done when macOS says it cannot verify the app.
  2. Open System Settings › Privacy & Security. Under Security, choose Open Anyway beside the line about Anistream, 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/Anistream.app does the same as Open Anyway.

After an update, macOS may ask whether Anistream can use what it keeps in your keychain. Choose Always Allow.

The Mac app and the terminal app share one history and one config, in ~/Library/Application Support/anistream.

anistream-<version>-ios-unsigned.ipa, for iOS or iPadOS 26 or later.

The .ipa is unsigned. AltStore or SideStore signs it with your own Apple ID as it installs it:

  1. Set up AltStore or SideStore on the iPhone or iPad, as its own guide describes.

  2. Add anistream’s source to it. In SideStore or AltStore, go to Sources, choose + and paste this address:

    https://github.com/bitknox/anistream/releases/latest/download/sidestore.json
  3. Install anistream from the source. You can also download the .ipa on the device and open it in AltStore or SideStore, but then it does not offer you new releases.

  4. If iOS asks for Developer Mode, turn it on under Settings › Privacy & Security › Developer Mode and restart when it asks. Apps signed with a personal Apple ID need it.

With a free Apple ID the 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. A free Apple ID also allows only three apps signed this way at a time, AltStore or SideStore among them.

anistream-<version>-android-arm64.apk, for Android 15 or later on a 64-bit ARM phone or tablet.

  1. Download the APK on the device and open it.
  2. Android asks once whether the app you opened it from, your browser or your file manager, may install apps. Allow it, go back, and choose Install.

The APK is signed with anistream’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. To take the permission back afterwards, go to Settings › Apps › Special app access › Install unknown apps.

anistream-<version>-android-tv.apk, for Android TV or Google TV 11 or later on 32-bit or 64-bit ARM. It is a separate app from the phone one, made for the remote.

With the Downloader app, on the TV itself:

  1. Install Downloader from Google Play on the TV.
  2. In Downloader, enter github.com/bitknox/anistream/releases/latest. The release page opens. Under Assets, choose the file that ends in -android-tv.apk.
  3. Android asks whether Downloader may install apps. Allow it, go back, and choose Install. On most TVs the setting is under Settings › Apps › Security & restrictions › Unknown sources.

With adb, from a computer on the same network:

  1. On the TV, open Settings › Device Preferences › About (on Google TV, Settings › System › About) and select Build seven times to turn on the developer options.

  2. In the developer options, turn on USB debugging (some TVs call it network debugging), and note the TV’s address from its network settings.

  3. On the computer, run adb connect <the TV's address> and accept the prompt on the TV, then:

    adb install anistream-<version>-android-tv.apk

    If the TV offers Wireless debugging with a pairing code instead, run adb pair <address>:<port> with the address and code it shows, and then adb connect.

The APK is signed with anistream’s release key, so a newer one installs over the one before and keeps your data. After the first install the TV app updates itself from Settings › About, as Updating describes.

To use Play on TV from the Mac, iPhone, iPad, Android, Windows or Linux app, pair it with the TV once. On the TV, go to Settings › Remotes › Pair a phone and scan the QR code with a phone, or choose the TV in the app’s Play on TV list and enter the code the TV shows. Both need to be on the same network. On Windows and Linux, paired TVs are listed under Settings › Integrations.

Torrents on the TV are off until you turn them on under Settings › Sources. The TV shows a QR code that opens a page on your phone, where you type the torrent index and, if you use one, the proxy; you can also type them with the TV’s keyboard. The proxy is checked before it is saved, as in Torrents and the VPN guard.

anistream-<version>-windows-x64-setup.exe for most PCs, or anistream-<version>-windows-arm64-setup.exe for Windows on Arm. Both need Windows 10 version 2004 or later.

Run the installer. It installs for your account only, so it asks for no administrator password. It adds anistream to the Start menu and to Settings › Apps, where you can uninstall it, and it lets the app open anistream:// links. The installer is not code-signed, so SmartScreen stops it the first time:

  1. When Windows says “Windows protected your PC”, choose More info.
  2. Choose Run anyway.

A new release installs over the one before and keeps your library and settings. Uninstalling keeps them too.

anistream-<version>-linux-x86_64.AppImage, or anistream-<version>-linux-aarch64.AppImage on 64-bit ARM. It carries GTK 4, libadwaita 1.7 and the player, so there is nothing to install first. It needs glibc 2.41 or newer, which means one of these or later:

  • Ubuntu 25.04, including Ubuntu 26.04 LTS
  • Fedora 42
  • Debian 13

Ubuntu 24.04 and other systems with an older glibc are not supported. There the AppImage says so and stops, and the terminal app is the way to run anistream.

Make the file executable once, then open it:

chmod +x anistream-<version>-linux-x86_64.AppImage
./anistream-<version>-linux-x86_64.AppImage

The first time it runs, it registers itself for anistream:// links. If you move the file, the next run registers the new place. After that it updates itself, as Updating describes. An AppImage needs FUSE, which most desktops have. Without it, run the file with --appimage-extract-and-run.

The terminal app comes several ways in each release:

  • An installer: .pkg on macOS, setup.exe on Windows, .deb on Debian and Ubuntu. Each one puts anistream on your PATH and adds a launcher, so you can type it or click it. The launcher opens your terminal, since that is where anistream lives.
  • An AppImage for every other Linux distro. chmod +x it and run it from a terminal. Nothing is installed. Like the .deb and the .tar.gz, it needs glibc 2.28 or newer: Debian 10, Ubuntu 20.04, RHEL 8 or later.
  • An archive, .tar.gz or .zip, for putting the binary on PATH yourself. It holds the binary, the README, the licence and a third-party folder with the notices for what anistream bundles.

mpv and ffmpeg are not bundled with the terminal app. It drives mpv for playback and shells out to ffmpeg when muxing subtitles into a completed download. The .deb declares both as dependencies. On macOS and Windows, install them yourself, as in Prerequisites below. The apps have mpv built in and need neither.

anistream’s player interface, with the skip button, Up next, menus and thumbnails, needs mpv 0.36 or newer. Older versions play with mpv’s own controls; Ubuntu 24.04 ships 0.37 and Debian 12 ships 0.35. anistream --doctor says which version you have.

There is no Homebrew formula and no cargo install yet. To build from source instead, install the prerequisites and then build.

The apps check GitHub for a new release once a day and say when one is out. Settings shows it too, with Check now. Except on Windows, nothing is downloaded until you choose to update, and an update keeps your history and settings. Turn the daily check off with Check for updates in Settings.

On the Mac, choose Update in the notice, or Update to the new version under Settings › Integrations › Updates. anistream downloads the new release, checks its signature, replaces itself and opens again. macOS does not ask for Open Anyway again, since a browser did not download it. It may still ask whether Anistream can use what it keeps in your keychain.

On iPhone and iPad, updates come through SideStore or AltStore, from the source you added. Choose Update in SideStore in the notice, under Settings › About on iPhone or under Settings › Advanced on iPad. It opens SideStore with anistream’s source, where you update the app. Without SideStore or AltStore it opens the release page.

On Android, choose Update in the notice, or Update to the new version under Settings › About. The first time, Android asks you to turn on Allow from this source for anistream. anistream downloads the APK, checks it against the published SHA-256 and the key the installed app is signed with, and installs it over the version before. Android closes the app as the update goes in, and a notification says when it is done.

On Android TV, the TV says when an update is out. Go to Settings › About, choose Update to the new version, then Update. The first time, Android asks you to allow anistream to install apps, and the TV shows where that switch is. anistream downloads the APK, checks its size and SHA-256 and that it is signed with the same key, then hands it to Android’s installer, which asks you to confirm.

On Windows, the app downloads a new release once it finds one and checks it against the published size and SHA-256. Then it says the version is ready to install. Choose Restart to update, in the notice or under Settings › About, and the installer runs without asking anything, then opens the new version. Your library and settings stay.

On Linux, Settings › Integrations › Updates says when a new release is out. Choose Download update, and the app checks the new AppImage against the published size and SHA-256. Restart to update then puts it in place of the one you run and opens it. If the AppImage’s folder cannot be written to, the new version is saved to Downloads instead, and the app says so.

The terminal app updates itself:

anistream --update

That downloads the latest release for your platform, checks it against the published SHA-256, and replaces the binary in place. Restart anistream to use it. The terminal app also checks GitHub for a new release once a day (one cached HTTPS request, nothing downloaded) and mentions it in a toast. Turn the check off with:

[updates]
check = false
brew install mpv ffmpeg cmake
rustup toolchain install 1.99.1 # pinned by rust-toolchain.toml
git clone https://github.com/bitknox/anistream
cd anistream
cargo run --release

The first build is slow, since BoringSSL, librqbit and a WASM runtime are in the tree, and incremental after that. The binary ends up at target/release/anistream if you want it on your PATH.

Config ~/Library/Application Support/anistream/config.toml
History database ~/Library/Application Support/anistream/anistream.db
Plugins ~/Library/Application Support/anistream/plugins/*.wasm
Joined plugin stores ~/Library/Application Support/anistream/plugin-stores.json
Player files and shaders ~/Library/Caches/anistream/mpv/ and ~/Library/Caches/anistream/shaders/
Logs ~/Library/Caches/anistream/logs/

Plugins always sit beside config.toml, whatever that path is. anistream --plugins prints the directory in use. Logs roll daily, at info unless ANISTREAM_LOG says otherwise.

The player’s controls, fonts and scripts and the upscaling shaders ship inside the binary, and anistream writes them into the cache directory when it needs them. anistream --doctor prints where the player files are. The tokens for joined plugin stores are kept wherever tracker tokens are, which trackers.token_storage decides.

No config file is required. One is only written when you change something in the Settings screen, and those writes are format-preserving, so comments you add by hand survive.