Skip to content

debpalash/Opal

Opal logo

Opal

Play everything. From one app.

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.

CI status Latest release Total downloads GitHub stars License: GPL-3.0 Written in Zig 0.16 Runs on macOS, Linux, and Windows

Get it · See it · Why · Under the hood · Support (Ko-fi, PayPal)

Opal home screen — a time-aware greeting, an ask-anything search box, and tonight's trending row of movies and shows

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

🚀 Get it

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 | sh

Or 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 clonezig 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 fast

Linux/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; -r for ReleaseFast.
  • just hot — native --watch -fincremental, millisecond rebuilds.
  • just release / just app — ReleaseFast / macOS Opal.app bundle.
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), and opal.db (history, AI memory)
  • ~/.cache/opal/ — caches
  • ~/Downloads/opal — default downloads
  • ~/.config/opal/plugins/<name>/ — content plugins (manifest.json + a search/resolve executable that prints JSON; Lua runs sandboxed, native binaries don't — install only what you trust)

✨ The tour, in motion
Press play on a torrent result; playback starts while it downloads
🧲 Magnets behave like files
Press play on a torrent — you're watching while it downloads. (Sintel, © Blender Foundation, CC-BY 3.0)
One query fanned out across every source, ranked
🔭 One search, every source
Disk, torrents, Jellyfin, Plex, Stremio, anime, YouTube, live TV, TMDB, manga — one ranked, playable list.
Scrolling the trending wall, then switching to the YouTube tab
🗺️ Browse every source in one place
Trending walls, genres, and episode drill-downs across TMDB, YouTube, anime, Jellyfin, and Plex.
A suggestion chip answered by the local AI with a poster rail
🤖 An AI that lives on your machine
Local LLM with tool use answers with playable picks — no API key, no bill, no feed.

🆚 Why? One app instead of ten

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.

⌨️ Keyboard-first, remote-friendly

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

🧩 Browser extension

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.

Opal Connect side panel — connection status, page actions, transport controls, and a live cross-source search returning YouTube results with play and queue buttons

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.

⚙️ Under the hood

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).

💜 Support

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.

🤝 Contributing

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.

📜 License

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).

The fine print

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.

About

Opal — The open-source everything media player & browser. Jellyfin/Stremio/Kodi alternative for macOS, Linux & Windows.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

14 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors