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.
- 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
-
Arch Linux (AUR) - https://aur.archlinux.org/packages/fx_cast/
yay -S fx_cast
- NodeJS
- dpkg (for building deb packages)
- rpm (for building rpm packages)
- macOS (for building macOS installer packages)
macOS:
brew install dpkg rpm makensis
Debian/Ubuntu:
sudo apt install dpkg rpm makensis
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
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.
install-manifest
copies this manifest to the proper location (or adds its current location to the registry). - ... contains the unpacked extension.
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 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:
fx_cast_bridge-<version>-<arch>.(pkg|deb|rpm|exe)
-
... contains the built extension in the format
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
--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 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
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.
Netflix / HTML5:
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.