Native Wayland Stremio client for Linux. Built with Rust + iced. No Electron, no Chromium, no Qt.
- Hero banner with backdrop image, title, rating, and synopsis — rotates every 7 seconds
- Continue Watching rail synced with your Stremio cloud library
- Horizontal catalog rails from all your installed addons (Popular, Netflix, Trakt, etc.)
- Responsive poster grid that adapts to window width
- Streams fetched from all your installed addons in parallel — first results appear immediately as each addon responds
- Debrid streams sorted first with a green "Cached" badge (Real-Debrid, AllDebrid, etc.)
- Addon filter pills — click any provider name to show only its streams
- Text search — type anything to filter by quality, codec, file size, or source (e.g. "1080p", "x265", "RARBG")
- Quality color coding: 4K in gold, 1080p in blue
- File size and source shown on each row
- Full backdrop image + logo overlay
- Episode picker with season tabs, thumbnails, and synopses
- Stream list opens inline beneath the selected episode (accordion style)
- Player picker on every stream — choose mpv or any detected player (VLC, Celluloid, Haruna, etc.)
- mpv compatible profile: hardware decode (configurable — VA-API, NVDEC, CUDA, or auto), in-app transport controls
- mpv your-config profile: respects your
~/.config/mpv/mpv.conf— custom shaders, scripts, keybindings - In-app controls: play/pause, seek ±10s, scrubber, volume
- Full library screen with filter by All / Movies / Series / In Progress
- Continue Watching with progress bars, synced with the Stremio cloud
- Account login — addon collection and library fetched automatically on startup
The official Stremio desktop app embeds a full Chromium engine in a Qt5 shell.
| stremio-native | Official (Flatpak) | Stremio Enhanced (Electron) | |
|---|---|---|---|
| Install size | ~18 MB binary | 4.1 GB | 120 MB AppImage |
| Runtime deps | libssl, libc, libz | Qt5 + Chromium | Chromium + Node.js |
| Wayland (Arch) | Works | Broken | Works via XWayland |
| Startup time | ~0.3 s | 3–6 s | 3–6 s |
The Qt5-WebEngine approach also means the official app is broken on modern Arch Linux — Qt5 WebEngine was deprecated, and the official shell hasn't kept up. This is a ground-up replacement: all rendering via wgpu (Vulkan), all network calls in Rust, video via mpv subprocess.
| Dependency | Ubuntu / Debian | Fedora | Arch |
|---|---|---|---|
| Rust 1.65+ | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh |
same | pacman -S rustup |
| C compiler | sudo apt install build-essential |
sudo dnf install gcc |
included in base-devel |
| OpenSSL headers | sudo apt install libssl-dev pkg-config |
sudo dnf install openssl-devel pkgconf |
already installed |
| Dependency | Purpose | Install |
|---|---|---|
| mpv | Video playback | pacman -S mpv / apt install mpv |
| Vulkan driver | GPU rendering (wgpu) | Mesa (vulkan-intel / vulkan-radeon) or NVIDIA ≥ 470 |
| Node.js | Run stremio-server | pacman -S nodejs / apt install nodejs — only needed for raw torrent streams |
git clone https://github.com/knightinfected/stremio-native
cd stremio-native
cargo build --release
./target/release/stremio-nativeAlways build with --release. Debug builds are too slow for image loading.
stremio-server proxies raw torrent streams as HTTP so mpv can play them.
If you use Real-Debrid, AllDebrid, or any debrid service you don't need this — debrid streams are direct HTTPS URLs that mpv plays without a proxy.
On first launch, if no local server.js is found, the app automatically downloads it (~6.6 MB) from Stremio's CDN into ~/.config/stremio-native/server.js. Node.js must be installed.
To use a specific path:
# ~/.config/stremio-native/config.toml
[server]
path = "/path/to/server.js"Config is created at ~/.config/stremio-native/config.toml on first run.
[player]
# Hardware decode method for the mpv compatible profile.
# Options: "auto" | "vaapi" | "nvdec" | "cuda" | "vdpau" | "none"
# Configurable in Settings without editing this file.
hwdec = "auto"
default_volume = 100.0
[server]
# path = "/opt/stremio/server.js" # override auto-detect
[auth]
# Set automatically after login
auth_key = "..."
user_email = "..."- Two-window playback: video opens in a separate mpv window. Embedding requires Wayland subsurface protocol work that is deferred.
- X11: not tested. XWayland may work but is unsupported.
- Stalled torrents: no timeout — click Back and pick a different stream.
- Slow scrolling on Hyprland: set
input { scroll_factor }in your Hyprland config.
src/
main.rs starts stremio-server, then iced
server.rs stremio-server subprocess (auto-download + lifecycle)
config.rs Config struct, TOML serialization
progress.rs local playback progress (JSON), Continue Watching
api/
client.rs StremioClient: catalog, meta, streams, auth, library
types.rs serde structs for all API responses
player/
mpv.rs MpvPlayer subprocess + JSON IPC socket
external.rs player catalogue (VLC, Celluloid, etc.) + detection
embedded.rs libmpv SW render (unused, kept for future)
ui/
app.rs App state, Message enum, update(), view(), subscription()
theme.rs colour palette, widget style functions
components/
navbar.rs top navigation bar + account popup
poster.rs poster_card(), poster_card_continue()
views/
home.rs hero banner + horizontal catalog rails
detail.rs backdrop, episode picker, stream list
library.rs full watch history grid
browse.rs full-page grid for "See All"
player.rs mpv transport controls overlay
player_picker.rs player selection panel
settings.rs settings + account section
login.rs email / password form
MIT — see LICENSE.
This project is not affiliated with Stremio or Smart Code Ltd.


