If you built a Chrome Extension before 2023, you need to know about Manifest V3 (MV3). Google’s overhaul of the extension platform brought significant architectural changes — some for the better, some that required creative workarounds.
What Changed in MV3
Service Workers Replace Background Pages
The biggest change: background pages are gone. MV3 uses service workers instead — lightweight, event-driven scripts that spin up on demand and terminate when idle.
This means:
- No persistent background state (service workers can be killed at any time)
- No
XMLHttpRequestin background context — usefetch()instead - You must persist state to
chrome.storagerather than in-memory variables
The Side Panel API
MV3 introduced the Side Panel API — a dedicated UI surface that opens alongside the current tab without blocking content. For Live Meeting Notes, this was the perfect UI paradigm: always accessible, non-intrusive.
// Register the side panel
chrome.sidePanel.setOptions({
path: 'sidepanel.html',
enabled: true
});
// Open on action click
chrome.action.onClicked.addListener((tab) => {
chrome.sidePanel.open({ windowId: tab.windowId });
});
Audio Capture in MV3
For meeting transcription, I needed to capture tab audio. MV3 still allows chrome.tabCapture.capture() but requires an offscreen document for audio processing:
// Create offscreen document for audio processing
await chrome.offscreen.createDocument({
url: 'offscreen.html',
reasons: ['USER_MEDIA'],
justification: 'Capture tab audio for transcription'
});
The Chunked Audio Pipeline
Live Meeting Notes uses a chunked audio pipeline to keep costs down and latency low:
- Capture tab audio stream via
tabCapture - Buffer audio chunks (configurable, default 10s)
- Send chunks to Gemini API for transcription
- Stream results back to the Side Panel UI
The key insight: don’t send the entire meeting recording at once. Process in chunks to give users real-time feedback and avoid hitting API payload limits.
Lessons Learned
- Test service worker lifecycle aggressively — your extension will be killed and restarted constantly
- Use
chrome.storage.sessionfor temporary state — it persists within a browser session but clears on restart - The Side Panel is underrated — great UX for productivity tools
- Gemini API is surprisingly capable for audio transcription at reasonable cost
Want to see Live Meeting Notes in action? Check it out on the Chrome Web Store.
Want to discuss this topic?
I offer consulting for energy market strategy and software development.
Work With Me →