# webextensions-examples
[https://github.com/mdn/webextensions-examples](https://github.com/mdn/webextensions-examples)
Maintained by the [MDN team at Mozilla](https://wiki.mozilla.org/MDN).
WebExtensions are a way to write browser extensions: that is, programs
installed inside a web browser that modify the behaviour of the browser or
of web pages loaded by the browser. They are built on a set of
cross-browser APIs, so WebExtensions written for Google Chrome or Opera will
in most cases run in Firefox or Edge too.
The "webextensions-examples" repository is a collection of simple but complete
and installable WebExtensions. You can use the examples to see how to use the
WebExtensions APIs, and as a starting point for your own WebExtensions.
The examples are made available under the
[Mozilla Public License 2.0](https://www.mozilla.org/en-US/MPL/2.0/).
## How to use "webextensions-examples"
To use the repository, first clone it.
Each example is in its own top-level directory. Install an example in your
favourite web browser ([installation instructions](#installing-an-example) are below),
and see how it works. Each example has its own short README explaining what
it does.
To find your way around a WebExtension's internal structure, have a look at the
[Anatomy of a WebExtension](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension)
page on MDN.
To use these examples in Firefox, you should use the most recent release
of Firefox. Some examples work with earlier releases.
A few examples rely on APIs that are currently only available in pre-release
versions of Firefox. Where this is the case, the example should declare
the minimum version that it needs in the `strict_min_version` part of the
[applications key](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/applications)
in its manifest.json file.
## Installing an example
There are a couple ways to try out the example extensions in this repository.
1. Open Firefox and load `about:debugging` in the URL bar. Click the
[Load Temporary Add-on](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Temporary_Installation_in_Firefox)
button and select the `manifest.json` file within the
directory of an example extension you'd like to install.
Here is a [video](https://www.youtube.com/watch?v=cer9EUKegG4)
that demonstrates how to do this.
2. Install the
[web-ext](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Getting_started_with_web-ext)
tool, change into the directory of the example extension
you'd like to install, and type `web-ext run`. This will launch Firefox and
install the extension automatically. This tool gives you some
additional development features such as
[automatic reloading](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Getting_started_with_web-ext#Automatic_extension_reloading).
## Index of examples
- annotate-page
- Sidebar demo.
- apply-css
- Inserts CSS into a web page.
- beastify
- Adds a browser action with a popup and injects a script into a web page.
- bookmark-it
- Adds and removes bookmarks.
- borderify
- Injects scripts into pages that match a URL pattern.
- chill-out
- Page action demo, plus some features of
alarms and tabs.
- commands
- Defines keyboard shortcuts.
- context-menu-copy-link-with-types
- Advanced clipboard interaction, including copy to clipboard from a background page.
- context-menu-demo
- Adds items to the context menu.
- contextual-identities
- Contextual identities (containers) demo.
- cookie-bg-picker
- Demo using cookies, browser actions with popups, and content scripts.
- embedded-webextension-bootstrapped
- An embedded WebExtension in a bootstrapped Firefox add-on.
- embedded-webextension-sdk
- An embedded WebExtension in an Add-on SDK Firefox add-on.
- emoji-substitution
- Injects content scripts into web pages matching a given URL pattern.
- eslint-example
- How to configure a WebExtension with eslint.
- favourite-colour
- Demo of storage and options(settings) pages.
- firefox-code-search
- Customizes the behavior of the browser's address bar.
- forget-it
- Clears stored browsing data.
- google-userinfo
- Authenticates the user with Google.
- history-deleter
- Clears browsing history entries by domain.
- latest-download
- Displays the most recently downloaded item.
- list-cookies
- Lists all cookies in the active tab.
- mocha-client-tests
- Tests the add-on using Mocha.
- native-messaging
- Exchanges messages between the add-on and a Python program installed on the user's computer.
- navigation-stats
- Collects and displays statistics for sites the user navigates to.
- notify-link-clicks-i18n
- Displays localized notifications when the user clicks on links.
- open-my-page-button
- Opens a page bundled with the add-on, when the user clicks a toolbar button.
- page-to-extension-messaging
- Exchanges messages between a web page and the add-on.
- permissions
- Demo showing how to ask the user for additional permissions at runtime.
- quicknote
- Note-taking add-on: shows how to store data, and how to use browser actions and popups.
- react-es6-popup
- How to use React and ES6 in an add-on.
- selection-to-clipboard
- Basic clipboard example: copying to the clipboard in a content script.
- stored-credentials
- Performs HTTP basic authentication using a stored username and password.
- tabs-tabs-tabs
- Demo of various
tabs functions: open, close, move, etc.
- top-sites
- Replaces the "new tab" page with links to pages that the user often visits.
- user-agent-rewriter
- Intercepts and modifies HTTP requests.
- webpack-modules
- Uses webpack to package npm modules for use in an add-on.
- window-manipulator
- Demo of various
windows functions: create, close, resize, etc.
## Learn more
To learn more about developing WebExtensions, see the
[WebExtensions documentation on MDN](https://developer.mozilla.org/en-US/Add-ons/WebExtensions)
for getting started guides, tutorials, and full API reference docs.
## Problems?
If you find a problem, please [file a bug](https://github.com/mdn/webextensions-examples/issues/new).
If you need help, email the [dev-addons mailing list](https://mail.mozilla.org/listinfo/dev-addons) or contact the WebExtensions team in the #webextensions IRC channel on irc.mozilla.org.
## Contributing
We welcome contributions, whether they are whole new examples, new features,
bug fixes, or translations of localizable strings into new languages. Please
see the [CONTRIBUTING.md](https://github.com/mdn/webextensions-examples/blob/master/CONTRIBUTING.md) file for more details.