Every cask here re-hosts an upstream build on this repository's releases and is updated by a shared pipeline every six hours. Apps that Gatekeeper would block are de-quarantined on install, so they open like anything else.
This tap only re-packages other people's work. If an app earns a place in your Dock, send something to the person who builds it. Each cask prints this reminder on install and on every upgrade.
| App | Support upstream |
|---|---|
| Flixor | |
| Fred TV | |
| Paicord | |
| FCast Sender | No donation page. Star the project, file bugs, contribute. |
| qView | No donation page. Star the project, file bugs, contribute. |
| qBittorrent | Donate to the developers and server costs |
Support this tap. The pipeline, hosting, and upkeep are done by @edbfi. Monero is welcome:
8Awh9TSyJPZT99RWbVpd6sDLKNCLAWKm5M6chez7T1emhJDJXdoX583bzVRHjpn2Ej7jFqn3fEzkBMYYBFax5vqj97MvC72
| App | macOS cask | Linux formula |
|---|---|---|
| FCast Sender | Apple Silicon, macOS 11+ | ARM64 / x86_64 |
| Flixor | Universal, macOS 13+ | — |
| Fred TV | Universal; installs mpv, ffmpeg and yt-dlp |
ARM64 / x86_64 |
| Paicord | Universal, macOS 14+ | — |
| qBittorrent | Universal, macOS 13+ | — |
| qView | Universal, macOS 12+ | ARM64 / x86_64 |
Install with brew install --cask edbfi/taps/<app> on macOS or brew install --formula edbfi/taps/<app> on Linux; tokens are fcast-sender, flixor, fredtv, paicord, qbittorrent and qview. Name the package kind where both exist. "Universal" means the bundle contains ARM64 and x86_64 code; Intel runtime is largely untested. An app's minimum macOS version is not a promise of Homebrew support on that version; see platform support for tested versions and limits.
Casks live in Casks/<category>/: media/ holds FCast Sender, Flixor, Fred TV and qView; network/ holds qBittorrent; social/ holds Paicord. The category is only a folder; the install command never changes.
-
qBittorrent packages the standard stable desktop DMG (Qt 6/libtorrent 1.2), not the separate
qbittorrent-cliclient orlt20variant. Upstream signs the universalqbittorrent.appwith its own self-issued certificate, not an Apple Developer ID, so the cask installs it asqBittorrent.appand removes quarantine after installation. Updates wait until the latest stable release includes the standard DMG. If migrating from Homebrew's disabled macOS cask, runbrew uninstall --cask homebrew/cask/qbittorrentwithout--zap, thenbrew install --cask edbfi/taps/qbittorrentto preserve settings and torrent state. -
FCast Sender's upstream macOS DMG contains only an ARM64 main executable, so the cask doesn't support Intel Macs. The app is signed and notarized by FUTO, so no quarantine workaround is applied. Versions drop the pre-release suffix the upstream tag carries:
sender-0.0.3-betabecomes0.0.3. -
Flixor versions match upstream tags such as
beta2.4.0. The app bundle isFlixorMac.app. -
Fred TV depends on the
mpv,ffmpegandyt-dlpformulae, which Homebrew installs alongside it. Versions strip a leadingv(v1.9.1becomes1.9.1). -
Paicord uses the immutable upstream release belonging to the newest successful main build. Each cask version is
YYYY-MM-DD-<short sha>; the release tag must match that exact build commit.[!WARNING] Paicord is an unofficial, third-party Discord client. Using it violates Discord's Terms of Service and your account may be suspended or banned. Use at your own risk.
-
qView is disabled in the official homebrew-cask repository because of a Gatekeeper check. This cask removes the
com.apple.quarantineattribute after install, so the app launches without a manualxattr.
Flixor, Fred TV, Paicord and qView are distributed unsigned upstream; each of those casks runs a postflight_steps block that strips the quarantine attribute from the installed app.
Run brew update before installing. Use the cask token from the Apps table (e.g. fcast-sender) for <app> below.
# Install (taps the repository automatically)
brew install --cask edbfi/taps/<app>
# Or tap first, then install by short name
brew tap edbfi/taps
brew install --cask <app>
# Update
brew upgrade --cask <app>
# Uninstall
brew uninstall --cask <app>
# Uninstall and remove application data
brew uninstall --cask --zap <app>
# Remove the tap
brew untap edbfi/tapsqView, Fred TV and FCast's desktop Sender have Linux formulae for ARM64 and x86_64; Flixor, Paicord and qBittorrent are macOS-only in this tap. They build from source with Homebrew's default prefix, /home/linuxbrew/.linuxbrew; no Linux bottles are published yet, and Fred TV stays source-only pending upstream license clarification. Rust builds can take tens of minutes and several GB of disk. Formula source updates require a reviewed PR.
brew install --formula edbfi/taps/qview
qview picture.png
brew upgrade --formula edbfi/taps/qview
brew uninstall --formula edbfi/taps/qviewThe other launch commands are fredtv and fcast-sender; desktop entries use absolute Homebrew paths, and Fred TV's wrapper finds its media tools from menu launches too. To show the launchers and icons in your desktop menu, add this to your session's environment and log in again:
export XDG_DATA_DIRS="/home/linuxbrew/.linuxbrew/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"Your desktop supplies X11 or Wayland, a session D-Bus and audio; FCast screen sharing also needs PipeWire and a compatible xdg-desktop-portal ScreenCast backend. The tap installs a GStreamer PipeWire plugin but starts no session services. Uninstalling removes the launcher, desktop entry, icons and binaries and keeps settings and recordings; formulae have no --zap. Review unused dependencies with brew autoremove --dry-run. Don't run the GUI apps with sudo. See platform support and historical validation for source versions, desktop requirements and untested hardware features.
flowchart LR
A[Every 6 hours] --> B[check each cask<br/>resolve, download, inspect]
B --> D{newer upstream?}
D -- no --> Z[done]
D -- yes --> E[re-derive and re-host on<br/>app-latest release]
E --> F[fetch it back through<br/>the rewritten cask]
F --> G[push version + sha256<br/>to main]
update-casks.ymlruns the stages inscripts/update.shevery six hours, or on dispatch for one cask.scripts/discover.shlists the cask-enabledpipelines/<app>/directories. Every stage runs one job per cask, with that cask's own timeout (UPDATE_MINUTESin itsconfig.env, 20 by default), so adding a cask never touches the workflow.pipelines/<app>/resolve.shis the only app-specific code: it finds the newest upstream build and validates the tag and asset name strictly before anything else runs.- An update needs an upstream version newer than the cask's (
sort -V). A macOS job downloads the DMG, hashes it and checks the bundle's identity and architectures. A second job, holding the release write access, repeats the lookup and download itself, requires the same checksum, and attaches the DMG to the rolling<app>-latestrelease. Published downloads are never replaced. A macOS job then fetches the hosted file through the rewritten cask, and only then does a last job push the newversionandsha256lines straight tomain, with a deploy key that may bypass the required checks. - A failing cask turns the run red without stopping the others. Pushes run one cask at a time, each from a fresh clone of
main. Retry with a new run: it redoes whatever is missing, and publishes nothing twice. Versions thatsort -Vcan't order (a downgrade, two Paicord builds of one day, Flixor leaving itsbetaprefix) and a current version whose hosted DMG went missing need a human. - CI runs on every PR, each push to
mainand weekly. It runs the prek hooks (bash -n, shellcheck and both offline test trees),scripts/check-casks.shon macOS (brew readall,brew style,brew audit --cask) andscripts/check-formulae.shon Linux x86_64 and ARM64, which builds and tests the changed formulae (all of them weekly). Run the same commands locally:prek run --all-files --hook-stage manual,bash scripts/check-casks.sh,bash scripts/check-formulae.sh.
Releases: https://github.com/edbfi/homebrew-taps/releases
Three files:
Casks/<category>/<app>.rbwithurlpointing atreleases/download/<app>-latest/<Prefix>-#{version}.dmgand a donationcaveatsblock.pipelines/<app>/config.envwith the display name, upstream repo, asset prefix and donation links. OptionallyUPDATE_MINUTES(1–60, default 20), the timeout of each of the app's updater jobs.pipelines/<app>/resolve.shthat writesversionanddownload_url(see the existing resolvers and the contract at the top ofscripts/resolve.sh).
Then register the app's bundle name, identifier and architectures in scripts/inspect-macos.py and add resolver fixtures to scripts/tests/test_pipeline.py. CI finds the new cask on its own.
bash scripts/discover.sh should then list the new app, and GH_TOKEN=$(gh auth token) bash scripts/resolve.sh <app> should print its current version.
This is an unofficial, community-maintained tap, not affiliated with any of the upstream developers. The tap itself is licensed under AGPL-3.0. The apps keep their own licenses:
| App | Upstream license |
|---|---|
| FCast Sender | MIT; the Linux formula also installs under GPL-3.0, Slint's GPL option |
| Flixor | Flixor Public License |
| Fred TV | GPL-2.0 |
| Paicord | GPL-3.0 |
| qBittorrent | GPL-3.0-or-later binary distribution, with OpenSSL exception |
| qView | GPL-3.0 |
| PipeWire GStreamer plugin (Linux) | MIT |