fx_cast
Firefox extension that implements the Chrome sender API and exposes it to web apps to enable cast support.
Communication with receiver devices is handled by a native application (bridge). Check the implementation notes for more info.
No full public release yet! Pre-release beta version is incomplete and likely buggy.
Installing
Supported platforms
- Linux
- macOS
- Windows
Install the Firefox extension and companion bridge application. Downloads can be found on the website or in the GitHub releases section.
macOS version has an installer, Linux packages can be installed via the command line:
# Debian/Ubuntu
sudo dpkg -i fx_cast_bridge-<version>-<arch>.deb
# Fedora
sudo dnf install fx_cast_bridge-<version>-<arch>.rpm
Package managers
-
Arch Linux (AUR) - https://aur.archlinux.org/packages/fx_cast/
yay -S fx_cast
Building
Requirements
- Node.js 10.x (pkg doesn't support node11 targets yet)
- dpkg (for building deb packages)
- rpm (for building rpm packages)
- macOS (for building macOS installer packages)
Installing dependencies
macOS:
brew install dpkg rpm makensis
Debian/Ubuntu:
sudo apt install dpkg rpm nsis
Fedora:
sudo dnf install dpkg rpm-build mingw-nsis
Archlinux:
At the moment, pkg has a bug, until fixed nodejs has to be downgraded to 10.12.0:
sudo pacman -S nvm dpkg
yay -S rpm-org nsis
echo 'source /usr/share/nvm/init-nvm.sh' >> ~/.bashrc
nvm install 10.12.0
Instructions
git clone https://github.com/hensm/fx_cast.git
cd fx_cast
npm install
npm run build
npm run install-manifest
This will build the ext and app, outputting to dist/:
-
... contains the bridge binary and manifest with the path pointing that binary.dist/app/install-manifestcopies this manifest to the proper location (or adds its current location to the registry). -
... contains the unpacked extension.dist/ext/
Watching ext changes:
npm run watch --prefix ./ext
Launch Firefox and auto-reload on rebuild (run in separate terminal):
npm run start --prefix ./ext
Packaging
Packaging currently only possible for macOS/Linux. macOS packages can only be created on macOS, Linux .deb/.rpm packages can be built on any platform with dpkg-deb and rpmbuild binaries.
-
... contains the installer package:dist/app/fx_cast_bridge-<version>-<arch>.(pkg|deb|rpm|exe) -
... contains the built extension in the formatdist/ext/fx_cast-<version>.zip.
Build and package app and extension for current platform:
npm run package
Packaging examples:
# Linux platforms
npm run package --prefix ./app -- --platform=linux --packageType=deb
npm run package --prefix ./app -- --platform=linux --packageType=rpm
# Windows
npm run package --prefix ./app -- --platform=win32
# macOS
npm run package --prefix ./app -- --platform=darwin
Package script arguments
--platform"win32","darwin","linux"
Select the platform to build for. Defaults to current platform.--arch"x64","x86"
Select platform arch to build for. Defaults to current platform arch.--packageType"deb","rpm"
Select the package type. Defaults todeb. Only relevant when building for Linux.
Testing
Testing requires geckodriver (or chromedriver for Chrome parity testing). See selenium-webdriver installation instructions (ignore npm install).
Test results will be displayed within the opened browser tab.
npm run build --prefix ./app
npm run install-manifest
npm run package --prefix ./ext
npm test
SELENIUM_BROWSER=chrome npm test
Usage
Extension can be loaded from about:debugging as a temporary extension.
Most sites won't load the cast API unless the browser presents itself as Chrome. The extension includes a method of spoofing the user agent string, sites can be whitelisted via the options page. Whitelist entries are specified as match patterns. To whitelist all sites, add <all_urls> to the whitelist, though this could cause breakage on random sites.
HTML5 media elements have a "Cast..." context menu item that triggers a sender application. Only works on remote (non-local) media that isn't DRM-encumbered.
Cast-enabled websites will load the sender API shim and display a cast button as in Chrome, provided there are no bugs/incompatibilities with the shim.
Video Demos
Netflix / HTML5:
Credit
Note: Since it seems to be causing confusion, this project does not use electron. The electron-chromecast library was only used as a reference for the intitial implementation of the API shim.


