A media streaming app for Linux, Windows, Android & Android TV. Discover, track, and stream movies and TV shows - powered by TMDB metadata, Stremio & Nuvio compatible addons & plugins, and a built-in mpv player.
Disclaimer: Cove is a media player and organizer, not a content host. It does not provide, index, or distribute any media itself — a fresh install has zero sources configured. Any streams come from third-party Stremio-compatible addons or community plugins that you choose to add. You're responsible for what you connect to and for complying with the laws in your jurisdiction.
- Features
- Localization
- Install
- Build from source
- Development
- Testing and CI
- Configuration
- Documentation
- Community & Support
- Star History
- Roadmap / Known Limitations
- Stream anything — connects to Stremio-compatible addon sources and streams directly in the app
- Extend with plugins — add community JS scraper plugins for additional stream sources, sandboxed and opt-in per scraper
- Built-in player — hardware-accelerated mpv playback with subtitle support, live buffering/download progress, and progress saving
- Smart stream picker — auto-selects the best available stream using a configurable strategy (quality, size, reliability, or a connection-speed match via a built-in speed test), or sort/filter candidates yourself
- Skip intro & recap — auto-skip buttons for intro, recap, and credits segments during playback, independently toggleable
- Where to watch — see which legal streaming/rental services carry a title alongside the stream picker
- Discover — personalized recommendations based on your watch history, ratings, and taste profile
- Library — track what you've watched, mark favorites, and pick up where you left off with continue watching
- Explore — browse trending, upcoming releases, genres, and curated categories
- Insights — view your watch stats and genre/actor taste breakdown
- Search — find any movie or TV show by title
- Spoiler-free browsing — optionally blurs thumbnails and titles for unwatched episodes
- Multiple profiles — profile switching, works fully offline with no sign-in required
- Accounts & sync — optional sign-in syncs your library and preferences across devices
- Trakt.tv integration — optional Trakt sign-in scrobbles what you watch in real time and two-way syncs your watch history and watchlist with Trakt automatically
- Android & Android TV App — native Kotlin shell hosting the responsive Svelte UI, with the same embedded Go backend and mpv playback; runs standalone, or connects to your desktop Cove over LAN in remote mode
Install via the AUR:
yay -S cove-binOr download PKGBUILD from the latest release manually and run makepkg -si in the same directory. To update, repeat with the new release's PKGBUILD.
Download cove-linux-amd64.flatpak from the latest release, then:
flatpak install --user cove-linux-amd64.flatpak
flatpak run io.github.coveninja.CoveDownload cove-windows-amd64-setup.exe from the latest release and run the installer. Or grab cove-windows-amd64.zip for a portable install.
⚠️ Experimental: Mobile & TV support is covered by JVM and emulator launch tests, but remains new. Expect rough edges — please file an issue if you hit one.
Download cove-android.apk from the latest release and install it (sideloading — your browser or file manager will ask you to allow installs from unknown sources). The app is fully standalone; optionally point it at a desktop Cove on your LAN from Settings → Server.
You only need to sideload once — the app checks GitHub for new releases and updates itself in-app (downloads are SHA-256 verified; the very first self-update asks for confirmation, after that they're silent).
The same APK runs on Android TV — Cove detects the TV environment automatically and loads a D-pad-navigable 10-foot UI.
Not currently supported. There's no native build or packaging for macOS yet — see Roadmap.
Prerequisites: Go 1.26+, Node.js 20.19+ or 22.12+, Qt 6 with QtWebEngine and QtWebChannel, libmpv, and CMake
git clone https://github.com/coveninja/cove
cd cove
echo "TMDB_API_KEY=your_key_here" > .env
make run # builds everything and launches the appNeed a TMDB key? Create a free account at themoviedb.org, then generate one under Settings → API in your account.
make hot # hot-reload: Vite HMR in-window, rebuilds Go + Qt on changes
make hot-debug # same + QtWebEngine remote devtools on :9222
make web-dev # browser-only Vite dev server (player shows "unavailable")make go # build the Go backend binary
make web # build the Svelte frontend
make qt # build the Qt shell
make dev # full build + regenerate TypeScript types from Go structs
make android # build the Android APK (gomobile AAR + Gradle; see android/README.md)The standard target exercises both the public/no-op build and the checked-in
supabase auth/sync implementation. Maintainers with both private submodules
can separately run the exact release combination with supabase,discover.
make test # complete Go + web suite
make test-all # add workflow/security checks plus Qt and Android buildsmake test includes API/sync unit tests with coverage and browser flows for
startup degradation, login persistence, profile switching, and sync errors.
Install the Playwright browser once before the first run:
cd web
npx playwright install chromiumThe checks requiring private sources or an already-running Android target are kept explicit:
make test-private # maintainers, after make inject-private
make test-android-connected # run instrumentation tests on a device/emulatorPull requests and branch pushes run the full matrix in
ci.yml: formatting/vet, public and tagged Go
tests, the race detector, Linux/Windows builds, web checks, a blocking Qt
build, Android lint/JVM/emulator tests, dependency review, and vulnerability
scanning. Coverage reports are retained as workflow artifacts and published to
Codecov for the badge above; the current baseline is informational rather than
a merge threshold.
A fresh profile ships with no provider addons and no plugin repos enabled — only two hardcoded "official" integrations (streaming-availability lookup, intro/recap timestamps) work out of the box. To get streams, add one or more Stremio-compatible addon URLs and/or community plugin repos in the app's Settings page.
- ARCHITECTURE.md — how the Go backend, Svelte frontend, and Qt shell fit together, the playback data flow, and the open-source/proprietary build-tag split
- docs/API.md — HTTP endpoint reference
- docs/TESTING.md — local test commands, CI matrix, coverage, and release gates
- CONTRIBUTING.md — dev setup and code style for contributors
- android/README.md — Android app: toolchain setup, emulator, build/install loops, release signing
- Bugs & feature requests: GitHub Issues
- Questions & discussion: GitHub Discussions
New contributors are welcome — see CONTRIBUTING.md for dev setup and code style before opening a PR.
Cove checks message-catalog completeness and scans Svelte UI source for visible, untranslated literals. The source percentage is a static guard rather than a substitute for review; brand names, media-format abbreviations, and URL examples are intentionally excluded.
| Language / check | Coverage |
|---|---|
Deutsch (de) |
100.0% (657/657 messages) |
English (en) |
100.0% (657/657 messages) |
Español (es) |
100.0% (657/657 messages) |
Italiano (it) |
100.0% (657/657 messages) |
日本語 (ja) |
100.0% (657/657 messages) |
Português (pt) |
100.0% (657/657 messages) |
Türkçe (tr) |
100.0% (657/657 messages) |
| UI source audit | 100.0% (1246 localized call sites, 0 unlocalized literals) |
This table is generated by cd web && npm run i18n:coverage and verified by CI. npm run check fails when catalogs, placeholders, or visible UI literals are invalid.