Dhravya/arc-sidepanel-patch
Make Chrome extensions work in Arc browser! ๐ Polyfill for chrome.sidePanel API - enables Claude, Grammarly, and other extensions to work perfectly on Arc with zero dependencies.
Arc SidePanel Patch
Make chrome.sidePanel extensions work in Arc browser.
Arc never shipped support for the Chrome Side Panel API, so extensions like Claude, Grammarly, and others that use chrome.sidePanel don't work. This project fixes that by injecting a polyfill into every extension at runtime.
Quick Start
# Make sure Arc is running with the debugging port
/Applications/Arc.app/Contents/MacOS/Arc --remote-debugging-port=9222
# Run the patcher (keeps running to catch extension restarts)
npx @dhravya/arc-sidepanel-patcherOr launch Arc and patch in one command:
npx @dhravya/arc-sidepanel-patcher --launchAuto-Start on Login
Install globally and set up auto-start so you never have to think about it:
npm install -g @dhravya/arc-sidepanel-patcher
# This creates a macOS LaunchAgent that runs the patcher every time you log in
arc-sidepanel-patcher install
# To remove
arc-sidepanel-patcher uninstall
# Check status
arc-sidepanel-patcher statusHow It Works
- Connects to Arc via Chrome DevTools Protocol (CDP) on port 9222
- Discovers all extension service workers running in Arc
- Injects a polyfill that replaces the broken
chrome.sidePanelwith a working implementation - Watches for restarts โ when an extension's service worker restarts, the polyfill is re-injected
The polyfill implements the full chrome.sidePanel API surface:
setOptions()/getOptions()setPanelBehavior()/getPanelBehavior()open()/close()onOpened/onClosedevents
Side panels open as popup windows positioned next to the browser window, visually mimicking a sidebar.
For Extension Developers
If you develop a Chrome extension and want it to work in Arc, you can use the polyfill library directly:
npm install @dhravya/chrome-sidepanel-polyfillimport { install } from "@dhravya/chrome-sidepanel-polyfill";
// Only installs if native chrome.sidePanel is missing or broken
install();
// Now use chrome.sidePanel as normal
chrome.sidePanel.setOptions({ path: "sidepanel.html" });Or load the IIFE bundle in your extension's service worker for zero-config setup:
{
"background": {
"service_worker": "service-worker.js",
"scripts": ["node_modules/@dhravya/chrome-sidepanel-polyfill/dist/index.iife.global.js", "service-worker.js"]
}
}CLI Reference
arc-sidepanel-patcher [options] Run the patcher
arc-sidepanel-patcher install [options] Auto-start on login
arc-sidepanel-patcher uninstall Remove auto-start
arc-sidepanel-patcher status Check auto-start status
Options:
-p, --port <number> CDP debugging port (default: 9222)
-l, --launch Launch Arc with debugging port enabled
-V, --version Show version
-h, --help Show help
Limitations
- macOS only โ Arc is macOS-only
- Requires CDP โ Arc must be started with
--remote-debugging-port - Popup windows, not embedded โ Side panels open as positioned popup windows rather than embedded iframes (Chrome's internal
web_accessible_resourcescache prevents the iframe approach for installed extensions) - Race condition on first inject โ The polyfill is injected after the extension's service worker starts, so the initial
chrome.sidePanelreference is briefly the broken native one. Works because extensions readchrome.sidePanellazily at click time, not at init time.
Packages
| Package | Description |
|---|---|
@dhravya/arc-sidepanel-patcher |
CLI tool โ patches all extensions in Arc |
@dhravya/chrome-sidepanel-polyfill |
Library โ drop-in polyfill for your own extensions |
Development
git clone https://github.com/dhravya/arc-sidepanel-patch
cd arc-sidepanel-patch
pnpm install
pnpm buildLicense
MIT