Check this page often to learn about changes to Chrome extensions, extensions documentation, or related policy or other changes. You'll find other notices posted on the [Chrome Extensions Mailing List](https://groups.google.com/a/chromium.org/g/chromium-extensions). The [Chrome schedule](https://chromiumdash.appspot.com/schedule) lists stable and beta release dates.

## Chrome 153: New browser.publicSuffix API

Posted on August 25, 2026

Starting in Chrome 153, `browser.publicSuffix` is available to query the public
suffix of a URL. Read more in the [API reference](https://developer.chrome.com/docs/extensions/reference/api/publicSuffix).

## Chrome 153: Default pinning for extensions

Posted on August 3, 2026

Starting in Chrome 153, we are experimenting with pinning an extension's action
icon to the browser's top-level toolbar by default. This behavior is live for
some users in Chrome Canary.

## Chrome 150: Tab strip context menus

Posted on June 10, 2026

Starting in Chrome 150, `chrome.contextMenus` supports the `"tab"` context, letting you add items to the tab strip right-click menu. Items receive all selected tabs when multiple are selected. You can learn more on the [mailing list](https://groups.google.com/a/chromium.org/g/chromium-extensions/c/RReE8dtY4Ok/m/hOQaYDNYAwAJ).

## Chrome 150: Alarm name length limit

Posted on June 10, 2026

Starting in Chrome 150, `chrome.alarms.create()` enforces a 1024-byte limit on alarm names. Passing a longer name throws a `TypeError`. You can learn more on the [mailing list](https://groups.google.com/a/chromium.org/g/chromium-extensions/c/ZQ0VhnottAw/m/qDFUwMv2AgAJ).

## Chrome 149: Synchronous UserScript validation

Posted on May 20, 2026

Starting in Chrome 149, `chrome.userScripts.execute()` validates script syntax synchronously and returns diagnostics on failure. See [chrome.userScripts.execute()](https://developer.chrome.com/docs/extensions/reference/api/userScripts#method-execute) for details.

## Chrome 149: DevTools API promise support

Posted on May 20, 2026

Starting in Chrome 149, `chrome.devtools.inspectedWindow.eval()`, `inspectedWindow.getResources()`, and `network.getHAR()` return promises. Callbacks continue to be supported for backwards compatibility. See [chrome.devtools.inspectedWindow](https://developer.chrome.com/docs/extensions/reference/api/devtools/inspectedWindow) for details.

## Blog post: Empower your team with expanded roles in the Developer Dashboard

Posted on April 30, 2026

You can now invite members directly to your Chrome Web Store publisher account
and assign one of four distinct roles. You no longer need to create a separate
publisher or add members to a Google Group. This can be done at no cost, without
paying the $5 registration fee. Learn more in the [blog post](https://developer.chrome.com/blog/cws-role-expansion-developer-dashboard).

## Blog post: Unlock Structured Clone for Chrome Extension Messaging

Posted on April 22, 2026

Starting in Chrome 148, you can opt-in to use the [structured clone algorithm](https://developer.mozilla.org/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)
for message serialization in your extension. Learn more in the [blog post](https://developer.chrome.com/blog/structured-clone-messaging).

## Blog post: Chrome Web Store: A smarter, faster appeals process

Posted on April 8, 2026

Appeal a Chrome Web Store policy enforcement directly from the Chrome Web Store Developer Dashboard. Learn about the [new appeals process](https://developer.chrome.com/blog/cws-new-appeals-process).

## Chrome 148: The browser namespace

Posted on May 8, 2026

All Chrome Extension APIs are now available under the `browser` namespace as a cross-browser alternative to the `chrome` namespace, starting in Chrome 148. See [The browser namespace](https://developer.chrome.com/docs/extensions/develop/concepts/browser-namespace) for adoption guidance.

## Blog post: Publish to external organizations

Posted on February 20, 2026

You can now publish your extensions privately to external organizations that approve them. Learn how to [publish to external organizations](https://developer.chrome.com/blog/cws-new-enterprise-publishing-option).

## Video: How to know if permissions are safe to request in your Chrome Extension

Posted on January 14, 2026

Learn about how adding a new permission to your extension is presented to users in our [latest video](https://www.youtube.com/watch?v=gO0TRIYO5v4).

## Video: Everything that happened with Chrome Extensions in 2025

Posted on December 29, 2025

Oliver wraps up 2025 with a look at everything that launched this year - [watch it now](https://www.youtube.com/watch?v=nOfyMlIu4jc).

## Video: Can you make a cross-browser Chrome Extension?

Posted on December 12, 2025

Find out about how to build a cross-browser extension in our [latest video](https://www.youtube.com/watch?v=PW2u2IZWjtk).

## Video: How can you keep API keys safe in a Chrome Extension?

Posted on December 3, 2025

Learn how to keep API keys safe in our [latest video](https://www.youtube.com/watch?v=pl4pz4nWa3w).

## Video: Answering your questions about Chrome Web Store discoverability

Posted on November 25, 2025

We answer your questions about discovery in the Chrome Web Store in our [latest video](https://www.youtube.com/watch?v=WkhlIiqDfRI).

## Chrome 140: New sidePanel.getLayout() API

Posted on September 10, 2025

Starting in Chrome 140, use the new [`sidePanel.getLayout()`](https://developer.chrome.com/docs/extensions/reference/api/sidePanel#method-getLayout) API to determine if the side panel is positioned on the left or right of the screen. This is particularly useful if you support RTL languages where the default for new Chrome installations is different.

## New guide: the extensions update lifecycle

Posted on Sept 09, 2025

We published a [new guide explaining how extensions are updated in Chrome](https://developer.chrome.com/docs/extensions/develop/concepts/extensions-update-lifecycle).

## Chrome 139: Removing `--extensions-on-chrome-urls` and `--disable-extensions-except` flags in Chrome branded builds

Posted on June 30, 2025

Starting in Chrome 139, the --extensions-on-chrome-urls and --disable-extensions-except command-line flags will be removed in official Chrome branded builds. Learn more on the [mailing list](https://groups.google.com/a/chromium.org/g/chromium-extensions/c/FxMU1TvxWWg/m/daZVTYNlBQAJ).

## Chrome 138: Changes to the new tab page

Posted on June 17, 2025

Starting in Chrome 138, we are updating the new tab page UI with a new footer.
You can learn more on the [mailing list](https://groups.google.com/a/chromium.org/g/chromium-extensions/c/DNj1B3vywr0/m/X5nOP0gPAQAJ).

## Blog post: Update your extensions ahead of upcoming bookmark changes

Posted on June 17, 2025

We're making some changes to bookmarks sync that may impact your extension. Learn more in the [blog post](https://developer.chrome.com/blog/bookmarks-sync-changes).

## Blog post: What's happening in Chrome Extensions, June 2025

Posted on June 6, 2025

We've been busy, with Google I﻿/﻿O and several new features in Chrome and the Chrome Web Store. Get up to speed in [What's happening in Chrome Extensions, June 2025](https://developer.chrome.com/blog/extension-news-june-2025)!

## Video: Whack-a-Mole in your browser - Is it possible!?

Posted on April 2, 2025

Discover how you can build a game in the browser in our [latest video](https://www.youtube.com/watch?v=lUHN48dhACY).

## Video: Chrome's new extensions menu explained

Posted on March 26, 2025

Learn about the experimental new extensions menu in our latest video, [Chrome's new extensions menu explained](https://www.youtube.com/watch?v=IpdvLsVg9IM).

## Video: Extensions are Neat!

Posted on March 21, 2025

Discover how you can get started with extension development in [Extensions are Neat episode 1](https://www.youtube.com/watch?v=wpGhIoGiDok), and just how flexible Chrome customization is with [episode 2](https://www.youtube.com/watch?v=r2qpopEQ_SI)!

## Chrome 135: New userScripts.execute() API

Posted on March 17, 2025

Starting in Chrome 135, a new [`userScripts.execute()`](https://developer.chrome.com/docs/extensions/reference/api/userScripts#method-execute) method is available in the `chrome.userScripts` API. You can use this to inject a user script once at an arbitrary time instead of needing to register it permanently.

## Chrome 132: View and edit extension storage in DevTools

Posted on January 14, 2025

Starting in Chrome 132, you can view and edit data stored using the [`chrome.storage`](https://developer.chrome.com/docs/extensions/reference/api/storage) API in DevTools. To learn more, see the new [View and edit extension storage](https://developer.chrome.com/docs/devtools/storage/extensionstorage) page in the DevTools documentation.

## Blog post: New extensions menu

Posted on January 2, 2025

At Google I﻿/﻿O 2024, we shared some early designs for upcoming changes to the extensions menu, which give users more control over the sites extensions can access. We're going to start testing these changes soon, beginning with a small percentage of users in Canary and with the hope to roll them out more widely in the future.

We're also introducing the `chrome.permissions.addHostAccessRequest()` API.

Read more in our [blog post](https://developer.chrome.com/blog/new-extensions-menu-testing).

## Chrome 132: New frozen property in Tabs API

Posted on November 19, 2024

Starting in Chrome 132, the [`frozen`](https://developer.chrome.com/docs/extensions/reference/api/tabs#property-Tab-frozen) property in the Tabs API indicates if a tab has been frozen by the browser. Messages sent to frozen tabs will be queued and handled when the tab is unfrozen.

## The Prompt API in Chrome Extensions

Posted on November 12, 2024

The [Prompt API for Extensions](https://developer.chrome.com/docs/extensions/ai/prompt-api) is now available in an origin trial, so you can build Chrome Extensions that use a foundation model, in the browser.

Join the Prompt API origin trial, running in Chrome 131 to 136, and share your feedback. Your input can directly impact how we build and implement future versions of this API, and all built-in AI APIs.

## Blog post: What's happening in Chrome Extensions, October 2024

Posted on October 17, 2024

It's time for another round up of what's happening in Chrome Extensions: we have exciting updates on AI integration, new APIs, events, and videos. Read all about it in [What's happening in Chrome Extensions October edition](https://developer.chrome.com/blog/extension-news-october-2024)!

## Join the Built-in AI Challenge

Posted on October 17, 2024

Chrome has launched the Built-in AI Challenge: You are invited to create innovative web applications and Chrome Extensions, using [Chrome's integrated AI models and APIs](https://developer.chrome.com/docs/ai/built-in), and have a chance to win prizes which total $65,000 USD.

Sign up and get more information on the [Built-in AI Challenge website](https://googlechromeai.devpost.com/?linkId=11071015). We can't wait to see what you create when you infuse the web with AI!

## Chrome 130: action.onUserSettingsChanged

Posted on October 7, 2024

Starting in Chrome 130, the [action.onUserSettingsChanged](https://developer.chrome.com/docs/extensions/reference/api/action#event-onUserSettingsChanged)
event is available. This follows a [proposal](https://github.com/w3c/webextensions/blob/main/proposals/action-on-user-settings-changed-api.md) in the WebExtensions Community Group. Thanks to Microsoft for the contribution to Chromium.

## Chrome 130: StorageArea.getKeys()

Posted on September 30, 2024

Starting in Chrome 130, the [getKeys()](https://developer.chrome.com/docs/extensions/reference/api/storage#method-StorageArea-getKeys)
method is available on the StorageArea interface used by the `chrome.storage`
API. This follows a [proposal](https://github.com/w3c/webextensions/issues/601) in the WebExtensions Community Group.

## Chrome 128: Response header matching in Declarative Net Request

Posted on August 22, 2024

Starting in Chrome 128, we are adding support for response header matching in the Declarative Net Request API. This was a common request, particularly for matching the Content-Type header, and we [designed a suitable API](https://github.com/w3c/webextensions/issues/460) together with the WebExtensions Community Group.

We've updated our API reference to include the new [`responseHeaders`](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest#property-RuleCondition-responseHeaders) and [`excludedResponseHeaders`](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest#property-RuleCondition-excludedResponseHeaders) fields. You can use these to check for the existence of and value of a given header.

As part of this update, we've added a new [rule evaluation](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest#implementation-matching-algorithm) section to our documentation which explains how rules are matched. For header matching in particular, rules can only run once response headers have been received, so they are applied at a later stage than other rules. This means the request does reach the server before being blocked or redirected.

## Video: What are content scripts?

Posted on August 19, 2024

Learn about content scripts in Chrome Extensions, including how to register CSS and JavaScript to run on a particular page. [Check out the full video](https://www.youtube.com/watch?v=ezhJezGX5ak).

## Important policy updates

Posted on July 17, 2024

Chrome Web Store team has published a series of updates to the [Developer Program Policies](https://developer.chrome.com/docs/webstore/program-policies) page designed to encourage the development of high quality products, prevent deceptive behavior, and ensure informed user consent. Rebecca Soares, the Chrome Web Store policy manager, has summarized all the updates in [Chrome Extensions: Important policy updates blog post](https://developer.chrome.com/blog/cws-policy-updates-2024).

## Blog post: What's happening in Chrome Extensions, July 2024

Posted on July 17, 2024

In the past three months we've rolled out several significant updates and new features, including the start of Manifest V2 phase out. Get up to speed in [What's happening in Chrome Extensions July edition](https://developer.chrome.com/blog/extension-news-july-2024)!

## Video: What is a Remote Hosted Code?

Posted on July 4, 2024

Patrick from the Chrome Extensions team explains the concept of Remotely Hosted Code (RHC) in Chrome Extensions. Learn why RHC is no longer allowed, how to detect it, and what to do if your extension needs to be updated. [Check out the full video](https://www.youtube.com/watch?v=aYxzHUX_elo).

## Chrome 127: New action.openPopup API

Posted on June 19, 2024

Beginning in Chrome 127, the [`action.openPopup`](https://developer.chrome.com/docs/extensions/reference/api/action#method-openPopup)
API is available to all extensions. Previously, it was only available in Canary
or to extensions installed by a policy.

## Video: Trust \& Safety team interview

Posted on June 6, 2024

The Chrome Extensions DevRel team sat down with the Trust \& Safety team that leads review in the Chrome Web Store to ask your questions. [Check out the full video](https://www.youtube.com/watch?v=BHIZUT_m7AM).

## Blog post: Manifest V2 phase-out begins

Posted on June 6, 2024

Starting on June 3 on the Chrome Beta, Dev and Canary channels, if users still have Manifest V2 extensions installed, some will start to see a warning banner when visiting their extension management page - chrome://extensions - informing them that some (Manifest V2) extensions they have installed will soon no longer be supported. Read more in the [official announcement](https://blog.chromium.org/2024/05/manifest-v2-phase-out-begins.html)

## Updates to Side Panel UI

Posted on May 24, 2024

We recently made some changes to the Side Panel UI, including adding a pin icon
and removing the global side panel icon. Read more [in the PSA](https://groups.google.com/a/chromium.org/g/chromium-extensions/c/5PQyHPYQuXY/m/ZbsHqqTlAgAJ) and see our updated [documentation](https://developer.chrome.com/docs/extensions/reference/api/sidePanel) and [samples](https://developer.chrome.com/docs/extensions/samples?text=sidePanel).

## Blog post: Chrome Extensions at Google I﻿/﻿O 2024

Posted on May 22, 2024

Another Google I﻿/﻿O is behind us and we have covered all the exciting extensions updates! Head over to YouTube to [check out the full video](https://www.youtube.com/watch?v=hvxOW21na48) and read [our blog post](https://developer.chrome.com/blog/extensions-io-24) for some of the highlights.

## Skip review for eligible Declarative Net Request changes

Posted on May 21, 2024

The Chrome Web Store now lets you skip review for eligible changes when using
the Declarative Net Request API. Learn more about eligibility and how to opt-in
in the [Chrome Web Store documentation](https://developer.chrome.com/docs/webstore/skip-review).

## deployPercentage available in the Chrome Web Store API

Posted on April 30, 2024

We recently updated our Chrome Web Store API documentation to include information about `deployPercentage`, which lets you assign a percentage of a partial rollout deployment. [Learn about `deployPercentage`](https://developer.chrome.com/docs/webstore/api#parameters-publish).

## Chrome 126: Origin Trials in extensions

Posted on April 24, 2024

Chrome 126 introduces a new manifest.json field - `trial_tokens`, allowing you to opt into Origin Trials and Deprecation Trials across all extension surfaces. Read the [guide](https://developer.chrome.com/docs/web-platform/origin-trials#extensions) for more information.

## Blog post: What's happening in Chrome Extensions-April 2024

Posted on April 19, 2024

We've published a new edition of [What's Happening in Chrome Extensions](https://developer.chrome.com/blog/extension-news-april-2024). The post discusses what the extension team has been working on for the past few months. This includes: Version Rollback in the Chrome Web Store, better Firebase Auth support and more API launches and updates.

## Version rollbacks in the Chrome Web Store Developer Dashboard

Posted on April 11, 2024

Roll back your extension to the previous published version in the Chrome Web Store---without additional review! Read the [blog post](https://developer.chrome.com/blog/chrome-webstore-rollback) and [documentation](https://developer.chrome.com/docs/webstore/rollback) for more information.

## Chrome 124: Advanced documentScan API

Posted on March 28, 2024

An advanced [`documentScan` API](https://developer.chrome.com/docs/extensions/reference/api/documentScan)
is now available on ChromeOS to discover and retrieve images from attached
document scanners.

## Chrome 124: WebGPU support in Service Workers

Posted on March 21, 2024

Since Chrome 124, service workers support [WebGPU](https://webgpu.dev). For a
quick start, checkout the [WebGPU extension sample](https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.webgpu/).

## Chrome 123: The Events API supports filtering by CIDR blocks

Posted on March 8, 2024

The Events API now supports [filtering](https://developer.chrome.com/docs/extensions/reference/api/events#filtered)
by Classless Inter-Domain Routing (CIDR) blocks. A CIDR block is a collection of
IP addresses that share a network prefix and the same number of bits. Previously,
a developer needing to filter multiple IP addresses needed to configure a filter
rule for each of the addresses in the block range. Now when an extension calls
`addListener()`, a passed in rule means the event handler will only be called
when the host part of a URL is an IP address and is contained in any of the CIDR
blocks specified in an array.

## Chrome Web Store: Updates to extension name length requirements

Posted on February 29, 2024

On the Chrome Web Store, there is now a universal limit of 75 characters for an
extension's [`"name"`](https://developer.chrome.com/docs/extensions/reference/manifest/name) field in the
manifest.json. Previously, the limit for English was 45 characters, and there
was no restriction to the `"name"` field in other locales.

This was originally intended to allow for cultural and language differences that
may not be able to be captured in the same number of characters. Unfortunately,
this feature was abused by a small number of developers to spam the store. As a
result we are introducing a new universal limit, an increase to 75 characters.
This limit covers nearly all extensions on the store today, so it is likely no
action will be needed by you as a result of this change. If you try to upload an
extension that has a name longer than the maximum limit, then the upload will be
blocked by the store.

## Blog post: eyeo's journey to testing service worker suspension

Posted on February 27, 2024

In this post by [eyeo's](https://eyeo.com/) Extension Engine team, we explore
the problem of testing extension service workers. In Manifest V2, extensions
lived in a background page, which were awake throughout the extension lifecycle.
Manifest V3 uses service workers instead, and service workers, by design,
conserve resources by shutting down when they're not needed. This presents
certain testing challenges. This post
[explains how eyeo tackled these challenges](https://developer.chrome.com/blog/eyeos-journey-to-testing-mv3-service%20worker-suspension).

## Chrome 123: Alarms now run when device is asleep

Posted on February 26, 2024

Alarms set using the [`chrome.alarms` API](https://developer.chrome.com/docs/extensions/reference/api/alarms)
are no longer delayed when a device goes to sleep. When the device wakes up, the
alarm will fire once no matter how many alarms were missed. For example, say that
an alarm is set to go off once an hour and the device it's on is asleep from
12:55 AM to 2:05 AM, then only the 2:00 AM alarm triggers the `onAlarm` event.
It will fire as close to 2:00 AM as it can, and immediately when a device wakes
if it was asleep.

This change brings Chrome inline with the agreed behavior in the Web Extensions Community Group.

## Blog post: Changes to bfcache behavior with extension message ports

Posted on February 23, 2024

[Back/forward cache (bfcache)](https://web.dev/articles/bfcache) is a browser
optimization that enables instant back and forward navigation. Starting in
Chrome 123, when a page with an open extension port is stored in bfcache, the
message channel is closed, meaning that no messages will be sent to that page.
Consequently, extension scripts should listen for lifecycle events such as
`onDisconnect` and set up a new connection when the page is restored from BFCache.

For more information and sample code, see
[Changes to BFCache behavior with extension message ports](https://developer.chrome.com/blog/bfcache-extension-messaging-changes).

## Chrome 122: Promise support on asynchronous extension APIs

Posted on February 22, 2024

We've finished implementing Promise support for all asynchronous extension API
methods. This was done to modernize API methods by improving the ergonomics of
dealing with asynchronous operations. A handful of methods (for example,
`desktopCapture.chooseDesktopMedia()`) continue to only support callbacks
because their current surfaces are not compatible with Promises. For backwards
compatibility, callbacks are still supported. If you find a Promise that fails,
please [file a bug](https://developer.chrome.com/docs/extensions/support/file-a-bug).

## New guidance for real time communication

Posted on February 15, 2024

We have just published guides on [real time options](https://developer.chrome.com/docs/extensions/develop/concepts/real-time) in extensions. Real-time updates provide an instant communication path from your servers directly to your extension installations. Additionally, we have new guidance for using [chrome.gcm](https://developer.chrome.com/docs/extensions/how-to/integrate/chrome.gcm), [Web Push](https://developer.chrome.com/docs/extensions/how-to/integrate/web-push).

## New guidance and sample: Testing service worker termination

Posted on February 12, 2024

We have just published a guide on how to [Test service worker termination with Puppeteer](https://developer.chrome.com/docs/extensions/how-to/test/test-serviceworker-termination-with-puppeteer). The [accompanying sample](https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.terminate-sw) demonstrates this in Puppeteer and Selenium.

## Updated sample for native messaging

Posted on February 8, 2024

We have just published an [updated sample](https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/nativeMessaging)
for native messaging. This API allows your extension to start and communicate
with another application. Thanks to GitHub contributor [Shubham-Rasal](https://github.com/Shubham-Rasal)
for the work on this.

## Chrome 121: New lastAccessed property on tabs.Tab

Posted on February 6, 2024

A new property named `lastAccessed` was added to the [`tabs.Tab`](https://developer.chrome.com/docs/extensions/reference/api/tabs#type-Tab) object. This property indicates when the tab was last activated. The returned value is in milliseconds since epoch.

## Chrome 121: Unsupported "background" keys now issue a warning

Posted on January 11, 2024

In the change from Manifest V2 to Manifest V3, [children of the `"background"` manifest key](https://developer.chrome.com/docs/extensions/reference/manifest/background) were changed to accommodate replacement of background scripts with extension service workers. Formerly, adding the Manifest V2 keys `"scripts"`, `"page"`, or `"persistent"` to the `"background"` key of a Manifest V3 extension would throw an error. The presence of these keys now triggers a warning.

This is being done to enable using a single manifest file in extensions in multiple browsers, per a [proposal in the community group](https://github.com/w3c/webextensions/issues/282).

## Chrome 120: Minimum alarm granularity reduced to 30 seconds

Posted on December 14, 2023

Beginning in Chrome 120, Manifest V3 extensions can use the [`chrome.alarms`](https://developer.chrome.com/docs/extensions/reference/api/alarms) API with delays or periods of 30 seconds, rather than requiring values of 60 seconds or more.

## Blog post: Resuming the transition to Manifest V3

Posted on November 16, 2023

The Manifest V2 support timeline has been updated. See our [November 2023 blog post](https://developer.chrome.com/blog/resuming-the-transition-to-mv3) for details.

## Blog post: Improvements to content filtering support in Manifest V3

Posted on November 15, 2023

Learn about how we improved the declarativeNetRequest API in our [new blog post](https://developer.chrome.com/blog/improvements-to-content-filtering-in-manifest-v3).

## Blog post: What's new in Chrome 120 for Extensions

Posted on November 6, 2023

[Chrome 120 Beta](https://developer.chrome.com/blog/chrome-120-beta) was recently released. For a summary of the important updates relevant to extension developers, read our new blog post: [What's new in Chrome 120 for Extensions](https://developer.chrome.com/blog/chrome-120-beta-whats-new-for-extensions). This release also marks a major milestone as it removes the final two items (userScripts, file handler on ChromeOS) from the [list of critical platform gaps](https://developer.chrome.com/docs/extensions/develop/migrate/known-issues).

## PSA: Change to handling of privacy policy URLs in Developer Dashboard

Posted on October 30, 2023

Privacy policies in the Developer Dashboard are now added at the item level. This allows you to provide a different privacy policy per item. Read more about this
change in our [PSA](https://groups.google.com/a/chromium.org/g/chromium-extensions/c/c4hhdgSbn5g).

## Video: A chat with Matt Frisbie

Posted on October 26, 2023

We've just published a new video on the Chrome for Developers YouTube channel chatting with Google Developer Expert and author Matt Frisbie. Watch it
[here](https://www.youtube.com/watch?v=8P-Sc8ZaViY).

## New guidance on testing extensions

Posted on October 23, 2023

We've just published new guidance on how to write automated tests for extensions, including [how to write unit tests](https://developer.chrome.com/docs/extensions/how-to/test/unit-testing) and both
[general guidance](https://developer.chrome.com/docs/extensions/how-to/test/end-to-end-testing) and a
[tutorial](https://developer.chrome.com/docs/extensions/how-to/test/puppeteer) on end-to-end testing.

## Blog post: What's happening in Chrome Extensions - October 2023

Posted on October 17, 2023

We've just published the second edition of [What's Happening in Chrome Extensions](https://developer.chrome.com/blog/extension-news-october-2023). The post discusses what the extension team has been working on for the past few months, including, addressing service worker stability issues, and making good progress on closing all MV3 platform gaps. We also share exciting upcoming API releases like the Reading List API and the User Scripts API.

## Increased static ruleset limits in Declarative Net Request API

Posted on October 17, 2023

Following [feedback](https://github.com/w3c/webextensions/issues/318) in the Web Extensions
Community Group, we are significantly increasing the limit on enabled static rulesets from 10 to 50.
Additionally, we are increasing the total number of allowed static rulesets from 50 to 100. This is
currently available in Canary.

## Improved guidance around remotely-hosted code

Posted on October 17, 2023

A requirement for Manifest V3 is that extensions may no longer use remotely-hosted code. Although this has been [part of our migration guide](https://developer.chrome.com/docs/extensions/develop/migrate/improve-security#remove-remote-code) from the beginning, we thought it was worth improving the guidance around this issue. That page now provides more information, describing what's still possible in Manifest V3 and providing more information on strategies for upgrading.

There is a related addition to the [Troubleshooting Chrome Web Store violations](https://developer.chrome.com/docs/webstore/troubleshooting). A new section describes common reasons that extensions with remotely-hosted code are rejected.

## Chrome 118: isUrlFilterCaseSensitive now defaults to false

Posted on October 11, 2023

Starting in Chrome 118, the [`isUrlFilterCaseSensitive`](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest#property-RuleCondition-isUrlFilterCaseSensitive)
property in the [chrome.declarativeNetRequest](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest)
API has been changed to default to `false`. If you wish to keep the old behavior, you can explicitly set `isUrlFilterCaseSensitive` to `true` in
your declarativeNetRequest rules.

This follows [discussions](https://github.com/w3c/webextensions/issues/269) in the Web Extensions
Community Group. Firefox and Safari have already implemented a similar change.

## Documentation on cookies and web storage APIs

Posted on October 9, 2023

We published a new guide on [how cookies and web storage APIs work in Chrome extensions](https://developer.chrome.com/docs/extensions/develop/concepts/storage-and-cookies).
It includes details on cookie and storage partitioning changes in
[Privacy Sandbox](https://developer.chrome.com/docs/privacy-sandbox), an ongoing project to deprecate third-party cookies
through the creation of a series of new web platform APIs, and details on how they work in extensions.

## Extension samples now searchable

Posted on September 29, 2023

We recently created a page that lets you [search Chrome extension samples](https://developer.chrome.com/docs/extensions/samples). The search page has multiple options. A search box lets you search for text in sample titles. You can restrict the search by permission or extension API. An additional filter lets you restrict search to either API or functional (use case) samples.

This new sample page was built by a Google Summer of Code participant, Xuezhou Dai, who also contributed several new samples. You can read about their experiences this past summer in [their post on our blog](https://developer.chrome.com/blog/google-summer-of-code-and-chrome-extensions).

As before, [our code samples](https://github.com/GoogleChrome/chrome-extensions-samples) are still available on GitHub for cloning or forking.

## Chrome 118: Changes to opening file: scheme URLs

Posted on September 15, 2023

Beginning in Chrome 118, extensions will need the "Allow access to file URLs" setting enabled from the `chrome://extensions` page to open file:// scheme URLs using the [Tabs](https://developer.chrome.com/docs/extensions/reference/api/tabs) or [Windows](https://developer.chrome.com/docs/extensions/reference/api/windows) APIs. You can programmatically check for this access by calling [`chrome.extension.isAllowedFileSchemeAccess()`](https://developer.chrome.com/docs/extensions/reference/api/extension#method-isAllowedFileSchemeAccess). Firefox already restricts file URLs, and Safari supports the change. For more information, read the [post on the Chrome Extensions Mailing List](https://groups.google.com/a/chromium.org/g/chromium-extensions/c/ZtCvVISQU54/m/tOjjlzkfAgAJ).

## Chrome 117: Expanded URL protections on extension API navigations

Posted on August 23, 2023

Previously navigation triggered from extension API calls for [`tabs.update()`](https://developer.chrome.com/docs/extensions/reference/api/tabs#method-update), [`tabs.create()`](https://developer.chrome.com/docs/extensions/reference/api/tabs#method-create), and [`windows.create()`](https://developer.chrome.com/docs/extensions/reference/api/windows#method-create) emitted an error for some chrome:// URLs. Additionally, calling `tabs.update()` with a JavaScript URL was forbidden. In 117, these protections on JavaScript URLs have been expanded to the `tabs.create()` method and a number of additional chrome:// URLs have been added to the list of forbidden URLs that applies to all of the previously mentioned methods.

## Improved guidance for the declarativeNetRequest API

Posted on August 8, 2023

The [`chrome.declarativeNetRequest`](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest) API blocks or modifies network requests by specifying declarative rules. This lets extensions modify network requests without intercepting them and viewing their content, thus providing more privacy to users. It's also tricky to use. With that in mind, we've rewritten the guidance in a way that we think paints a clearer picture of how to implement declarative rulesets. Read the new section at the link above.

## Using your Google Analytics account with the Chrome Web Store

Posted on August 7, 2023

The Chrome Web Store offers integration with Google Analytics, which allows you to see analytics for your Chrome Web Store listing in addition to the view offered in the Developer Dashboard. For more information, read [Using your Google Analytics account with the Chrome Web Store](https://developer.chrome.com/docs/webstore/google-analytics).

## Chrome 115: DevTools steps over content scripts by default

Posted on July 28, 2023

Injected content scripts are now in the DevTools ignore list by default. This doesn't affect breakpoints, but it does mean that content scripts will be stepped over during debugging and exceptions from these scripts will be ignored. When a content script is open in the **Sources** tab, a banner alerts you if this is on and provides an option to remove your content script from the ignore list. To turn this behavior off, open DevTools, go to **Settings** then **Ignore list** . To learn more, see [What's new in DevTools](https://developer.chrome.com/blog/new-in-devtools-115#content-script).

## Chrome 116 beta: More than we can fit here

Posted on July 21, 2023

Chrome 116 is a big release for extensions. You can now open side panels programmatically. A new method lets you learn if there's an active offscreen document. Service workers got several improvements. There's enough improvements in 116 that we've written [a blog post to cover them](https://developer.chrome.com/blog/chrome-116-beta-whats-new-for-extensions). Chrome 116 is in beta as of July 19.

## Blog post: What's happening in Chrome Extensions

Posted on July 17, 2023

We've just published an overview of this year's [changes and improvements to extensions](https://developer.chrome.com/blog/extension-news-july-2023). The post discusses the year's big new features, including the Side Panel API, service worker enhancements, and offscreen documents. You'll also get a peek at what we're working on for this quarter. The article lists much more, with links to all.

## New guidance and sample: Learn how to use Google Analytics 4 in your Chrome extension

Posted on June 23, 2023

We published new Google Analytics and geolocation guidance and samples:

- An [updated version of our Google Analytics guidance](https://developer.chrome.com/docs/extensions/how-to/integrate/google-analytics-4) explaining how you can use [Google Analytics 4](https://support.google.com/analytics/answer/10089681) in your Chrome extension. We've also added a working [Google Analytics 4 sample](https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.google-analytics) to our Github sample repository. Check out [`google-analytics.js`](https://github.com/GoogleChrome/chrome-extensions-samples/blob/main/functional-samples/tutorial.google-analytics/scripts/google-analytics.js) for the relevant code related to Google Analytics.
- A new [Geolocation guide](https://developer.chrome.com/docs/extensions/how-to/web-platform/geolocation) and [three samples](https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples) demonstrating how to access geolocation in service workers, content scripts, popups and side panels.

## Chrome 115: Specify multiple reasons in chrome.offscreen.createDocument()

Posted on June 7, 2023

You can now specify multiple [`reason`](https://developer.chrome.com/docs/extensions/reference/api/offscreen#type-Reason) enums when calling [`chrome.offscreen.createDocument()`](https://developer.chrome.com/docs/extensions/reference/api/offscreen#method-createDocument). Use this when an offscreen document will be used for multiple different purposes. The browser uses the supplied reasons to determine the lifetime of the offscreen document.

## New tool: Extension Update Testing Tool

Posted on June 5, 2023

We've just released the [Extension Update Testing Tool](https://github.com/GoogleChromeLabs/extension-update-testing-tool), a local extension update server that can be used for testing updates to Chrome Extensions during local development, including permission grants. The tool shows the user's update flow, including keeping an extension disabled until a user grants any newly requested permissions. This tool is particularly useful for simulating the permission changes requested when updating an extension from Manifest V2 to Manifest V3.

## Chrome 114: New Side Panel API

Posted on May 30, 2023

Introducing the new Side Panel API, a companion surface that allows users to access tools alongside the content they are browsing. To learn more, visit the [Side Panel API reference](https://developer.chrome.com/docs/extensions/reference/api/sidePanel). Additionally, we've added many side panel samples to our [GitHub sample repository](https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples). We also share more about side panels in the new blog post [Designing a Superior User Experience with the New Side Panel API](https://developer.chrome.com/blog/extension-side-panel-launch). Our [quality guidelines policy](https://developer.chrome.com/docs/webstore/program-policies/quality-guidelines) and [best practices](https://developer.chrome.com/docs/webstore/best-practices#design-a-high-quality-extension) have also been reviewed to provide further guidance on creating high-quality side panel extensions.

Your feedback is important in crafting this API; please share your thoughts and feature requests in the [chromium-groups](https://groups.google.com/a/chromium.org/g/chromium-extensions/c/cJmdMLmpbjg/m/zYGc54AaAQAJ). Stay tuned for new updates as we continue to enhance the Side Panel API.

## New Samples: WASM in extensions

Posted on May 17, 2023

There are two new samples available that demonstrate how to use WASM in an extension:

- [Using WASM in Manifest V3](https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.wasm-helloworld-print-nomodule) shows the general method for including a WASM module.
- [Using WASM as a module in Manifest V3](https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.wasm-helloworld-print) shows how to use it in a module.

Special thanks to GitHub contributor [@daidr](https://github.com/daidr) for these samples.

## Updated Manifest V3 migration guidance

Posted on May 10, 2023

We've updated the [Known Issues](https://developer.chrome.com/docs/extensions/migrating/known-issues) section of our [Manifest V3 migration guidance](https://developer.chrome.com/docs/extensions/migrating) with an updated list of extension platform gaps that we intend to close before announcing a new Manifest V2 deprecation timeline.

## Recording audio and video with Manifest V3

Posted on May 10, 2023

We've just published a new article called [Audio recording and screen capture](https://developer.chrome.com/docs/extensions/how-to/web-platform/screen-capture), which covers recording audio or video from a tab, window, or screen in Manifest V3. This article describes multiple approaches to recording involving the [`chrome.tabCapture`](https://developer.chrome.com/docs/extensions/reference/api/tabCapture) API and the [`getDisplayMedia()`](https://developer.mozilla.org/docs/Web/API/MediaDevices/getDisplayMedia) function.

## Chrome 114: Increased storage.local quota

Posted on May 9, 2023

We have increased the quota for the [`storage.local`](https://developer.chrome.com/docs/extensions/reference/api/storage#property-local) property to approximately 10 MB. This was [agreed to in the Web Extensions Community Group](https://github.com/w3c/webextensions/issues/351#issuecomment-1514420881). This brings `storage.local` in line with [`storage.session`](https://developer.chrome.com/docs/extensions/reference/api/storage#property-session) which was changed in Chrome 112.

## New extension service worker tutorial and help

Posted on May 3, 2023

Service Workers are an integral part of Chrome Extensions. We just [published a tutorial](https://developer.chrome.com/docs/extensions/get-started/tutorial/service-worker-events) explaining the basics of registering, debugging, and interacting with Service Workers. We've also added a new [Service worker guide](https://developer.chrome.com/docs/extensions/develop/concepts/service-workers) explaining important concepts in more detail. We'll be expanding this section in the coming months.

## More troubleshooting tips for Web Store violations

Posted on April 24, 2023

To help with Chrome Web Store publishing, we added new guidance in two areas. Guidance for [minimum functionality](https://developer.chrome.com/docs/webstore/troubleshooting#minimum_functionality) centers around providing users with benefits and enriching their browsing experience. Guidance for [affiliate ads](https://developer.chrome.com/docs/webstore/troubleshooting#affiliate_ads) is about making users are aware of extensions using affiliate links or codes for monetization, and giving them some amount of control by requiring user action before inclusion.

## New instructions for the Extension Manifest Converter

Posted on April 14, 2023

We've rewritten the README for the [Extension Manifest Converter](https://github.com/GoogleChromeLabs/extension-manifest-converter) to make it easier to see what you need to do after running the tool. The converter helps helps migrate extensions built on Manifest V2 to Manifest V3. The new README describes what the tool does using words that closely match those in the [migration guide's checklist](https://developer.chrome.com/docs/extensions/migrating/checklist). The converter doesn't do everything, but it does eliminate many tasks that don't require a human judgement call.

## Chrome 113: New reasons for offscreen documents

Posted on April 7, 2023

We have added two new [reason types](https://developer.chrome.com/docs/extensions/reference/api/offscreen#type-Reason) to the Offscreen Documents API. Use `LOCAL_STORAGE` to access the web platform's [localStorage](https://developer.mozilla.org/docs/Web/API/Window/localStorage) API. Use `WORKER` when creating web workers.

## Google Analytics 4 now in the Developer Dashboard

Posted on March 30, 2023

The Chrome Web Store Developer Dashboard now supports Google Analytics 4 (GA4). We've simplified setting up Google Analytics and made access management for group publishers more straightforward. If you previously used Google Universal Analytics to track your store listing activity, you will need to take action by July 1, 2023 to ensure that you continue receiving data about your store listing. For more information, see the [post on the Chrome Extensions Mailing List](https://groups.google.com/a/chromium.org/g/chromium-extensions/c/JpzTRHBXDok/m/0F93f7FyBQAJ).

## The File Handling API comes to ChromeOS

Posted on March 24, 2023

The File Handler API is available for experimentation on ChromeOS in Canary for versions 112 and 113. It lets extensions on ChromeOS open files with specified MIME types and file extensions. To implement file handling add a set of rules to the `manifest.json`. This feature works the same as for Progressive web apps. For more information, see [the article](https://developer.chrome.com/articles/file-handling) elsewhere on this site.

To enable file handling:

- Starting in 112, launch Chrome using the `--enable-features=ExtensionWebFileHandlers` flag, starting in 112
- Starting in 113, paste `os://flags/#extension-web-file-handlers` into the Chrome omnibox and select 'Enabled' from the dropdown menu.

We hope to launch this feature in Chrome 115, in late June. Watch this space for updates.

## New Samples: dynamic declarations and programmatic injection

Posted on March 14, 2023

We've built a [new sample](https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/scripting) for the [`chrome.scripting`](https://developer.chrome.com/docs/extensions/reference/api/scripting) API. It demonstrates dynamic declarations, where a content script is registered at runtime, and programmatic injection, where a script is executed in a tab that is already open.

## New Samples: Declarative Net Request use cases

Posted on March 10, 2023

[Three new samples](https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/declarativeNetRequest) are available demonstrating the [Declarative Net Request API](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest). Each demonstrates implementation of a single use case. The first shows how to block cookies. The remaining two demonstrate blocking and redirecting URLs.

## Chrome 112: Increased storage.session quota

Posted on March 3, 2023

From Chrome 112, the quota for the [`storage.session`](https://developer.chrome.com/docs/extensions/reference/api/storage#property-session) property has been increased to approximately 10 MB. This was agreed to in the Web Extensions Community Group: <https://github.com/w3c/webextensions/issues/350>

## Chrome 109: Offscreen documents

Posted on January 25, 2023

Offscreen documents are now available in Manifest V3 extensions. These help with the transition from background pages to extension service workers by providing support for DOM-related features and APIs. For more information, [read the blog post](https://developer.chrome.com/blog/Offscreen-Documents-in-Manifest-v3).

## Chrome 110: Is an extension enabled

Posted on January 12, 2023

The [`chrome.action.isEnabled()`](https://developer.chrome.com/docs/extensions/reference/api/action#method-isEnabled) method programmatically checks whether an extension has been enabled for a specific tab. This saves you from maintaining the enabled state of your tabs. This new method takes a tab ID and a reference to a callback and returns a boolean. It has one limitation: tabs created using [`chrome.declarativeContent`](https://developer.chrome.com/docs/extensions/reference/api/declarativeContent) always return false.

(The `chrome.action` namespace recently got new methods for controlling the appearance of extension badges. For more information, see [Setting badge colors](https://developer.chrome.com/docs/extensions/whats-new#m110-badge-color).)

## Chrome 110: Change in service worker idle timeout

Posted on January 5, 2023

Previously, an extension service worker would frequently shut down at the five minute mark. We've changed this behavior to more closely resemble service worker lifetime's on the web. An extension service worker will be shut down after either thirty seconds of inactivity or if a single activity takes longer than 5 minutes to process. For more information, see [Longer extension service worker lifetimes](https://developer.chrome.com/blog/longer-esw-lifetimes).

## Post: Pausing Manifest V2 phase-out

Posted on December 9, 2022

The Manifest V2 deprecation timelines are under review and the experiments scheduled for early 2023 are being postponed. For more information, [read the update](https://groups.google.com/u/1/a/chromium.org/g/chromium-extensions/c/zQ77HkGmK9E) in the Chrome Extensions Mailing List.

## Chrome 110: Setting badge colors

Posted on November 29, 2022

The `chrome.action` namespace has two new methods to give you more control over the appearance extension badges. The [`setBadgeTextColor()`](https://developer.chrome.com/docs/extensions/reference/api/action#method-setBadgeTextColor) and [`getBadgeTextColor()`](https://developer.chrome.com/docs/extensions/reference/api/action#method-getBadgeTextColor) methods allow an extension to change and query its toolbar icon's badge text color. When used with [`setBadgeBackgroundColor`](https://developer.chrome.com/docs/extensions/reference/api/action#method-setBadgeBackgroundColor) and [`getBadgeBackgroundColor`](https://developer.chrome.com/docs/extensions/reference/api/action#method-getBadgeBackgroundColor) these new methods let you enforce design and brand consistency.

## Blog post: More details on the transition to Manifest V3

Posted on September 28, 2022

We have [clarified the Manifest V2 deprecation timeline](https://developer.chrome.com/blog/more-mv2-transition). The [Manifest V2 support timeline](https://developer.chrome.com/docs/extensions/develop/migrate/mv2-deprecation-timeline) has also been updated to reflect this information.

## Docs update: Known issues when migrating to Manifest V3

Posted on September 28, 2022

We've put together a list of [major features currently in development and open bugs](https://developer.chrome.com/docs/extensions/develop/migrate/known-issues). Our goal with this page is to help developers better understand the current state of the platform and what features they can target as they prepare for the future.

## Chrome Web Store: "large promo tile" image upload removed

Posted on August 17, 2022

Chrome Web Store has removed the "large promo tile" upload UI from the item Store Listing tab in the developer dashboard. This change does not affect the end user experience as these images were not used in the consumer UI. See this chromium-extensions post for additional details.

## Chrome 106: Allow pages on file:// urls to access web accessible resources

Posted on August 15, 2022

Opaque origins such as sandboxed iframes and dynamic import should also be able to access web accessible resources, according to [crbug.com/1219825#c11](https://crbug.com/1219825#c11).

## Chrome 106: Fixed bug allowing incorrect final arguments on some async API functions

Posted on August 8, 2022

Previously, Manifest V3 calling async APIs could provide an invalid final argument and Chrome would not error. With this fix Chrome will now correctly error and report that there was no matching signature. Developers are encouraged to check their extensions on Canary for any errors in case they accidentally using incorrect signature for an API call that will be broken by this bug fix.

## Blog post: Chrome Web Store analytics revamp

Posted on July 28, 2022

Chrome Web Store has a revamped item analytics experience for the Chrome Web Store Developer Dashboard. The new dashboard is easier to understand at a glance and consolidates the most useful information up front. [Read the blog post](https://developer.chrome.com/blog/cws-analytics-revamp) for more information.

## Chrome 105: promises for the Identity API

Posted on July 15, 2022

Functions on the [Identity API](https://developer.chrome.com/docs/extensions/reference/api/identity#method-getAuthToken) now
support promise based calls. This comes with a slight change to the surface for
[`identity.getAuthToken()`](https://developer.chrome.com/docs/extensions/reference/api/identity#method-getAuthToken), where the
asynchronous return set to a promise based call will have "token" and "grantedScopes" as parameters
on a single object (as opposed to the callback version receiving them as separate arguments to the
callback).

## Chrome 104: New favicons API for Manifest V3

Posted on June 08, 2022

Manifest V3 extensions can now access favicons using a new URL pattern: `chrome-extension://<id>/_favicon/`, where is the ID of your extension. This replaces the Manifest V2 platform's `chrome://favicons` API. See the [Favicon API](https://developer.chrome.com/docs/extensions/how-to/ui/favicons) docs for more information.

## Docs update: Developer trader/non-trader disclosure

Posted on May 26, 2022

Added the [trader/non-trader developer identification](https://developer.chrome.com/docs/webstore/program-policies/trader-disclosure) that
informs developers to accurately self-declare their trader/non-trader status.

## Chrome 103: Wasm in Manifest V3 requires wasm-unsafe-eval

Posted on May 12, 2022

Chrome no longer grants extensions `script-src: wasm-unsafe-eval` by default. Extensions that use
WebAssembly must now explicitly add this directive and value to `extension_pages` in their
`content_security_policy` declarations.

## Chrome 103: Changing MV3 shortcuts take effect immediately

Posted on April 28, 2022

When changing a Manifest V3 extension's keyboard shortcut on `chrome://extensions/shortcuts`,
updates are now applied immediately. Previously the extension would have to be reloaded before the
change would take effect.

## Chrome 102: Dynamic content scripts in main world

Posted on April 14, 2022

Dynamically registered content scripts can now specify the
[world](https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts#isolated_world) that assets will be injected into. See
[`scripting.registerContentScripts()`](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-registerContentScripts)
for details.

## Chrome 102: New manifest field "optional_host_permissions"

Posted on April 4, 2022

Manifest V3 extensions can now specify the `optional_host_permissions` key in manifest.json. This
allows Manifest V3 extensions to declare optional match patterns for hosts just as Manifest V2
extensions could using the `optional_permissions` key.

## Chrome 102: injectImmediately property in scripting.executeScript()

Posted on April 4, 2022

`chrome.scripting.executeScript()` now accepts an optional `injectImmediately` property on its
`injection` argument. If present and set to true, the script will inject into the target as soon as
possible, rather than waiting for `document_idle`. Note that this is not a guarantee the script will
inject before the page is loaded since the page continues to load while the API call is being made.

## Chrome 102: Omnibox API support in Manifest V3

Posted on March 31, 2022

The [Omnibox API](https://developer.chrome.com/docs/extensions/reference/api/omnibox) can now be used in service worker-based
extensions. Previously, some of this API's methods would throw on invocation due to internal
dependencies on DOM capabilities.

## Chrome 102: wasm-unsafe-eval allowed in Manifest V3 CSP

Posted on March 22, 2022

Manifest V3 extensions can now include `wasm-unsafe-eval` in their `content_security_policy`
declarations. This change allows Manifest V3 extensions to use WebAssembly.

## Chrome 102: New storage.session API

Posted on March 22, 2022

Manifest V3 extensions can now use in memory storage [storage.session](https://developer.chrome.com/docs/extensions/reference/api/storage#property-session) .

## Docs update: Chrome Web Store item discovery

Posted on March 21, 2022

[Discovery on Chrome Web Store](https://developer.chrome.com/docs/webstore/discovery) gives an overview of how users find items
on the Chrome Web Store and how our editors select items to feature.

## Chrome 101: Improved declarativeNetRequest domain conditions

Posted on March 9, 2022

[declarativeNetRequest](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest) rule conditions have been
updated to allow extensions to better target requests based on the request's "request" and
"initiator" domains. The relevant condition properties are `initiatorDomains`,
`excludedInitiatorDomains`, `requestDomains`, and `excludedRequestDomains`. See also this
[chromium-extensions thread](https://groups.google.com/a/chromium.org/g/chromium-extensions/c/4971ZS9cI7E).

## Chrome 100: Resolved issue with scripting.executeScript() on newly created tabs

Fixed a longstanding issue where calling `scripting.executeScript()` on a newly created tab or
window could fail.

## Chrome 100: native messaging port keeps service worker alive

Posted on February 9, 2022

> [!WARNING]
> **Warning:** This change did not fully address the underlying issue. We will share another update when we are confident that native messaging ports are behaving as intended.

Connecting to a native messaging host using `chrome.runtime.connectNative()` in an extension's
service worker should keep the service worker alive as long as the port is open.

## Chrome 100: omnibox.setDefaultSuggestion() supports promises and callbacks

Posted on February 8, 2022

The
[`omnibox.setDefaultSuggestion()`](https://developer.chrome.com/docs/extensions/reference/api/omnibox#method-setDefaultSuggestion)
method now returns a promise or accepts a callback to allow developers to determine when the
suggestion has been properly set.

## Chrome 100: i18n.getMessage() support in extension service workers

Posted on January 27, 2022

The [`chrome.i18n.getMessage()`](https://developer.chrome.com/docs/extensions/reference/api/i18n#method-getMessage) API is now
supported in extension service worker contexts.

## Chrome 99: match_origin_as_fallback in Canary

Posted on January 5, 2022

Content scripts can now specify the `match_origin_as_fallback` key to inject into frames that are
related to a matching frame, including frames with `about:`, `data:`, `blob:`, and `filesystem:`
URLs. See the [content scripts](https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts#injecting-in-related-frames)
documentation for details.

## Chrome 99: extension service worker support for file: schemes in Canary

Posted on December 30, 2021

Service worker-based Manifest V2 and Manifest V3 extensions can now use the Fetch API to request
`file:`-scheme URLs. Access to `file:`-scheme URLs still requires that the user enable 'Allow access
to File URLs' for the extension in the `chrome://extensions` page.

## Chrome 99: promise support for messaging APIs in Canary

Posted on December 28, 2021

Promise support has been added to
[`tabs.sendMessage`](https://developer.chrome.com/docs/extensions/reference/api/tabs#method-sendMessage),
[`runtime.sendMessage`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendMessage), and
[`runtime.sendNativeMessage`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) for
extensions built for Manifest V3.

## Docs update: Chrome Web Store review documentation

Posted on December 10, 2021

Added [a new reference page](https://developer.chrome.com/docs/webstore/review-process) that provides an overview of the Chrome
Web Store review process and explains how [developer program policy](https://developer.chrome.com/docs/webstore/program-policies) enforcement is handled.

## Chrome 98: scripting.executeScript() and scripting.insertCSS() accept multiple files

Posted on November 9, 2021

The Scripting API's [`executeScript()`](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-executeScript)
and [`insertCSS()`](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-insertCSS) methods now accept
multiple files. Previously these methods required an array with a single file entry.

## Docs update: review violation troubleshooting updates

Posted on October 27, 2021

The [Troubleshooting Chrome Web Store violations](https://developer.chrome.com/docs/webstore/troubleshooting) page has been
updated to provide developers with more detailed guidance for common reasons for rejection.

## Chrome 96: expanded promise support to 27 more APIs

Posted on October 1, 2021

This release contains significantly more promise updates than any previous release. Updates include
both general and ChromeOS-specific extensions APIs. Expand the following sections for details.

Extensions APIs

A number of APIs now support promises in Manifest V3.

- [`chrome.browsingData`](https://developer.chrome.com/docs/extensions/reference/api/browsingData)
- [`chrome.commands`](https://developer.chrome.com/docs/extensions/reference/api/commands)
- [`chrome.contentSettings`](https://developer.chrome.com/docs/extensions/reference/api/contentSettings)
- [`chrome.debugger`](https://developer.chrome.com/docs/extensions/reference/api/debugger)
- [`chrome.downloads`](https://developer.chrome.com/docs/extensions/reference/api/downloads)
- [`chrome.enterprise.hardwarePlatform`](https://developer.chrome.com/docs/extensions/reference/api/enterprise/hardwarePlatform)
- [`chrome.fontSettings`](https://developer.chrome.com/docs/extensions/reference/api/fontSettings)
- [`chrome.history`](https://developer.chrome.com/docs/extensions/reference/api/history)
- [`chrome.instanceID`](https://developer.chrome.com/docs/extensions/reference/api/instanceID)
- [`chrome.permissions`](https://developer.chrome.com/docs/extensions/reference/api/permissions)
- [`chrome.processes`](https://developer.chrome.com/docs/extensions/reference/api/processes)
- [`chrome.search`](https://developer.chrome.com/docs/extensions/reference/api/search)
- [`chrome.sessions`](https://developer.chrome.com/docs/extensions/reference/api/sessions)
- [`chrome.topSites`](https://developer.chrome.com/docs/extensions/reference/api/topSites)

Also, APIs that use the [`ChromeSetting`](https://developer.chrome.com/docs/extensions/reference/api/types#type-ChromeSetting)
prototype now also support promises. The following APIs are affected by this change.

- [`chrome.privacy`](https://developer.chrome.com/docs/extensions/reference/api/privacy)
- [`chrome.accessibilityFeatures`](https://developer.chrome.com/docs/extensions/reference/api/accessibilityFeatures)
- [`chrome.proxy`](https://developer.chrome.com/docs/extensions/reference/api/proxy)

ChromeOS APIs

- [`chrome.certificateProvider`](https://developer.chrome.com/docs/extensions/reference/api/certificateProvider)
- [`chrome.documentScan`](https://developer.chrome.com/docs/extensions/reference/api/documentScan)
- [`chrome.enterprise.deviceAttributes`](https://developer.chrome.com/docs/extensions/reference/api/enterprise/deviceAttributes)
- [`chrome.enterprise.networkingAttributes`](https://developer.chrome.com/docs/extensions/reference/api/enterprise/networkingAttributes)
- [`chrome.fileBrowserHandler`](https://developer.chrome.com/docs/extensions/reference/api/fileBrowserHandler)
- [`chrome.fileSystemProvider`](https://developer.chrome.com/docs/extensions/reference/api/fileSystemProvider)
- [`chrome.loginState`](https://developer.chrome.com/docs/extensions/reference/api/loginState)
- [`chrome.printingMetrics`](https://developer.chrome.com/docs/extensions/reference/api/printingMetrics)
- [`chrome.wallpaper`](https://developer.chrome.com/docs/extensions/reference/api/wallpaper)

## Chrome 96: dynamic content scripts

Posted on September 24, 2021

The [`chrome.scripting`](https://developer.chrome.com/docs/extensions/reference/api/scripting) API now supports
[registering](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-registerContentScripts),
[updating](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-updateContentScripts),
[unregistering](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-unregisterContentScripts), and [getting a list](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-getRegisteredContentScripts) of content scripts
at runtime. Previously, content scripts could only be statically declared in an extension's
manifest.json or programmatically injected at runtime with
[`chrome.scripting.executeScript()`](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-executeScript).

## Docs update: Manifest V2 support timeline

Posted on September 23, 2021

The Manifest V2 to V3 transition timeline was [announced in this blog post](https://developer.chrome.com/blog/mv2-transition) and
a more detailed [timeline page](https://developer.chrome.com/docs/extensions/develop/migrate/mv2-deprecation-timeline) was published.

## Chrome 96: declarativeNetRequestWithHostAccess permission

Posted on September 20, 2021

The new `declarativeNetRequestWithHostAccess` permission allows extensions to use the
[`chrome.declarativeNetRequest`](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest) API on sites the
extension has host permissions for. This also enables existing Manifest V2 extensions that use
`webRequest`, `webRequestBlocking`, and site-specific host permission to migrate to the
[`chrome.declarativeNetRequest`](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest) API without
requiring the user to approve new permissions.

## Chrome 95: inject scripts directly into pages

Posted on September 2, 2021

The [`chrome.scripting`](https://developer.chrome.com/docs/extensions/reference/api/scripting) API's
[`executeScript()`](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-executeScript) method can now
inject scripts directly into a page's main world. Previously, extensions could only inject directly
into the extension's isolated world. For more information on isolated worlds, see the documentation
on [content scripts](https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts#isolated_world).

## Chrome 95: promise support for Storage API

Posted on August 30, 2021

Methods on the Manifest V3 version of the [`chrome.storage`](https://developer.chrome.com/docs/extensions/reference/api/storage)
API now return promises.

## Policy update: two step verification enforcement

Posted on August 4, 2021

The [policy update blog post](https://developer.chrome.com/blog/policy-update-2sv) published on June 29, 2021 has been updated
to correct the two step verification deployment timeline.

## Chrome 94: declarative net request static ruleset changes

Posted on July 28, 2021

The [`chrome.declarativeNetRequest`](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest) now supports
specifying up to 50 static rulesets
([MAX_NUMBER_OF_STATIC_RULESETS](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest#property-MAX_NUMBER_OF_STATIC_RULESETS))
and enabling up to 10 rulesets
([MAX_NUMBER_OF_ENABLED_STATIC_RULESETS](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest#property-MAX_NUMBER_OF_ENABLED_STATIC_RULESETS))
at a time.

## Chrome 93: cross origin isolation support

Posted on July 12, 2021

Both [Manifest V2](https://developer.chrome.com/docs/extensions/mv2/cross-origin-isolation) and [Manifest V3](https://developer.chrome.com/docs/extensions/develop/concepts/cross-origin-isolation) extensions can now opt into [cross origin isolation](https://web.dev/articles/cross-origin-isolation-guide). This feature limits which cross-origin
resources can load an extension's pages and enables the use of low level web platform features like
[`SharedArrayBuffer`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer). Opt in will be required starting in Chrome 95.

## Policy update: developer program policies updated

Posted on June 29, 2021

The Chrome Web Store [Developer Program Policies](https://developer.chrome.com/docs/webstore/program-policies) have been updated
with clarifications to the deceptive installation tactics, spam, and repetitive content policies.
This update also includes a new two step verification requirement to publish on the Chrome Web
Store. [Read the blog post](https://developer.chrome.com/blog/policy-update-2sv) for more information.

## Blog post: extension actions in Manifest V3

Posted on June 23, 2021

Chrome extensions had `chrome.browserAction` and `chrome.pageActions` APIs for years, but Manifest
V3 replaced both with a generic [`chrome.actions`](https://developer.chrome.com/docs/extensions/reference/api/action) API. This
post explores the history of these APIs and what has changed in Manifest V3. [Read the post](https://developer.chrome.com/blog/mv3-actions).

## Blog post: introducing chrome.scripting

Posted on June 8, 2021

The [`chrome.scripting`](https://developer.chrome.com/docs/extensions/reference/api/scripting) API is a new Manifest V3 API focused
on, well, scripting. In this post we dig into the motivations for this change and take a closer look
at its new capabilities. [Read the post](https://developer.chrome.com/blog/crx-scripting-api).

## Chrome 92: module service worker support

Posted on April 13, 2021

Chrome now supports JavaScript modules in service workers. To specify a module a module in your
manifest:

    "background": {
      "service_worker": "script.js",
      "type": "module"
    }

This loads the worker script as an ES module, which lets you use the `import` keyword in the
worker's script to import other modules.

## Chrome 91: chrome.action.getUserSettings()

Posted on April 2, 2021

The new
[`chrome.action.getUserSettings()`](https://developer.chrome.com/docs/extensions/reference/api/action#method-getUserSettings)
method allows extensions to determine if the user has pinned the extension to the main toolbar.

## Chrome 90: chrome.scripting.removeCSS()

Posted on February 10, 2021

The new [`chrome.scripting.removeCSS()`](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-removeCSS)
method allows extensions to remove CSS that was previously inserted via
[`chrome.scripting.insertCSS()`](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-insertCSS). It
replaces [`chrome.tabs.removeCSS()`](https://developer.chrome.com/docs/extensions/reference/api/tabs#method-removeCSS).

## Chrome 90: returning promises from scripting.executeScript()

Posted on February 24, 2021

[`chrome.scripting.executeScript()`](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-executeScript) now
supports returning promises. If the resulting value of the script execution is a promise, Chrome
will wait for the promise to settle and return its resulting value.

## Chrome 90: chrome.scripting.executeScript() results include frameId

Posted on January 27, 2021

Results returned from
[`chrome.scripting.executeScript()`](https://developer.chrome.com/docs/extensions/reference/api/scripting#method-executeScript)
now include the [frameId](https://developer.chrome.com/docs/extensions/reference/api/webNavigation#a-note-about-frame-ids).
The `frameId` property indicates the frame that the result is from, letting extensions easily
associate results with the individual frames when injecting in multiple frames.

## Chrome 89: new API for managing tab groups

Posted on January 14, 2021

The new [`chrome.tabGroups`](https://developer.chrome.com/docs/extensions/reference/api/tabGroups) API and new capabilities in
[`chrome.tabs`](https://developer.chrome.com/docs/extensions/reference/api/tabs) let extensions read and manipulate tab groups.
Requires Manifest V3.

## Chrome 89: customizable permissions for web accessible resources

Posted on December 23, 2020

[Web accessible resources](https://developer.chrome.com/docs/extensions/reference/manifest/web-accessible-resources) definitions in
Manifest V3 have changed to let extensions restrict resource access based on the requester's origin
or extension ID.

## Blog post: Extension Manifest Converter

Posted on April 28, 2021

The Chrome Extensions team has open sourced "Extension Manifest Converter", a Python tool that
automates some of the mechanical aspects of converting extensions to Manifest V3. See the
[announcement blog post](https://developer.chrome.com/blog/extension-manifest-converter) and [get it from GitHub](https://github.com/GoogleChromeLabs/extension-manifest-converter).

## Chrome 88: Manifest V3 general availability

Posted on January 19, 2021

Manifest V3 is a major update to the extensions platform; see [Overview of Manifest V3](https://developer.chrome.com/docs/extensions/develop/migrate) for a summary of new and changed features. Extensions
may continue to use Manifest V2 for now, but this will be phased out in the near future. We strongly
recommend that you use Manifest V3 for any new extensions, and begin migrating existing extensions
to Manifest V3 as soon as possible.