Unofficial Netflix desktop client for Linux with DRM support, Discord Rich Presence, and playback features.
Netflix doesn't have a proper Linux desktop app. This fixes that.
Features:
- Full DRM support via Widevine
- Discord Rich Presence
- Multi-profile support (different accounts, separate sessions)
- Watch history with CSV/JSON/TXT export
- Auto-skip intros, recaps, credits
- Selector health diagnostics + export
- Screenshot capture (F12)
- Picture-in-Picture mode
- Speed controls (0.25x to 4x)
- Session restore on startup
- Auto-pause on focus loss (workspace-aware on Hyprland)
- Health reminders
- Stats overlay with network/quality metrics
- Customizable keyboard shortcuts
- Advanced watch queue (hover-card add button, search, drag reorder, dedupe, pin, play-next)
- Update channels (stable/beta) + rollback helper
- Crash-safe mode
- Theme packs + compact mode
- Wayland and tiling WM support (tested on Hyprland, i3, bspwm)
Privacy:
- No tracking by default
- Crash reporting is opt-in only (uses Sentry)
- Everything runs locally
- See PRIVACY.md
- Linux (any distro)
- Node.js 18+ and npm 9+
- System packages:
- Arch/Manjaro:
gtk3 nss alsa-lib - Debian/Ubuntu:
libgtk-3-0 libnss3 libasound2 - Fedora:
gtk3 nss alsa-lib
- Arch/Manjaro:
Download from Releases:
AppImage (universal):
chmod +x Netflix-*.AppImage
./Netflix-*.AppImageArch/Manjaro:
sudo pacman -U netflix-linux-*.pacmanDebian/Ubuntu:
sudo dpkg -i netflix-linux-*.debgit clone https://github.com/u61d/netflix-linux
cd netflix-linux
npm install
npm startBuild packages:
npm run build # all formats
npm run build:appimage # AppImage only
npm run build:pacman # Arch package
npm run build:deb # Debian package| Keys | Action |
|---|---|
Ctrl+, |
Settings |
Ctrl+Shift+S |
Show stats |
Ctrl+Shift+H |
Watch history |
Ctrl+Shift+Q |
Watch queue |
Ctrl+Shift+A |
Add current title to queue |
Ctrl+K |
Customize shortcuts |
Ctrl+P |
Switch profiles |
F12 |
Screenshot |
F9 |
Picture-in-Picture |
F6/F7/F8 |
Speed controls |
Ctrl+Shift+T |
Always on top |
Ctrl+Q |
Quit |
All shortcuts are customizable.
Shows what you're watching on Discord. Requires Discord desktop client.
To use your own Discord app:
- Create app at discord.com/developers
- Copy Client ID
- Settings → Discord → Paste Client ID
Or set via environment variable:
export DISCORD_CLIENT_ID=your_client_idUse profiles for different Netflix accounts or separate watch histories. Each profile has isolated cookies and sessions. No restart needed to switch.
Press F12 to capture. Saves to ~/Pictures/Netflix Screenshots/ by default.
Sound effect requires one of:
paplay(PulseAudio)pw-play(PipeWire)canberra-gtk-play
# Arch
sudo pacman -S libpulse pipewire
# Debian/Ubuntu
sudo apt install pulseaudio-utils pipewire-binSettings: ~/.config/netflix-linux/settings.json
Logs: ~/.config/netflix-linux/logs/
Screenshots: ~/Pictures/Netflix Screenshots/ (configurable)
Optional (see .env.example):
# Sentry error tracking (requires opt-in in settings)
SENTRY_DSN=your_sentry_dsn
# Custom Discord app ID
DISCORD_CLIENT_ID=your_discord_app_id# Run with DevTools
npm run dev
# Tests
npm test
npm run test:watch
npm run test:coverage
npm run test:e2e
# Lint and format
npm run lint
npm run formatsrc/
├── main/ # Backend (Electron)
│ ├── index.js # Entry point
│ ├── AppContext.js # Dependency injection
│ ├── managers/ # Window, RPC, Keybind, Menu, Tray
│ ├── services/ # AutoSkipper, Playback, History
│ ├── handlers/ # IPC handlers
│ └── utils/ # Logger, validation, notifications
├── renderer/ # Frontend (HTML/CSS/JS)
│ ├── windows/ # Settings, history, profiles, queue
│ └── shared/ # Shared styles
└── config/ # Constants, defaults, selectors
tests/
├── unit/ # Jest unit tests
└── e2e/ # Playwright E2E tests
See CONTRIBUTING.md for details.
Some window management features need extra flags. The app auto-detects Wayland and adjusts.
Enable "Borderless window" in settings for better tiling behavior.
Install one of: paplay, pw-play, or canberra-gtk-play
Discord desktop client must be running. Browser version doesn't support RPC.
The app uses Castlabs Electron with Widevine DRM. Check logs in ~/.config/netflix-linux/logs/ if playback fails.
PRs welcome. Please:
- Follow existing code style
- Add tests for new features
- Run
npm run lintbefore committing - Update docs if needed
Note: CI workflows use secrets (Sentry) that won't be available in forks. Maintainers handle releases.
See CONTRIBUTING.md.
- Better queue reliability across Netflix UI variants
- Better accessibility in settings/history windows
- More end-to-end coverage for profile/queue flows
- Packaging improvements (AUR/Flatpak support)
- Star the repo
- Open issues when something breaks
- Share release links in Linux communities
- Contribute selector updates when Netflix changes UI
MIT - see LICENSE
This is an unofficial client. Netflix is a trademark of Netflix, Inc. This project is not affiliated with or endorsed by Netflix, Inc.
- Castlabs for Electron with Widevine
- Netflix for making content worth watching
- Everyone who filed issues and contributed


