This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

Type Object
Mandatory No
"externally_connectable": {
  // List of extension IDs that extension wishes to communicate with
  // If "browser_action" is specified but "browser_action.ids" is not,
  // no extensions can communicate with this extension.
  // To match all extension IDs use "*".
  "ids": [
  // Regular expression patterns specifying web pages
  // If "matches" is not specified, no web pages can communicate with
  // this extension
  "matches": [

Externally connectable allows extension developer to control which other extensions and web pages can communicate with this extension via runtime.connect() and runtime.sendMessage() message passing. If externally_connectable is not specified, all extensions can communicate with each other but not with web pages.

"ids" attribute

ids enables communication between this extension and other installed extensions specified by extension identifiers. Use the pattern "*" if you wish to communicate with all extensions. 

"matches" attribute

matches enables communication between this extension and the web pages. This is a list of regular expressions for page URLs that you wish to communicate with.

Note: If browser_action is not specified, communication among extensions is still allowed as if browser_action was {"ids": ["*"] }, therefore if you specify browser_action.matches don't forget to add ids if you still want to communicate with other extensions.

Browser compatibility

Update compatibility data on GitHub
ChromeEdgeFirefoxOperaSafariFirefox for Android
externally_connectableChrome Full support YesEdge Full support 79Firefox No support No
No support No
Notes See bug 1319168.
Opera Full support YesSafari No support NoFirefox Android No support No


Full support  
Full support
No support  
No support
See implementation notes.
See implementation notes.