A free, open-source, local-first media player + browser. Search and stream movies, TV, anime, live TV / IPTV, YouTube, torrents, and manga — plus your own Jellyfin & Plex — with a private, on-device AI copilot. One native binary; no accounts, no cloud, no subscription.
Get it · See it · Why · Under the hood · Support (Ko-fi, PayPal)
Tip
🔮 New in v0.5.0 — a ~40,000-channel Live TV / IPTV catalog with instant search · Mihon / Tachiyomi manga extensions (Opal runs the Suwayomi server for you) · a refined YouTube with AV1-safe playback. Full release →
Opal replaces the stack you'd otherwise juggle — a player, a site for the show, a server front-end, a torrent client, a feed. Say what you want (a title, a file, a magnet); it searches every source, plays anything, and remembers where you left off. One native binary — Zig + dvui + mpv — fast and quiet.
| 🙅 No accounts | 📡 No telemetry | ☁️ No cloud | 💳 No subscription |
|---|---|---|---|
| nothing to sign up for | nothing phones home | your history is a SQLite file you own | it's your computer |
One command — detects your platform, verifies checksums, doubles as the updater
(… -s -- update) and version pin (OPAL_VERSION=v0.1.0 …):
curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | shOr pick your row — every file is on Releases:
| Platform | Install | |
|---|---|---|
| 🍎 | macOS (Apple silicon) | open the .dmg, drag, done |
| 🍺 | Homebrew | brew install debpalash/tap/opal |
| 📦 | Debian / Ubuntu | sudo apt install ./opal_*_amd64.deb |
| 🎩 | Fedora / openSUSE | sudo dnf install ./opal-*.x86_64.rpm |
| 🏹 | Arch | yay -S opal-bin (or opal to build) |
| 🐧 | Any Linux | chmod +x Opal-*.AppImage and run it |
| 🪟 | Windows (x64) | run the .msi — or unzip the portable .zip |
| 🛠 | From source | git clone → zig build run |
🍎 macOS may call the .dmg "damaged" — it isn't; we're not Apple-notarized
yet. The one-command installer skips the dialog, or run sudo xattr -cr /Applications/Opal.app once. 🪟 Windows is the newest port — SmartScreen will
want a word. 🍎 Intel Macs: build from source (HOMEBREW_PREFIX=/usr/local).
First launch: open Settings (⌘,) and paste a free TMDB v4 token to light up movie/TV browsing. Voice and AI models are opt-in downloads — one button each, nothing installs itself.
🧱 Building from source
Zig 0.16.x plus a handful of native friends:
brew install zig mpv sqlite onnxruntime sdl2
# plus: libtorrent-rasterbar, g++ (torrent wrapper), ffmpeg/whisper-cpp for voice
git clone https://github.com/debpalash/Opal.git
cd Opal
zig build run # first build is slow; incrementals are fastLinux/Wayland: use make run (forces system SDL2 — the bundled one is
X11-only). macOS builds read HOMEBREW_PREFIX (default /opt/homebrew).
🔧 For hackers: dev loops, tests, and the contract
./dev.sh— hot-reload loop that survives C changes;-rfor ReleaseFast.just hot— native--watch -fincremental, millisecond rebuilds.just release/just app— ReleaseFast / macOSOpal.appbundle.
just test-all # the comprehensive gate — must stay 0 fail
zig build test # pure-Zig unit tests only (fast)fail = real regression. skip = optional component not installed. That's the
contract — every PR reports its tally (see
CONTRIBUTING.md).
📁 Where your stuff lives
XDG-compliant:
~/.config/opal/— config, tokens (0600), andopal.db(history, AI memory)~/.cache/opal/— caches~/Downloads/opal— default downloads~/.config/opal/plugins/<name>/— content plugins (manifest.json+ asearch/resolveexecutable that prints JSON; Lua runs sandboxed, native binaries don't — install only what you trust)
✨ The tour, in motion
| Instead of… | Opal gives you |
|---|---|
| Stremio / Kodi + a pile of add-ons | one search across every source, a play button on each row |
| an IPTV / live-TV app | ~40,000 live channels, searchable as you type |
| Jellyfin / Plex web clients | your own media servers, browsed natively |
| Tachiyomi / Mihon stuck on your phone | manga extensions on the desktop — server bundled, self-managed |
| a torrent client + a player | magnet → instant streaming while it downloads |
| ChatGPT for "what do I watch?" | a local AI copilot — no key, no bill, no feed |
| SponsorBlock · subtitle sites · Chromecast apps | all built in |
Plus a player that sweats the details — auto subtitles, watch-party, phone
remote (:41595), session restore — and a drawer full of extras: OCR on video
frames, language flashcards, RSS, incognito, seven themes, a JSON API (:41595).
Where it's all going: ROADMAP.md.
| S search | B browser | D library | H history |
| F fullscreen | P playlist | G grid layout | Z fit/crop |
| ⌘O open file | ⌘, settings | Esc back out | ⇧I cheat sheet |
Opal Connect (Chrome / Edge / Firefox) turns any tab into an Opal action — send or queue a video, add a manga/novel site as a source, or drive playback from a side-panel remote.
Install — grab the Chrome/Edge or Firefox build from the
latest release (unzip → load unpacked), or build from
extension/ (npm install && npm run build). Pair it with your Opal API token
and every action routes to the desktop app —
extension/README.md.
src/
├── main.zig # appFrame() — one function per frame, immediate mode
├── core/ # alloc, state, config, paths, io shim, sqlite (+sqlite-vec)
├── player/ # mpv wrapper, playlists, subtitles, watch history
├── services/ # search, AI, torrents, jellyfin, remote API, ...
└── ui/ # dvui widgets — theme tokens, shell, grid, player chrome
web/ # companion web UI (its own Zig project)
extension/ # Opal Connect — cross-browser MV3 extension
Player, search, torrent streamer, and AI compile to one native binary: a
single leak-checked allocator, fixed-size buffers over heap churn, one
state.app hub under strict thread-safety rules, and a render loop that
repaints only on change. House rules in
CONTRIBUTING.md.
Content sources ship off — nothing enables itself. You install endpoints
from the plugin registry, and un-install them just as fast
(CONTENT_POLICY.md).
No telemetry to monetize, no accounts to upsell — Opal runs on goodwill:
- ☕ Ko-fi or 💸 PayPal — keep the releases (and the coffee) coming.
- ⭐ Star the repo — it's how people find it.
- 🐛 File good bugs (how) · 🔧 send PRs (how).
- 📣 Show someone — the GIFs above are yours to share.
Yes please — read CONTRIBUTING.md, run
just test-all, and report the tally in your PR. Questions live in
Discussions; the help map is in
SUPPORT.md.
GPL-3.0 (LICENSE, NOTICE.md) — the honest
choice for a program linked against libmpv. Bundled dependencies keep their own
licenses (libtorrent BSD, dvui/ONNX MIT, SDL2 zlib, SQLite public domain).
Opal is a player and an aggregator — it hosts, indexes, and distributes nothing. It connects to sources you configure; only access media you have the legal right to access in your jurisdiction (
CONTENT_POLICY.md). BitTorrent exposes your IP to the swarm — use a VPN if that matters to you. Rights holders:docs/DMCA.md. Provided "as is", no warranty.
Built with Zig, mpv, and dvui. Yours since first launch.
Opal — open-source media player · IPTV / live TV player · torrent streaming ·
Jellyfin & Plex client · YouTube desktop app · manga reader (Mihon / Tachiyomi / Suwayomi) ·
local AI copilot · self-hosted Stremio & Kodi alternative · for macOS, Linux, and Windows.




