# Privacy Policy for Connect Multiple Speakers **Last updated:** 1 September 2026 **Extension:** Connect Multiple Speakers — Bluetooth Sync **Applies to:** version 1.0.0 and later **Developer:** Apoorve Verma **Policy URL:** https://raw.githubusercontent.com/Apoorve8055/app-privacy-policies/refs/heads/main/connect-multiple-speakers/PRIVACY_POLICY.md ## Overview Connect Multiple Speakers is a Chrome extension that plays one browser tab or local audio file through several audio output devices at once, and measures the delay of each device so Bluetooth and wired speakers stay in sync. This extension collects nothing, sends nothing, and has no server to send it to. Every byte it handles stays on your computer. ## Data Collection **We do NOT collect any personal data.** There is no analytics, no telemetry, no crash reporting, no advertising identifier, and no account. Nothing is transmitted to us or to any third party. ## Audio The extension exists to route audio to several speakers at once. Audio reaches it in two ways, and neither is recorded: - **A browser tab you pick.** Its audio is captured with Chrome's `tabCapture` API and routed straight to the output devices you switched on. It is never written to disk and never leaves your computer. - **A local audio file you choose.** It is stored in your browser's own IndexedDB so it survives a page reload, and it is removed when you clear the source. It is never uploaded. ## Microphone The microphone is used for exactly two things: 1. **Revealing speaker names.** Chrome will not tell a page what your audio outputs are called until that page has been granted microphone access. The grant is requested once, and the microphone track is stopped immediately afterwards — no audio is read from it. 2. **Sync Lab.** To measure how far behind a Bluetooth speaker is, the extension plays a short sweep and listens for it. Each recording lives in memory for the length of one measurement (about a second), is analysed there, and is discarded. Recordings are never written to disk, never combined, and never transmitted. No recording made by this extension is ever stored or sent anywhere. ## Browser Tabs `activeTab` gives the extension access to **one tab, for as long as that tab lives**: the tab that was in front when you clicked the toolbar icon. That is the only tab Chrome will let it capture, and the only tab it can name. It holds no host permissions, so it cannot read the content of any page — including that one. The tab's title is read to label it in the source panel. It is stored, with the tab's id, so the tab can be named and put back on air after a reload — see the table below. It is never aggregated or transmitted. The extension deliberately does **not** display tab favicons, because a favicon is a URL on that site's server and drawing it would make a network request. ## Local Data Storage | Where | What | Cleared when | | --- | --- | --- | | `chrome.storage.local` | Speaker profiles — the device's name as your operating system reports it, whether it is switched on, volume, mute, delay, stereo routing, tone, boost and measured latency — plus the master level, voicing settings, which source you last picked (for a tab, its id and title; for a file, its name and a counter that changes when you load a different one), and which release notes you have already dismissed | You uninstall the extension | | IndexedDB | The audio file you loaded, if any | You clear the source, or uninstall | | `chrome.storage.session` | Two things: the id of the extension's own tab, so it never offers to capture itself; and the tab you last clicked the toolbar icon on — its id, its title, when you clicked, and whether capture failed | You close the browser | | `sessionStorage` | A note that survives one page reload: the output device ids present before a speaker was connected, when that happened, whether a speaker was arriving, and whether another page has already acted on it — so the mixer reloads once rather than twice | You close the tab | | `localStorage` | A fallback copy of the same settings as `chrome.storage.local`, written only when the extension storage API is unavailable or refuses the write (for example on quota failure) | You uninstall the extension | Your speaker profiles keep the **name your operating system gives each output** — often a personal one, like "Sam's AirPods". It is kept so your settings can be re-matched to the right speaker after Chrome rotates its internal device ids. It stays on your machine like everything else here. All five are local browser storage. None of it is synced to your Google account, and none of it is readable by this developer or anyone else. ## External Communications **None.** The extension makes no network requests of any kind — not to a server of ours, not to a third party, not for fonts, not for icons. Everything it displays ships inside the package. The one outward link is the maker's name in the footer; it opens a new tab only if you click it, and nothing is sent unless you do. ## Permissions | Permission | Why it is needed | | --- | --- | | `tabCapture` | Capturing the audio of the tab you selected, which is the audio played through your speakers | | `activeTab` | Access to the single tab you clicked the icon on — the only tab Chrome permits capture of | | `offscreen` | The audio engine runs in an offscreen document, because MV3 service workers have no `AudioContext`, and because playback must continue while you use other tabs | | `storage` | Remembering your speaker settings between sessions, locally | There are no host permissions and no optional permissions. ## Third-Party Services This extension does not use any: - Analytics or tracking services - Advertising networks - Error reporting services - Remote fonts, icons, or scripts - Any other third-party data collection ## Data Security Your settings are stored locally by your browser, in storage sandboxed to this extension and unreadable by the websites you visit. This storage is not separately encrypted by the extension; it is protected by your browser and by the security of your own device and user account. No remote code is ever executed. Everything that runs ships in the package, enforced by a Content Security Policy of `script-src 'self'`. ## Data Deletion - **Clearing the source** removes a loaded audio file from IndexedDB. - **Uninstalling the extension** removes everything it has stored — speaker profiles, settings, and any loaded file alike. - **Clearing extension data in Chrome settings** (Settings → Privacy and Security → Clear browsing data → Advanced → Extensions) also removes everything. Because nothing is ever sent to a server we operate, there is nothing for us to retain or delete on your behalf. ## Children's Privacy This extension does not knowingly collect any information from children under 13 years of age. It collects no information from anyone. ## Chrome Web Store Limited Use Disclosure Our use of information received from Google APIs adheres to the [Chrome Web Store User Data Policy](https://developer.chrome.com/docs/webstore/program-policies/user-data-faq), including the Limited Use requirements. Specifically: the extension does not transfer, sell, or use personal or sensitive user data for any purpose other than providing the single, user-facing feature it describes — playing your audio through several speakers at once and keeping them in sync. ## Your Rights (GDPR, CCPA, and equivalent laws) The extension collects, transmits, sells, and shares **no** personal data, so the developer holds no records to access, correct, port, delete, or restrict on your behalf. Local data on your device is fully under your control (see Data Deletion above). ## Changes to This Policy We may update this privacy policy from time to time. Any changes will be posted on this page with an updated revision date. ## Contact If you have questions about this privacy policy, please contact: - Developer: **Apoorve Verma** - Email: **apoorveverma@protonmail.com** - Website: https://apoorveverma.com