The last Manifest V2 extension left the store

By Mark 11 min read 0 views

😁 Hello, super humans! The Chrome Web Store finished a migration on Monday that has been coming since the Manifest V3 proposal first landed, and the thing worth noticing is not that uBlock Origin is gone. It is that the decision about whether a network request gets blocked has permanently moved out of extension code and into the browser. That is an architecture change wearing an ad-blocking costume, so let’s look at the actual mechanism.

πŸ“° Quick Signals

  • 🧠 AI: METR disclosed two 2026 security incidents, including a stolen inference API key that attackers used for three weeks to burn roughly 600,000 dollars of model credits before anyone noticed.
  • πŸ€– Robotics: Skild AI unveiled S1, a robot foundation model it says supports in-context learning, so a robot picks up a new task from watching a video of it rather than from a fine-tuning run.
  • πŸ’» Programming: AWS closed its acquisition of DuckLabs on 31 August, with all 30 people in Amsterdam joining on 1 September, while DuckDB itself stays MIT-licensed under the nonprofit DuckDB Foundation.
  • ⚑ Electronics: Qualcomm’s Dragonwing Q-2390 and IQ-2390 pair one Cortex-A78 with three A55 cores, an optional SiFive E61 RISC-V real-time core and a 1.1 TOPS Hexagon NPU for consumer and industrial AIoT.
  • πŸ“‘ Telecom: AT&T sued Charter over the phrase “fiber-powered” for broadband delivered on hybrid fibre-coax, which turns a marketing argument about the last hundred metres into a courtroom one.

πŸ” The Big Story: Chrome finished the Manifest V2 phase-out, and the blocking decision moved into the browser

If you write extensions, run a Chromium browser, or just assumed your content blocker would keep working, Monday was the day the last escape hatch closed. On 31 August Google removed every remaining Manifest V2 extension from the Chrome Web Store, uBlock Origin among them.

What happened: Google reached the final milestone on its MV2 deprecation timeline and pulled all remaining MV2 listings, notifying the affected developers. Copies already installed on Chrome 138 or earlier stay installed, but they receive no further updates and cannot be reinstalled from the store once removed. The Chrome Web Store is the extension marketplace for essentially every Chromium browser, so the effect reaches past Chrome: Brave still supports MV2 in its engine, yet its users lost the ability to discover or install those extensions through the store. Brave’s answer was to host four of them on its own backend, namely AdGuard, uBlock Origin, uMatrix and NoScript.

The details: the interesting part is not the delisting, it is what MV3 changed underneath. Under MV2 an extension registered a blocking webRequest listener and a persistent background page ran arbitrary JavaScript on every request to decide, at that moment, whether to let it through. That is enormous power, and it is also why a good blocker could reason about a request’s full context. MV3 replaces that with declarativeNetRequest: the extension registers rules ahead of time, the browser’s own matching engine evaluates them, and the extension never sees the request. Background pages become ephemeral service workers that can be shut down between events. The trade is real in both directions. The browser gets a blocking path it can reason about, and rule evaluation stops being a per-request trip into extension code. The extension gets a budget instead of a program: Chrome’s reference caps dynamic and session rules at 5,000 each, and static rules live in bundled rulesets that can only be enabled or disabled wholesale, not edited one at a time.

flowchart LR
  subgraph MV2["Manifest V2"]
    R1[Network request] --> BG[Persistent background page]
    BG -->|arbitrary JS decides per request| D1{Block or allow}
  end
  subgraph MV3["Manifest V3"]
    R2[Network request] --> DNR[declarativeNetRequest engine<br/>inside the browser]
    DNR -->|rules registered in advance| D2{Block or allow}
    SW[Ephemeral service worker] -.->|may add or swap rules only| DNR
  end

Important

Our take: Google’s stated case for MV3 is sound, and I believe it. An extension with blocking webRequest can read and rewrite every request you make, and “just trust the extension author” was never a great security model at store scale. What bothers me is the shape of the outcome, not the reasoning. A capability that used to be open to anyone who could write JavaScript is now a fixed budget of declarative rules, and the party setting that budget also sells ads. Even with the best intentions, that is a conflict you cannot design away with a rule count. The practical lesson for builders is broader than ad blocking: if your product depends on a platform capability rather than on a contract, you are one deprecation timeline away from a rewrite. Go audit what your tooling actually needs from the browser, and know today which parts survive the declarative version.

πŸ—žοΈ More News

🧠 AI

  • OpenAI said it is preparing Astra, the first model it has designated as reaching a critical cybersecurity threshold, meaning it judges the model capable of finding and exploiting security gaps; access to the strongest capabilities goes to a small group of early testers first.
  • OpenAI connected ChatGPT for Healthcare to Epic’s electronic health record, strictly read-only so nothing can be written back, plus a Healthcare Public Data plug-in wired to nine official datasets including PubMed and DailyMed.
  • Google shipped agentic video understanding across Gemini 3.7 Flash, 3.6 Flash and 3.5 Flash-Lite, letting the model choose which segments to look at instead of sampling frames at a fixed rate, which it measures at up to 88 percent fewer tokens and up to 66 percent lower cost.
  • Anthropic introduced Enterprise Frontier Safeguards, which keeps monitoring data in the customer’s own cloud account rather than Anthropic’s and runs automated misuse detection over a rolling traffic window without routine human review.
  • Claude Fable 5.1 went generally available on 1 September at the same list price as Fable 5, with cache reads dropping to 0.25 dollars per million tokens, which changes the economics of long-lived agent sessions more than the headline benchmark does.
  • A new arXiv paper makes LLMs execute MD5 through a long chain of dependent tool calls, which is a clean way to measure the thing agent benchmarks usually hide: when every step depends on the last, per-step accuracy compounds badly.
  • OpenAgentFlow proposes system-wide safety boundaries for mixed fleets of agents, planners and controllers, which is exactly the gap yesterday’s agent-collective story exposed.
  • Nvidia followed record quarterly numbers by pushing more billions into the companies that buy its silicon, a circularity worth tracking as it becomes a bigger share of reported AI demand.

πŸ€– Robotics

  • John Deere launched JD, an AI layer inside its Operations Center that turns years of accumulated field data into recommendations, which is the least photogenic and most commercially real form of farm autonomy.
  • Locus Robotics folded Nexera’s soft picking technology into NeuraGrasp, which now handles porous polybags and cloth, the two item classes that quietly break most warehouse manipulation demos.
  • An argument doing the rounds says embodied AI is hitting an edge compute wall that better planners will not fix, and that the constraint is the mathematics of the planning problem rather than the silicon under it.
  • HowToRobot and Robotics Australia Group are building a shared platform to help Australian businesses scope automation projects and find local integrators, which is the unglamorous market plumbing adoption actually waits on.

πŸ’» Programming

  • The Arch Linux September ISO ships kernel 7.2.2, GCC 16.2.1, glibc 2.44 and Python 3.14.7, which makes it the cheapest way to see what your toolchain does against next year’s defaults.
  • Mozilla added native ad and tracker blocking to Firefox on iOS, no extension required, which is the same capability arriving as a browser feature on the one platform where extensions were never an option.
  • Linux From Scratch 13.1 landed with GCC 16.2, Binutils 2.47, Glibc 2.44 and Linux 7.1.8 across 46 updated or added packages, still the best way to learn what a distribution is actually doing for you.
  • KDE Linux now takes automatic Btrfs snapshots with per-file rollback from Dolphin, and reports itself at 85 percent of its beta goal.
  • Audacity 3.7.9 adds FFmpeg 9 support and fixes project corruption and data loss bugs, which is the kind of release note you read before, not after, a long recording session.

⚑ Electronics

  • D-Robotics RDK S100P pitches itself against the Jetson Orin NX 16GB with six Cortex-A78AE cores, a 128 TOPS INT8 BPU and four Cortex-R52+ cores that can run two in lockstep and two split, so vision and hard real-time control share one board.
  • ArmSoM’s Sige6 puts an Allwinner A733 on a credit-card board with up to 16GB LPDDR5 and up to 128GB of soldered eMMC, which is an unusual amount of onboard flash for this class and removes the microSD card as a reliability risk.
  • ARK’s Just A Pi is an NDAA-compliant Raspberry Pi CM5 carrier roughly the size of the module itself, with a built-in 100 Mbps Ethernet switch and two JST-GH ports, aimed at drones and robots where connector choice matters more than port count.
  • Circuit Valley’s CHC5 is a modular camera system built on a Zynq-7020 core board with swappable USB, HDMI and PoE Ethernet interface boards, which is a rare chance to see the FPGA side of a camera pipeline without designing the board yourself.
  • Taiwan’s Semicon Network Summit in Taipei organised itself around four themes worth noting as a signal of where the money is going: advanced materials, cross-border silicon photonics, chips for AI robotics, and semiconductor cybersecurity resilience.

πŸ“‘ Telecom

  • Charter’s chief financial officer Jessica Fischer leaves on 15 October to join a newly formed Google and Blackstone AI data centre joint venture built around Google’s Tensor Processing Units, which is a fairly direct statement about where telecom finance talent now sees growth.
  • Japan secured an ITU-T standard for all-photonics networks, where the signal stays optical end to end instead of being converted back to electronics at every hop, which is where a lot of the latency and power in a long path currently goes.
  • Smaller US broadband operators are rethinking how they add mobile, with the economics of MVNO deals and offload shifting under them again.
  • UK businesses largely cannot tell who is at fault when connectivity drops, which is what happens when the path from desk to application crosses four providers and none of them owns the end-to-end measurement.

πŸ‘¨β€πŸ’» Code Corner

Your Chrome profile still holds every extension you ever installed, and some of them are now frozen software that will never update again. This walks the profile’s extension directory and prints the ones still declaring manifest_version 2.

#!/usr/bin/env python3
"""List installed Chrome extensions still on Manifest V2."""
import json
import pathlib

# Linux default. macOS: ~/Library/Application Support/Google/Chrome/Default/Extensions
# Windows: %LOCALAPPDATA%/Google/Chrome/User Data/Default/Extensions
root = pathlib.Path.home() / ".config/google-chrome/Default/Extensions"

for manifest in sorted(root.glob("*/*/manifest.json")):
    try:
        meta = json.loads(manifest.read_text(encoding="utf-8"))
    except (OSError, json.JSONDecodeError):
        continue
    if meta.get("manifest_version") == 2:
        ext_id = manifest.parts[-3]
        name = meta.get("name", ext_id)
        print(f"MV2  {name[:38]:<38}  v{meta.get('version', '?'):<10}  {ext_id}")

Anything it prints is an extension that will keep working until it does not, and cannot be reinstalled if you ever wipe the profile.

Tip

Two gotchas. First, localised extensions store "name": "__MSG_appName__" in the manifest and put the real string in _locales/<lang>/messages.json, so expect placeholders in the output and resolve them from there if you want readable names. Second, Brave, Edge, Vivaldi and Opera each keep their own profile tree, so point root at the right one: Brave on Linux lives under ~/.config/BraveSoftware/Brave-Browser/Default/Extensions.

🧰 Toolbox

  • Brave’s hosted MV2 extensions: AdGuard, uBlock Origin, uMatrix and NoScript served from Brave’s own backend now that the Chrome Web Store no longer lists them.
  • DuckDB: the in-process analytical database at the centre of today’s AWS news, still MIT, still a single dependency you can query Parquet with from a laptop.
  • uutils Coreutils: the Rust reimplementation of GNU coreutils, now past 95 percent GNU compatibility with faster cp and join and much better error messages.
  • Kdenlive 26.08: track reordering finally landed, alongside multi-clip speed controls, automatic audio track creation and eleven crash fixes.
  • Bazzite 44: an image-based Fedora Atomic gaming desktop on kernel 7.2, useful even if you do not game as a working example of an immutable OS you can actually live in.
  • Makera Z1: an enclosed desktop CNC with quick tool change, auto probing and a built-in camera, reviewed in enough detail to judge whether it fits your bench.

🎬 Demo Watch (rotating)

Visko came out of stealth with Orbis, a live world model that streams 4K at 24 frames per second, accepts user intervention while it is running, and holds together over hour-scale generation.

What makes this hard is not the resolution, it is the last part. Autoregressive video models drift: each frame is conditioned on the ones before it, small errors accumulate, and after a few thousand frames the scene has quietly become a different scene. Most impressive demos are short for exactly that reason. Sustaining an hour while remaining steerable means the model is carrying real state rather than just extrapolating pixels, and the claim to watch is whether the world stays consistent when you interrupt it, not whether any single frame looks good.

Treat the numbers as the company’s own until someone runs it against a held-out scene for an hour and shows the ending. The interesting result would be a boring one: come back after fifty minutes and the room is still the same room.

πŸ“š From the Blog

πŸ˜€ The Bot Says…

Years of deprecation deadlines, several extensions of those deadlines, and a browser architecture rewritten around the idea that extension code cannot be trusted near your network requests. The migration is complete. Chrome’s own reference now caps you at 5,000 dynamic rules. Somewhere in that number is the most carefully negotiated compromise on the modern web, and almost nobody will ever read it.


That’s all for today! Run the Code Corner script and reply with how many MV2 extensions are still sitting in your profile, and whether any of them do something you cannot replace.