Generally, browser extensions cut across websites and web apps, while apps provide more isolated functionality.
Browser extensions often provide an interactive toolbar icon, but can also run without any UI. They may interact with the browser or tab contents, and can request more extensive permissions than apps.
Platform apps (v2 packaged apps) are standalone applications that mostly run independently of the browser. Their windows look and feel like native applications but simply host the app's pages.
Most apps, like Calculator and the Files app, create their window(s) and initialize a UI in response to Chrome‘s chrome.app.runtime.onLaunched
event. Some apps don’t show a window but work in the background instead. Platform apps can connect to more device types than browser extensions have access to.
Platform apps are deprecated on non-Chrome OS platforms.
Legacy (v1) packaged apps combined the appearance of a hosted app -- a windowed wrapper around a website -- with the power of extension APIs. With the launch of platform apps and the app-specific APIs, legacy packaged apps are deprecated.
A hosted app is mostly metadata: a web URL to launch, a list of associated URLs, and a list of HTML5 permissions. Chrome ask for these permissions during the app's installation, allowing the associated URL to bypass the normal Chrome permission prompts for HTML5 features.
A bookmark app is a simplified hosted app that Chrome creates on demand. When the user taps “Add to desktop” (or “Add to shelf” on Chrome OS) in the Chrome menu, Chrome creates a barebones app whose manifest specifies the current tab‘s URL. A shortcut to this URL appears in chrome://apps using the site’s favicon.
Chrome then creates a desktop shortcut that will open a browser window with flags that specify the app and profile. Activating the icon launches the “bookmarked” URL in a tab or a window.
A particular manifest key in an extension's manifest.json
file determines what kind of extension it is:
app.background.page
and/or app.background.scripts
app.launch.local_path
app.launch.web_url
Extension
is the class type for all extensions and apps, so technically speaking, an app is-an Extension
. The word “extension” usually refers only to non-app extensions, a.k.a. browser extensions.
Manifest::Type
declaration