Catch is a native download manager for Omarchy: a bar widget shows the queue, a Rust backend owns the transfers, and browser extensions hand downloads over from the Chromium and Firefox families.
- Browser hand-off — left-click a download in a connected browser, or right-click for links, page media, selected links, video, or audio.
- One or many links — paste a link or list; each unique http(s) link becomes a row.
- Video and audio — YouTube/Vimeo links use
yt-dlp; audio-only is in the browser menu. - Resumable queue — 1, 3, 5, or 10 transfers run at once; pause or stop keeps partial data. Re-sending a saved link asks before a second copy.
- Segmented downloads — large files use parallel ranges when supported, with a plain fallback. See segmented downloads.
Catch ships a prebuilt Linux x86_64 backend in bin/dist; nothing is compiled.
It uses programs already on an Omarchy machine, except yt-dlp:
| Program | Needed for | Source |
|---|---|---|
yt-dlp |
Video and audio downloads | install this one |
wl-paste, wl-copy |
Clipboard access | wl-clipboard |
xdg-open |
Opening files and folders | xdg-utils |
systemctl, omarchy-notification-send |
Schedule, alerts | systemd, Omarchy |
Only yt-dlp is not part of Omarchy: omarchy pkg add yt-dlp.
omarchy plugin add https://github.com/tahadx/catch --enable
~/.config/omarchy/plugins/io.github.tahadx.catch/install.shThe first command puts Catch on the bar. The installer links catch and
catch-host into ~/.local/bin, writes host files, registers the extension,
and asks before adding Super+D (n skips; --yes adds it). Re-running is safe.
Restart the browser once, then follow browser support.
| Browser family | Extension |
|---|---|
| Chromium, Brave stable/Origin, Edge | Loads next start if a flags file exists |
| Google Chrome, Brave beta/nightly | One-time Load unpacked |
| Firefox, Zen, Floorp, LibreWolf, Waterfox | Load Temporary Add-on each launch |
Flatpak browsers may block the host; use the distro package. Vivaldi, Opera, and other unlisted browsers are unsupported. Details: browser support.
Left-click the bar icon or press Super+D; right-click opens the download folder.
- Add links. Paste one link or a list and press
enter; each unique http(s) link becomes its own row.ctrl+vpastes from anywhere in the panel. - From the browser. Left-clicking a file link sends it to Catch. Right-click → Catch for links, page media, selected links, video, or audio; Download with browser bypasses Catch, Copy page URL copies only the URL.
- Videos. YouTube and Vimeo links use
yt-dlp; Catch as video forces it for other supported sites. - Control the queue. Each row has a mark, a stop, and a bin. Stop keeps
partial data; the bin removes it and the row but keeps a finished file.
rgives a failed or stopped row a new address, reusing bytes only for the same file. - Already saved links. Sending a link whose file is in the download folder asks whether to open, save another copy, or replace it, even after its row is gone.
| Key | Action |
|---|---|
↑ ↓ / j k |
Move between rows |
space / a |
Mark a row / all rows |
p / x |
Pause or resume (marked rows too) / stop, keeping data |
r |
Give a failed or stopped row a new address |
c / delete |
Remove marked rows / cursor row; finished file stays |
d |
Delete marked files from disk |
enter |
Open a finished file |
tab / ctrl+v |
Switch field/rows / paste links |
o / s |
Open folder / settings |
esc / q |
Back one screen / close |
The gear icon or s opens settings, stored in ~/.config/omarchy/shell.json
(also editable from Omarchy's settings).
| Setting | Default | Notes |
|---|---|---|
| Download folder | ~/Downloads/catch |
Empty uses $XDG_DOWNLOAD_DIR/catch when set |
| Parallel transfers | 3 | 1, 3, 5, or 10 |
| Connections per file | 4 | 1, 2, 4, or 8; 1 disables segmented downloads |
| Bandwidth | unlimited / 0 KB/s | Mode (balanced, low) plus optional global cap |
| Schedule | off | e.g. 02:00–06:00; enabling installs a systemd timer |
| Panel position | bar | bar, top, center, left, right, bottom |
Headless overrides: CATCH_MAX_PARALLEL, CATCH_SEGMENTS, CATCH_BW_MODE,
CATCH_BW_CAP_BPS; connection controls are in
segmented downloads.
CATCH_CATEGORIES=on sorts files into type folders.
To update:
omarchy plugin update io.github.tahadx.catchRestart the browser to pick up extension changes.
Run Catch's cleanup before removing the plugin:
~/.config/omarchy/plugins/io.github.tahadx.catch/bin/uninstall
omarchy plugin remove io.github.tahadx.catchSetup → Remove Plugin is not a substitute for the first command. For a git
checkout Omarchy deletes the plugin directory with rm -rf and does not run
anything inside it, so the cleanup script disappears with it. The leftovers
are Catch's path in the Chromium/Brave --load-extension line, the
native-messaging host files, the catch/catch-host links, the Super+D
binding, and the scheduler timer.
bin/uninstall removes all of those. Your queue and ~/Downloads/catch stay.
The same script is installed as ~/.local/bin/catch-uninstall, so it survives
Remove Plugin. If the plugin directory is already gone, run:
catch-uninstallIf that helper is missing too (older installs), recover it with a fresh clone:
git clone --depth 1 https://github.com/tahadx/catch
./catch/bin/uninstallRestart Chromium or Brave afterwards. If it still reports
Failed to load extension from: . Manifest file is missing or unreadable
the cleanup did not run, or another browser process was still open. Close every
Chromium/Brave window and start the browser again. If Catch was loaded manually
instead of through the flags file, remove it once from brave://extensions or
chrome://extensions.
The panel and service are Panel.qml, Service.qml, and Model.js; the
backend, extensions, and tooling live in crates/catch, extensions/, and bin/.
bin/refresh-dist # rebuild bin/dist from source
cargo test -p catch # backend tests
node tests/model.test.js # panel model tests
bin/check-release # version and shipped-binary consistencyRelease steps: release.
MIT © 2026 Taha Sadough. See LICENSE.