{"id":2243,"date":"2026-10-22T17:42:13","date_gmt":"2026-10-22T15:42:13","guid":{"rendered":"https:\/\/cln.io\/blog\/?p=2243"},"modified":"2026-10-23T19:58:15","modified_gmt":"2026-10-23T17:58:15","slug":"1password-7-10-4-killed-the-classic-extension-get-7-9-11-back","status":"publish","type":"post","link":"https:\/\/cln.io\/blog\/1password-7-10-4-killed-the-classic-extension-get-7-9-11-back\/","title":{"rendered":"1Password 7.10.4 killed the classic extension (OPX removed) \u2013 get 7.9.11 back"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">My 1Password classic extension in Brave just stopped working. First guess: Brave\/Chromium finally pulled the plug on Manifest V2 extensions (the classic 1Password extension is MV2 from 2019, <a href=\"https:\/\/cln.io\/blog\/get-the-1password-classic-extension-backup-mirror\/\">see the old post<\/a>). Nope. Brave still loads it just fine. It&#8217;s 1Password itself &#x1f643;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1Password 7 for Mac auto-updated itself to <strong>7.10.4<\/strong> on Oct 6 2026, and that build (and 7.9.12) ship a kill switch for the classic extension. The app side now just hangs up on it:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">1PasswordNativeMessageHost 71004002 [EXT_NMH:OPNMXPCConnection.swift] E connect() | Verification failure: [AnyHashable(\"action\"): hangUp, AnyHashable(\"payload\"): {\n    errorCode = 104;\n    reason = \"OPX support has been removed\";\n}]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So this post is the 2026 sequel to the 2023 one: notes on what happened, which version still works, and where to get it (official + Wayback Machine links, the files are, as of today, still up on 1Password&#8217;s own CDN &#x1f937;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On this page<\/p>\n\n\n\n<nav aria-label=\"Table of Contents\" class=\"wp-block-table-of-contents\"><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/cln.io\/blog\/1password-7-10-4-killed-the-classic-extension-get-7-9-11-back\/#what-actually-happened\">What actually happened<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/cln.io\/blog\/1password-7-10-4-killed-the-classic-extension-get-7-9-11-back\/#last-working-versions\">Last working versions<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/cln.io\/blog\/1password-7-10-4-killed-the-classic-extension-get-7-9-11-back\/#downgrade-to-7-9-11-on-macos\">Downgrade to 7.9.11 on macOS<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/cln.io\/blog\/1password-7-10-4-killed-the-classic-extension-get-7-9-11-back\/#porting-the-classic-extension-to-manifest-v3\">Porting the classic extension to Manifest V3<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/cln.io\/blog\/1password-7-10-4-killed-the-classic-extension-get-7-9-11-back\/#prompt-for-your-coding-agent\">Prompt for your coding agent<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/cln.io\/blog\/1password-7-10-4-killed-the-classic-extension-get-7-9-11-back\/#every-1password-7-build-ever\">Every 1Password 7 build ever<\/a><\/li><\/ol><\/nav>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-actually-happened\">What actually happened<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">1Password 7.10.4 for Mac was released 2026-09-29 and the <a href=\"https:\/\/app-updates.agilebits.com\/product_history\/OPM7\" rel=\"noopener\">changelog<\/a> says it right there: &#8220;Removes support for the 1Password Classic extension&#8221;. The classic extension talks to the desktop app over a protocol they call OPX, and the native messaging helper in 7.10.4 (and in the unlisted 7.9.12 build) now answers every connection with <code>errorCode 104 \/ OPX support has been removed<\/code> and disconnects. The WebSocket fallback on 127.0.0.1:6263 is gone too.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is <strong>not<\/strong> the browser. Brave 1.97 (Chromium 155) still loads the original MV2 extension (<code>aomjjhallfgjeglblehebfpbcfeobpgk<\/code>, v4.7.5.90, last touched 2019) without complaint, I checked by loading it unpacked in a fresh profile. It just can&#8217;t get anything out of the app anymore.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can see it straight in the binaries. 7.9.11 only has the &#8220;phase one&#8221; nag dialog, 7.9.12 and 7.10.4 have the actual kill switch:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">H=\"Contents\/Library\/LoginItems\/1Password Extension Helper.app\/Contents\/MacOS\/1Password Extension Helper\"\n\n$ strings -a \"1Password 7.app (7.9.11)\/$H\" | grep -i OPX\nshowOPXDeprecationAlert()\nOPXDeprecationPhaseOneLastCheckKey\nOPXDeprecationPhaseOneSuppressNotificationKey\n\n$ strings -a \"1Password 7.app (7.9.12)\/$H\" | grep -i OPX\nOPX client disconnected\nOPX Client connected\nOPX support has been removed\nshowOPXDeprecationAlert()\nOPXDeprecationPhaseTwoLastCheckKey\nOPXDeprecationPhaseTwoSuppressNotificationKey<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The updater log tells you when it got you (<code>~\/Library\/Logs\/1Password\/com.agilebits.onepassword7-updater.log<\/code>):<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Sat Jul 29 14:58:39 2023| ... Extracting '...\/1Password-7.9.11-\u2026.zip'\nTue Oct  6 14:00:07 2026| ... Extracting '...\/1Password-7.10.4-\u2026.zip'<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Three years of nothing, then one update whose headline &#8220;New&#8221; item is removing a feature. sigh.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"last-working-versions\">Last working versions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>macOS: 1Password 7.9.11<\/strong> (last build without the kill switch, verified by actually diffing the helper binaries above). Notarized Developer ID, Team ID <code>2BUA8C4S2C<\/code>, <code>spctl<\/code> says accepted.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Official: <a href=\"https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11.zip\" rel=\"noopener\">1Password-7.9.11.zip<\/a> \/ <a href=\"https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11.pkg\" rel=\"noopener\">1Password-7.9.11.pkg<\/a><\/li><li>Wayback: <a href=\"https:\/\/web.archive.org\/web\/20261022141935\/https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11.zip\" rel=\"noopener\">zip<\/a> \/ <a href=\"https:\/\/web.archive.org\/web\/20261022141942\/https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11.pkg\" rel=\"noopener\">pkg<\/a> (or <a href=\"https:\/\/web.archive.org\/web\/*\/https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11*\" rel=\"noopener\">all snapshots<\/a>)<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Windows: 1Password 7.9.834<\/strong>, probably. Windows got its kill switch much earlier: <a href=\"https:\/\/www.1password.community\/1password-at-home-31\/1password-for-windows-version-7-9-835-disables-classic-extension-on-firefox-119-0-8550\" rel=\"noopener\">people on the 1Password forum<\/a> reported in Nov 2023 that 7.9.835 made the classic extension stop working in Chrome\/Edge\/Firefox on Windows, and rolling back to 7.9.834 fixed it. I can&#8217;t verify that myself (the Windows setup .exe is a 12MB bootstrapper that downloads the real payload), so ymmv.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Official: <a href=\"https:\/\/c.1password.com\/dist\/1P\/win6\/1PasswordSetup-7.9.834.exe\" rel=\"noopener\">1PasswordSetup-7.9.834.exe<\/a><\/li><li>Wayback: <a href=\"https:\/\/web.archive.org\/web\/20261022141949\/https:\/\/c.1password.com\/dist\/1P\/win6\/1PasswordSetup-7.9.834.exe\" rel=\"noopener\">1PasswordSetup-7.9.834.exe<\/a><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Checksums, so you can tell if whatever you downloaded is the real thing:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># sha256\n11b14910a2cf0e544e317e49f4a62491e5190545ed684236a295f51d722f30db  1Password-7.9.11.zip\nbf1919f5f4066feb7cb9013396e2f181a6fa36c56f5ca2ebac211191925132b8  1Password-7.9.11.pkg\n7b578e42ced2e8a36855dd0984668622a508ad82eb33257dc9b8f1eb586bdd77  1PasswordSetup-7.9.834.exe\n3d43ea28c46a1dac9cc645c5d9f4692cd1be009145ffe5260a910a2d9c89dd52  1PasswordSetup-7.9.835.exe\n840e237adf8bc5d429c69467d9afc0407114310faac3af06b80faab72c342fda  1PasswordSetup-7.9.836.exe<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"downgrade-to-7-9-11-on-macos\">Downgrade to 7.9.11 on macOS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Your vaults live in <code>~\/Library\/Group Containers\/2BUA8C4S2C.com.agilebits\/<\/code>, not in the app bundle, so swapping the .app is safe. Still, make a backup\/export first, obviously.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># 1. quit 1Password 7 completely (menu bar icon too)\nosascript -e 'quit app \"1Password 7\"'\npkill -f \"1Password Extension Helper\"\n\n# 2. get + verify\ncurl -LO https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11.zip\nshasum -a 256 1Password-7.9.11.zip    # 11b14910a2cf...\nditto -x -k 1Password-7.9.11.zip .\/op7911\nspctl -a -vv \".\/op7911\/1Password 7.app\"   # source=Notarized Developer ID, AgileBits Inc. (2BUA8C4S2C)\n\n# 3. swap\nmv \"\/Applications\/1Password 7.app\" ~\/Desktop\/1Password-7.10.4-backup.app\nmv \".\/op7911\/1Password 7.app\" \/Applications\/\nopen -a \"1Password 7\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then <strong>turn off automatic updates<\/strong> in 1Password 7 \u2192 Preferences \u2192 Updates, or it&#8217;ll just do it again. It&#8217;ll still show the &#8220;1Password Classic will stop working soon&#8221; alert now and then (that&#8217;s the &#8220;phase one&#8221; thing), harmless.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Obligatory: this is an unsupported, end-of-life password manager now. No more security fixes. I&#8217;m ok with that for my air-gapped stuff, you decide for yourself &#x1f605;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"porting-the-classic-extension-to-manifest-v3\">Porting the classic extension to Manifest V3<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Brave still runs the MV2 extension today, but Chromium has dropped MV2 and that won&#8217;t last forever, so I had Claude port it to MV3 while at it. Turns out it&#8217;s tiny: the content script only uses <code>runtime.sendMessage<\/code>\/<code>onMessage<\/code>, and the background script needs 4 changes. Copy <code>~\/Library\/Application Support\/BraveSoftware\/Brave-Browser\/Default\/Extensions\/aomjjhallfgjeglblehebfpbcfeobpgk\/4.7.5.90_0\/<\/code> somewhere (delete the <code>_metadata<\/code> folder) and:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. manifest.json<\/strong>: bump to v3, background becomes a service worker, <code>browser_action<\/code> \u2192 <code>action<\/code>, host patterns move to <code>host_permissions<\/code>, drop <code>webRequestBlocking<\/code> and <code>update_url<\/code>. Keep the <code>key<\/code> field! That&#8217;s what keeps the extension ID the same so the native messaging host manifest still allows it.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"manifest_version\": 3,\n  \"background\": { \"service_worker\": \"background.js\" },\n  \"action\": { \"default_icon\": { \"19\": \"assets\/toolbar.png\", \"38\": \"assets\/toolbar@2x.png\" }, \"default_title\": \"1Password\" },\n  \"permissions\": [ \"contextMenus\", \"nativeMessaging\", \"storage\", \"tabs\", \"webRequest\" ],\n  \"host_permissions\": [ \"http:\/\/*\/*\", \"https:\/\/*\/*\" ],\n  \"key\": \"...keep the original...\",\n  ...everything else unchanged...\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. background.js<\/strong> (new file), a shim because <code>global.min.js<\/code> expects <code>window<\/code> and <code>chrome.browserAction<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ MV3 service-worker shim for the 1Password classic (4.x) extension.\nself.window = self;\nchrome.browserAction = chrome.action;\nimportScripts('ext\/sjcl.js', 'global.min.js');<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. global.min.js<\/strong>, blocking webRequest redirects are gone in MV3. The <code>onepasswdfill=<\/code> URL handler returned <code>{redirectUrl}<\/code> from a blocking listener; make it a non-blocking listener that calls <code>chrome.tabs.update<\/code> instead:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ before\nreturn h=a.tabId,r.kb({itemUUID:k.uuid,vaultUUID:k.vaultUUID,url:k.url,nakedDomains:null,uuid:t.J(),context:null},a.tabId),{redirectUrl:k.url}},{urls:['*:\/\/*\/*onepasswdfill=*'],types:['main_frame']},['blocking']);\n\/\/ after\nh=a.tabId,r.kb({itemUUID:k.uuid,vaultUUID:k.vaultUUID,url:k.url,nakedDomains:null,uuid:t.J(),context:null},a.tabId),chrome.tabs.update(a.tabId,{url:k.url})},{urls:['*:\/\/*\/*onepasswdfill=*'],types:['main_frame']});<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. global.min.js<\/strong>, context menus in service workers need an <code>id<\/code> and can&#8217;t use <code>onclick<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ before\nchrome.contextMenus.removeAll();chrome.contextMenus.create({title:'1Password',contexts:['all'],onclick:function(a){(a=a.pageUrl)?r.ha('context-menu',a):F(function(a){r.ha('context-menu',\na)})}})\n\/\/ after\nchrome.contextMenus.removeAll(function(){chrome.contextMenus.create({id:'1password',title:'1Password',contexts:['all']})});chrome.contextMenus.onClicked.addListener(function(a){'1password'===a.menuItemId&amp;&amp;((a=a.pageUrl)?r.ha('context-menu',a):F(function(a){r.ha('context-menu',\na)}))})<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On my mac 1Password 7 had only written its native messaging host manifest for Chrome, Edge, Firefox and Arc, not for Brave, so copy it over:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cp \"$HOME\/Library\/Application Support\/Google\/Chrome\/NativeMessagingHosts\/2bua8c4s2c.com.agilebits.1password.json\" \\\n   \"$HOME\/Library\/Application Support\/BraveSoftware\/Brave-Browser\/NativeMessagingHosts\/\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Remove the original extension in <code>brave:\/\/extensions<\/code> (same ID, Brave won&#8217;t load both), enable developer mode, &#8220;Load unpacked&#8221;, point it at the folder. Service worker starts, <code>1Password version 4.7.5 loaded<\/code>, connects to the native host\u2026 and 7.10.4 hangs up with error 104. After downgrading to 7.9.11, same extension, same Brave 1.97:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[console.info] 1Password version 4.7.5 loaded @ Thu Oct 22 2026 16:55:40\n[console.info] [CHROME]: Established connection to 1Password: [object NativeMessagingConnection]\n1PasswordNativeMessageHost 70911000 [EXT_NMH:OPNMXPCConnection.swift] E connect() | Connection Established<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So yes: a 2019 Manifest V2 extension, 4 small patches, runs fine as MV3 on a 2026 Chromium. The only thing that was ever &#8220;broken&#8221; is the app refusing to talk to it &#x1f389;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prompt-for-your-coding-agent\">Prompt for your coding agent<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Too lazy to do the above by hand? Same here. Paste this into Claude Code \/ Codex \/ whatever runs on the machine and let it do the downgrade. It has everything baked in so the agent doesn&#8217;t need to re-discover any of this:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Fix the 1Password classic browser extension on this Mac. Context, already verified, don't re-investigate:\n\n- 1Password 7 for Mac auto-updated to 7.10.4 (changelog: \"Removes support for the 1Password Classic extension\"). Its native messaging helper now answers the classic extension with errorCode 104 \/ \"OPX support has been removed\". The unlisted 7.9.12 build has the same kill switch.\n- 7.9.11 is the last build that still works. It is NOT a browser \/ Manifest V2 problem, Brave\/Chromium still load the MV2 extension fine.\n- Official download (still live): https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11.zip\n  Wayback: https:\/\/web.archive.org\/web\/20261022141935\/https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11.zip\n  sha256: 11b14910a2cf0e544e317e49f4a62491e5190545ed684236a295f51d722f30db\n  Must be `spctl -a -vv` accepted, \"Notarized Developer ID\", AgileBits Inc. (2BUA8C4S2C).\n\nDo this:\n1. Check the installed version: defaults read \"\/Applications\/1Password 7.app\/Contents\/Info.plist\" CFBundleShortVersionString. If it's already &lt;= 7.9.11, skip to step 5.\n2. Download the zip, verify the sha256 and the signature\/notarization. Abort if either doesn't match.\n3. Quit 1Password 7 and its helper completely (osascript -e 'quit app \"1Password 7\"', pkill -f \"1Password Extension Helper\"), wait until no 1Password processes remain.\n4. Move the current \/Applications\/1Password 7.app to ~\/Desktop\/1Password-&lt;version>-backup.app (do not delete it), `ditto` the 7.9.11 bundle into \/Applications, strip quarantine, relaunch. Vault data lives in ~\/Library\/Group Containers\/2BUA8C4S2C.com.agilebits\/ and is untouched by swapping the .app.\n5. Tell me to turn off automatic updates in 1Password 7 -> Preferences -> Updates (you can't do that from the CLI). The \"1Password Classic will stop working soon\" alert is expected and harmless.\n6. Browser side: check which browsers are installed. The classic extension's native messaging host manifest is 2bua8c4s2c.com.agilebits.1password.json; 1Password 7 writes it for Chrome\/Edge\/Firefox\/Arc but NOT Brave. If Brave is used, copy it from \"~\/Library\/Application Support\/Google\/Chrome\/NativeMessagingHosts\/\" to \"~\/Library\/Application Support\/BraveSoftware\/Brave-Browser\/NativeMessagingHosts\/\".\n7. Verify: with the browser open and the classic extension installed (ID aomjjhallfgjeglblehebfpbcfeobpgk), the extension's background console should log \"Established connection to 1Password\".\n\nOptional, only if the browser refuses to load the MV2 extension: build a Manifest V3 port from the installed 4.7.5.90_0 folder with these 4 changes (keep the `key` field so the extension ID stays the same):\n  a. manifest.json: manifest_version 3; background -> {\"service_worker\":\"background.js\"}; browser_action -> action; move http:\/\/*\/* and https:\/\/*\/* into host_permissions; drop webRequestBlocking and update_url.\n  b. new background.js: self.window = self; chrome.browserAction = chrome.action; importScripts('ext\/sjcl.js','global.min.js');\n  c. global.min.js: the blocking webRequest.onBeforeRequest listener for *:\/\/*\/*onepasswdfill=* must become non-blocking and call chrome.tabs.update(a.tabId,{url:k.url}) instead of returning {redirectUrl:k.url}; remove the ['blocking'] argument.\n  d. global.min.js: chrome.contextMenus.create({title:'1Password',contexts:['all'],onclick:...}) -> give it id:'1password', drop onclick, and register the handler with chrome.contextMenus.onClicked.addListener (check menuItemId==='1password').\n  Load it unpacked after removing the original (same ID, the browser won't load both).\n\nReport what version was installed before, what's installed now, and the verification result. Don't publish or upload anything.<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Windows: swap the download for <a href=\"https:\/\/c.1password.com\/dist\/1P\/win6\/1PasswordSetup-7.9.834.exe\" rel=\"noopener\">1PasswordSetup-7.9.834.exe<\/a> (sha256 <code>7b578e42ced2e8a36855dd0984668622a508ad82eb33257dc9b8f1eb586bdd77<\/code>), same forum caveat as above.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"every-1password-7-build-ever\">Every 1Password 7 build ever<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">1Password still has full release histories with download links up, they&#8217;re just not linked from anywhere anymore:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Mac 7: <a href=\"https:\/\/app-updates.agilebits.com\/product_history\/OPM7\" rel=\"noopener\">product_history\/OPM7<\/a> (<a href=\"https:\/\/web.archive.org\/web\/20261022142055\/https:\/\/app-updates.agilebits.com\/product_history\/OPM7\" rel=\"noopener\">wayback<\/a>), 49 builds listed, 103 files on the CDN if you also probe for the .zip variants and the unlisted 7.9.7 \/ 7.9.12<\/li><li>Windows 7: <a href=\"https:\/\/app-updates.agilebits.com\/product_history\/OPW6\" rel=\"noopener\">product_history\/OPW6<\/a> (<a href=\"https:\/\/web.archive.org\/web\/20261022142113\/https:\/\/app-updates.agilebits.com\/product_history\/OPW6\" rel=\"noopener\">wayback<\/a>), 130 builds of 7.x<\/li><li>Classic extension: <a href=\"https:\/\/app-updates.agilebits.com\/product_history\/OPX4\" rel=\"noopener\">product_history\/OPX4<\/a> (download links removed, use the <a href=\"https:\/\/cln.io\/blog\/get-the-1password-classic-extension-backup-mirror\/\">old post<\/a>)<\/li><li>Other product codes that still resolve: OPM3, OPM4, OPM8, OPW4, OPW8, CLI, CLI2, OPB<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Quick and dirty way to pull every link from one of those pages:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">curl -s https:\/\/app-updates.agilebits.com\/product_history\/OPM7 \\\n  | grep -oE 'href=\"[^\"]+\\.(zip|pkg|exe)\"' | sed 's\/^href=\"\/\/;s\/\"$\/\/' | sort -u<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-elements-1 wp-block-paragraph\" style=\"color:#9ca3af;font-size:14px\">This post was written with the help of Claude (Fable 5.1), Anthropic&#8217;s AI assistant, which also did the binary spelunking and the MV3 port.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>My 1Password classic extension in Brave just stopped working. First guess: Brave\/Chromium finally pulled the plug on Manifest V2 extensions (the classic 1Password extension is MV2 from 2019, see the old post). Nope. Brave still [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2252,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,58],"tags":[],"class_list":["post-2243","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it","category-miscellaneous"],"_links":{"self":[{"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/posts\/2243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/comments?post=2243"}],"version-history":[{"count":9,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/posts\/2243\/revisions"}],"predecessor-version":[{"id":2254,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/posts\/2243\/revisions\/2254"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/media\/2252"}],"wp:attachment":[{"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/media?parent=2243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/categories?post=2243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/tags?post=2243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}