Opera Browser Extension Development
Opera has been running on the Blink engine (Chromium) since 2013, so Chrome Extensions run in Opera without code changes. Opera publishes extensions in its own catalog at addons.opera.com, but also allows installing extensions directly from Chrome Web Store via the official "Install Chrome Extensions" extension.
Compatibility
Opera supports chrome.* API identically to Chrome. Manifest V3 is supported from Opera 92+. Differences:
| Feature | Opera | Note |
|---|---|---|
chrome.* API |
Full support | Identical to Chrome |
opera.* API |
Partial | Deprecated, not needed for new extensions |
| Sidebar Extensions | Yes | Opera-specific |
| Speed Dial Extensions | Yes | Opera-specific |
| MV3 | From Opera 92+ | Recommended |
Opera Sidebar Extensions
Opera has a left sidebar. An extension can add a button and embedded web interface there:
{
"manifest_version": 3,
"name": "My Opera Extension",
"version": "1.0.0",
"permissions": ["storage", "tabs"],
"background": {
"service_worker": "background.js"
},
"action": {
"default_popup": "popup.html",
"default_icon": "icons/icon48.png"
},
"sidebar_action": {
"default_title": "My Tool",
"default_panel": "sidebar.html",
"default_icon": "icons/sidebar-icon.svg"
}
}
// background.js — sidebar management
// Open/close sidebar programmatically
opr.sidebarAction.setPanel({ tabId: tab.id, panel: 'sidebar.html' });
opr.* — Opera-specific namespace, analog to chrome.*:
// Available opr APIs:
opr.sidebarAction // sidebar management
opr.addons // extension info
opr.cryptoWallet // integration with Opera crypto wallet
Speed Dial
Speed Dial is Opera's start page with website tiles. An extension can add its own tile:
"chrome_url_overrides": {
"speeddial": "speeddial.html"
}
<!-- speeddial.html -->
<!DOCTYPE html>
<html>
<head>
<title>My Speed Dial</title>
<link rel="stylesheet" href="speeddial.css">
</head>
<body>
<div class="speeddial-tile">
<!-- Tile content -->
</div>
<script src="speeddial.js"></script>
</body>
</html>
Publishing to addons.opera.com
- Register at addons.opera.com/developer/
- Upload extension ZIP archive
- Fill in description, category, screenshots (minimum 612×408 px)
- Wait for review (5–10 working days — Opera reviews manually)
Opera only accepts extensions in ZIP format, no .crx. Icon requirements: 64×64 and 128×128 PNG.
Testing
# opera://extensions/ → Developer Mode → Load unpacked extension
# Or via command line (Opera must be installed):
opera --load-extension=/path/to/extension
Cross-browser: Opera + Chrome in one package
Since Opera is 100% compatible with Chrome (except sidebar/speeddial specifics), you can publish one extension to both stores:
// Detect browser for conditional logic
function getBrowser() {
const ua = navigator.userAgent;
if (ua.includes('OPR/') || ua.includes('Opera/')) return 'opera';
if (ua.includes('Edg/')) return 'edge';
return 'chrome';
}
// Activate Opera-specific features
if (getBrowser() === 'opera' && typeof opr !== 'undefined') {
initSidebar();
}
Timeline
Adapting Chrome Extension for Opera Add-ons (publication + review) — 1–2 working days. Extension with Opera Sidebar and Speed Dial integration — 3–5 days additional to base functionality.







