Manifest V3 generator

Manifest V3 tabs permission

The tabs permission exposes the url, title, favIconUrl and pendingUrl fields of every tab through chrome.tabs — the fields needed to list, search, group or deduplicate tabs across windows. Most of chrome.tabs works without it: creating, moving, closing and querying tabs by index need no permission at all.

It carries the install warning 'Read your browsing history', because a list of every open URL is exactly that. Declare it only when the extension genuinely needs URLs or titles of tabs the user did not click it on; for the current tab on demand, activeTab is free of the warning.

Tabs at a glance

Manifest key
"permissions": ["tabs"]
What it enables
Read the URL and title of every tab, not just the active one. Needed to list or search across tabs.
Install warning
"Read your browsing history"
Cross-browser API
browser.tabs via webextension-polyfill

The manifest that declares it

Manifest with this permission

manifest.json
{
  "manifest_version": 3,
  "name": "my-extension",
  "version": "0.1.0",
  "action": {
    "default_popup": "src/popup.html"
  },
  "background": {
    "service_worker": "src/background.ts",
    "type": "module"
  },
  "permissions": [
    "tabs"
  ]
}

Installing this manifest shows the warning "Read your browsing history".

tabs, answered

The longer version is in the guide Manifest V3 permissions: a practical guide.

What does the tabs permission do in Manifest V3?
Read the URL and title of every tab, not just the active one. Needed to list or search across tabs. It is declared as the string "tabs" in the manifest's permissions array; the browser grants it at install time, and the extension's service worker, popup and other pages can then call the matching API.
Does tabs show an install warning?
Yes. Chrome shows "Read your browsing history" before the extension installs and again if the permission is added in an update, which disables the extension until the user accepts. That sentence is the most expensive text an extension ever shows, so declare tabs only when the feature cannot be built without it.
Can I request tabs at runtime instead?
Yes. Move it from permissions to optional_permissions and call browser.permissions.request({ permissions: ["tabs"] }) from a user gesture when the feature is first used. The manifest generator emits the install-time form; optional grants are an edit to that JSON.

Build the whole manifest

The Chrome extension manifest generator declares every permission with its install warning shown up front, adds the surfaces the browser opens, and validates content-script match patterns before they can reject the whole extension. In the Nodlume workspace the same selection becomes a complete Manifest V3 project with a service worker and a Vite build.

Open the generator

Other Manifest V3 permissions

We'd like to use Google cookies to understand how Nodlume is used and to measure our advertising. Nothing loads until you choose, and declining does not affect anything in the app.