Discover, organize, and play your media in one native application.
Cove brings a personal library, rich discovery, extensible sources, and hardware-accelerated playback to Linux, Windows, macOS, and Android phones, tablets, and televisions.
Installation · Build from source · Architecture · Documentation · User guides · Contributing
Important
Cove is a media player and organizer, not a content host or provider. A fresh installation contains no third-party stream sources. You are responsible for the addons and plugins you configure and for following the laws that apply in your jurisdiction.
Home · Title details · Discovery
- Personalized recommendations informed by watch history, ratings, and taste.
- Search, trending and upcoming titles, genres, curated collections, and people.
- A profile-scoped library with favorites, progress, continue watching, and spoiler protection for unwatched episodes.
- Multiple local profiles, with optional account sync and Trakt or Simkl tracking.
- Native, hardware-accelerated mpv playback on desktop and Android.
- Direct HTTP and torrent playback with subtitles and live buffering progress.
- Automatic stream selection by quality, size, reliability, or measured connection speed, plus full manual sorting and filtering.
- Configurable intro, recap, and credits skipping, with progress saved as you watch.
- Stremio-compatible addons for catalogs, streams, subtitles, and metadata.
- Opt-in Nuvio-compatible scrapers executed behind platform-specific isolation.
- Signed desktop plugins with per-profile permissions and isolated workers.
- Legal watch-option discovery alongside configured playback sources.
- Local-first profiles and settings: signing in is optional.
| Platform | Status | Distribution | Update path |
|---|---|---|---|
| Linux | Available | AUR, Flatpak, tarball | cove-bin through pacman; Flatpak bundles and tarballs are replaced manually |
| Windows | Available | Installer, portable ZIP | Verified in-app updates for both forms beginning with 1.0.0 |
| Android phone/tablet | Available | APK, Android 9+ | Verified APK through Android's package installer |
| Android TV | Preview | Same APK, Android 9+ | Verified APK through Android's package installer |
| macOS (Apple silicon) | Available | Ad-hoc signed DMG, not notarized | Manual release replacement |
One APK serves both phones and televisions: leanback is declared optional, and
the app selects the touch or ten-foot shell at runtime from FEATURE_LEANBACK.
All downloadable packages are published on the GitHub Releases page.
Install the AUR package with your preferred helper:
yay -S cove-binUpdates remain managed by pacman and your AUR workflow.
Download cove-linux-amd64.flatpak from the latest release, then run:
flatpak install --user cove-linux-amd64.flatpak
flatpak run io.github.coveninja.CoveStandalone Flatpak bundles are replaced manually when a new version is released.
Download cove-linux-amd64.tar.gz from the latest release. It carries its own
Java runtime and expects libmpv from your distribution. An installed yt-dlp
is preferred for YouTube extras; when none is available, Cove can download and
maintain its own copy unless that setting is disabled. The bundled bin/cove
launcher resolves the application through an absolute
/usr/lib/cove path, so /usr is the only prefix it works under:
sudo tar -xzf cove-linux-amd64.tar.gz -C /usr
coveTarball installations are replaced manually when a new version is released.
Download one of the following from the latest release:
cove-windows-amd64-setup.exefor a conventional installation.cove-windows-amd64-portable.zipfor a self-contained portable copy.
Both distributions support signed, verified in-app updates beginning with
1.0.0.
Important
Upgrading to 1.0.0 from a pre-1.0.0 Windows build is a manual step.
1.0.0 replaced the previous Qt and Go application with a single native one,
so the two installations share no layout. Download the installer or portable
ZIP above and install it yourself; those older builds will not offer 1.0.0
in-app, by design. Your library, profiles, and settings are preserved.
cove-macos-arm64.dmg is an Apple-silicon build that bundles libmpv and its
native runtime dependencies, so you need neither Homebrew nor a separate API key.
Intel Macs are not supported.
The DMG is ad-hoc signed rather than notarized, because Cove has no Apple Developer ID. macOS attaches its quarantine flag to whatever a browser downloads, and that flag is what triggers Gatekeeper — so fetching the DMG from a terminal avoids the whole thing:
curl -LO https://github.com/coveninja/cove/releases/latest/download/cove-macos-arm64.dmg
open cove-macos-arm64.dmgDrag Cove into Applications and it launches normally, with no prompt to approve.
Note
Downloading the DMG in a browser instead is fine, but Gatekeeper will then refuse the first launch with "Apple could not verify 'Cove' is free of malware." Clear the flag and it starts:
xattr -dr com.apple.quarantine /Applications/Cove.appOr approve it once under System Settings → Privacy & Security, scrolling to the message naming Cove and choosing Open Anyway. On macOS 15 and newer that is the only click-through route left — right-click → Open no longer bypasses the check.
Ad-hoc signing is not a trust credential; it is what lets the binaries execute at all on Apple silicon, which refuses to run a wholly unsigned one. macOS gets no in-app updates either way, so replace the DMG by hand.
Download and install cove-android.apk on Android 9 (API 28) or newer. The same
APK serves phones, tablets, and televisions, and picks the touch or ten-foot
shell to match the device it lands on. Android may ask you to allow installs
from Cove when applying the first in-app update. Cove verifies the package name,
version, release manifest, payload checksum, and installed signing certificate
before handing the APK to the system installer.
Upgrading from a pre-1.0.0 APK works in place and keeps your data, because the
release is signed with the same key and carries a higher version code.
- JDK 21
- libmpv (
mpvon Arch/CachyOS and Homebrew, orlibmpv-devon Debian/Ubuntu) - Android SDK platform and build-tools 37 for Android builds
- A TMDB API key for live catalog data
Clone the repository, create your local configuration, and launch the desktop app against the real backend:
git clone https://github.com/coveninja/cove.git
cd cove
cp .env.example .env
# Set TMDB_API_KEY in .env
cd app && ./gradlew :desktop:run --args="--backend-mode kotlin"Note
--backend-mode kotlin is what selects the real in-process backend. With no
--backend-mode the desktop app falls back to a canned fixture library, so
make run on its own will not show live data no matter how .env is set. A
fixtures run labels itself with a Fixture data badge in the top corner.
Common development commands:
| Command | Purpose |
|---|---|
make run |
Build and launch the desktop application with fixture data |
make mobile |
Build the Android debug APK (phone, tablet, and TV) |
make hot |
Start the Compose hot-reload loop with fixture data |
make run-tv |
Launch the television shell in a desktop window |
make test |
Run the Kotlin test suites |
make test-build |
Build the desktop image and Android debug APK |
make test-all |
Run the broadest local approximation of CI |
On macOS, Homebrew provides both required local dependencies and Gradle can create a native application bundle for the current Apple-silicon Mac:
brew install mpv
brew install --cask temurin@21
export JAVA_HOME="$(/usr/libexec/java_home -v 21)"
cd app
./gradlew :desktop:createDistributable --no-daemon
open desktop/build/compose/binaries/main/app/Cove.appDesktop configuration is loaded from environment variables, the nearest .env,
and then bundled release properties. Android receives the same deployment values
through BuildConfig at build time. See .env.example for the
supported keys. COVE_DATA_DIR overrides the desktop data directory; Android
always uses app-private storage.
Cove is a Kotlin Multiplatform application with two native hosts over one shared application graph:
app/shareddefines domain models, repository contracts, and the app graph.app/backendowns local persistence, integrations, addons, discovery, sync, media boundaries, and host-specific runtime composition.app/uicontains the shared adaptive Compose presentation.app/desktopowns the desktop window, native mpv surfaces, lifecycle, and packaging.app/mobileowns Android lifecycle, system integration, native playback, and APK packaging.app/benchmarkgenerates Android startup and baseline profiles; it is not an application host.
Ordinary UI operations stay in-process. An embedded, authenticated Ktor boundary is retained only where URL semantics are required—for example media proxying, torrent delivery, diagnostics, and optional LAN clients. SQLDelight provides the shared database contract with platform-native drivers, while libmpv provides the playback boundary on both shipping hosts.
For the detailed module and security model, read ARCHITECTURE.md.
- User guide hub — installation, everyday use, settings, integrations, and troubleshooting
- Application and presentation guide
- Architecture
- HTTP compatibility API
- Desktop plugin development
- Application updates and signing
- Testing and release checks
- Contributing guide
The website serves version-matched user guides from docs/site/ at the latest
stable Cove tag. Contributor references above follow the active master tree
and can describe behavior newer than the current release.
Translations recovered from Cove's former frontend remain under
app/i18n/messages/; they are not yet connected to the current Compose UI.
Contributions are welcome. Start with CONTRIBUTING.md for the development workflow, architecture boundaries, and validation expectations.
Cove is free software licensed under the GNU Affero General Public License v3.0.