- 🎬 Universal Streaming - Support for 1000+ websites via yt-dlp
- 📋 Playlist Support - Send entire playlists with a single click
- 🔄 Multiple Connections - Save and manage different Kodi instances
- 🚀 One-Click Send - Stream instantly from your browser
- 🖱️ Context Menu - Right-click any link, video or page and choose Play on Kodi or Add to Kodi queue
- ⌨️ Keyboard Shortcuts -
Alt+Shift+Kplays the current tab,Alt+Shift+Qadds it to the queue (customizable in the browser's shortcut settings) - 🟢 Connection Status - See at a glance whether your Kodi is reachable
- 🔒 Privacy-Focused - No data collection, fully open source
- 🎨 Modern UI - Built with modern web technologies
To use this extension, you need to install the SendToKodi Addon in Kodi:
Kodi Addon: plugin.video.sendtokodi
The addon handles the actual streaming on the Kodi side and must be installed for this extension to work.
The extension only asks for access to your Kodi host (e.g. http://192.168.1.100) the first time you play something or test a connection. It does not need access to the websites you visit: the URL of the current tab is only read when you click the extension icon, use the context menu or a keyboard shortcut.
|
TypeScript |
Solid.js |
Vite |
Tailwind CSS |
- Node.js 22.12 or higher (see
.nvmrc) - npm
# Clone the repository
git clone https://github.com/firsttris/chrome.sendtokodi.git
cd chrome.sendtokodi
# Install dependencies
npm install
# Start development server
npm run start
# For Firefox compatibility
npm run start:firefox
# Lint, typecheck and test
npm run check
npm run typecheck
npm testChrome:
- Open Chrome and navigate to
chrome://extensions/ - Enable Developer mode (toggle in top-right)
- Click Load unpacked
- Select the
distfolder from the project
Firefox:
- Open Firefox and navigate to
about:debugging - Click This Firefox
- Click Load Temporary Add-on...
- Select the
manifest.jsonin thedistfolder
The extension will hot-reload as you make changes.
- 100% Open Source - All code is available for review
- No Tracking - We don't collect any data
- Local Processing - Everything runs on your device
- Transparent Permissions - Only uses necessary browser APIs
Contributions are welcome! Please feel free to submit a Pull Request.
Special thanks to our contributors:
- @eeshugerman - Mozilla support #3
- @mauman - Firefox manifest fixes #14
How releases and store uploads work
All stores are handled by a single workflow: Actions → Release → Run workflow.
- Leave version empty to create a new patch release: the workflow lints, tests and builds, then bumps the version, tags it, creates a GitHub release with generated notes and uploads the Chrome and Firefox packages.
- Enter an existing version (e.g.
0.0.51) to only (re-)submit that release to the stores. - Use the chrome / firefox / edge checkboxes to choose the stores. The store uploads run in parallel after the release.
gh workflow run release.yml # new release, all stores
gh workflow run release.yml -f version=0.0.51 -f edge=falseThe Chrome package is uploaded as a draft (publish: false) and has to be submitted for review in the developer dashboard. Firefox receives the source archive of the tagged commit for the review.
Chrome Web Store (see chrome-webstore-upload-keys): CHROME_EXTENSION_ID, CHROME_CLIENT_ID, CHROME_CLIENT_SECRET, CHROME_REFRESH_TOKEN. The publisher ID is not secret and is set in the workflow; it is part of the developer dashboard URL (https://chrome.google.com/webstore/devconsole/<publisher-id>).
Mozilla Add-ons (API keys): AMO_JWT_ISSUER, AMO_JWT_SECRET.
Microsoft Edge Add-ons (Publish API): EDGE_PRODUCT_ID, EDGE_CLIENT_ID, EDGE_API_KEY.
Made by the open source community
⭐ Star us on GitHub • 🐛 Report a Bug • 💡 Request a Feature
