Component extensions are extensions that are built into and (typically) bundled with the Chromium binary. They don‘t have a visible UI presence: they don’t have actions in the toolbar and don't show up in the chrome://extensions page (unless the user appends the --show-component-extension-options
commandline flag). Users cannot disable them or, largely, interact with them.
Component extensions should be viewed as fundamental parts of the Chromium browser. The best way to think of these is that the fact these features are implemented with an extension is an implementation detail. Just as we consider the chrome://settings pages fundamental, core parts of the browser and give them special privileges even though they are written in HTML, CSS, and JavaScript, we consider component extensions to be a core part of the browser.
Component extensions are used for core parts of the Chromium browser. As such, a component extension should not be used for any feature that should be removable or that isn't fundamentally part of the browser. Instead, a component extension should be used if it is the most appropriate technology. The “bar” for adding a component extension is the same as the bar for adding a new feature to Chromium in C++.
Reasons to use a component extension include:
Over the years, there have been numerous component extensions. Today, some examples include the built-in PDF reader and the CryptoToken extension (used for enabling security key U2F on websites). In the past, the bookmark manager and the “cast” functionality were also implemented as extensions.
There are also component platform apps; ChromeOS historically had many of these. Now, the general guidance is to instead implement these features as System Web Apps.
Since component extensions are a part of the Chromium browser, they do not have user-facing permissions (the same as the rest of the browser doesn‘t have user-facing permissions). Component extensions can typically be auto-granted any API permission, independent of their manifest (though this is undesired, and ideally we’d require them to at least declare the permission in their manifest.json
file).
Default-installed extensions are different than component extensions. Default-installed extensions are added to the browser and can be added either by the browser publisher (e.g. Google Docs Offline is included with Google Chrome) or by the OEM (certain manufacturers add extensions to their Chromebooks).
Default-installed extensions are not the same as component extensions: