# About the Wowza Flowplayer plugins
Wowza Flowplayer can be extended through the use of various plugins. As module extensions, plugins allow users to customize their viewing experience and developers to extend the player's capabilities without altering its core design.
## Plugin descriptions
The following table provides an overview of available plugins and links to important documentation for usage.
embed
## Install a plugin
To load a plugin when embedding the player using our CDN, include the plugin's URL after the core player. For an example, see the [Embed the player in your site](/docs/wowza-flowplayer/player/embed/embed-with-standalone/#1-embed-the-player-in-your-site) section.
If you plan on using the npm approach to embed the player and plugins, see the [Use npm](/docs/wowza-flowplayer/player/embed/embed-with-standalone/#use-npm) section. For additional help with this topic, you can also review the [Add the standalone player to a TypeScript project](/docs/wowza-flowplayer/guides/add-the-player-using-typescript/) guide. This guide focuses on using npm to work with the player and plugins.
## Plugin configuration
To configure a plugin after you've loaded it, you need to set a configuration object at the top level and include desired settings. For example, this is the minimum working configuration to initialize the player with the [Consent](/docs/wowza-flowplayer/plugins/consent/) plugin and an MPEG-DASH stream:
```javascript
const player = flowplayer("#player", {
src: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4",
// Use plugin constant to allow all tracking, no storage
consent: flowplayer.consent.tracking.ALL | flowplayer.consent.storage.NONE
});
```
```javascript
import flowplayer from "@flowplayer/player";
import "@flowplayer/player/flowplayer.css";
import Consent from "@flowplayer/player/plugins/consent";
import Dash from "@flowplayer/player/plugins/dash";
const flowplayerWithPlugins = flowplayer(Dash, Consent);
const player = flowplayerWithPlugins("#player", {
src: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4",
// Use plugin constant to allow all tracking, no storage
consent: Consent.tracking.ALL | Consent.storage.NONE
});
```
### Plugin constants
In the previous code snippet, you can see that some plugins allow for the usage of plugin constants during configuration. The way you leverage these constants depends on how you embed the player in your site. If we continue working with the Consent plugin, we can:
* Allow all tracking in a CDN player implementation with the `flowplayer.consent.tracking.ALL` plugin constant.
* Allow all tracking in an npm player implementation with the `Consent.tracking.ALL` plugin constant instead.
## Plugin events
The way you handle plugin events depends on the context that you're using to [embed the player in your site](/docs/wowza-flowplayer/player/embed/embed-with-standalone/#1-embed-the-player-in-your-site).
* The CDN approach relies on the Universal Module Definition (UMD) format that uses global variables and the window object to make the Wowza Flowplayer library accessible across browsers and multiple environments.
* When you embed the player using Node Package Manager (npm), you're leveraging the ECMAScript Modules (ESM) approach instead, where variables exist within the context of imported modules.
### Handle CDN events
If you're a CDN user working with plugin events, you can utilize the plugin constants from the UMD. In this context, constants, classes, and methods are attached to the `flowplayer` object, and you can use an event like `flowplayer.hls.events.ATTACHED` to work with the plugin and your player instance:
```js
player.on(flowplayer.hls.events.ATTACHED, (ev) => {
console.log(ev.detail.hls.userConfig);
});
```
### Handle npm events
If you're an npm user, you must first import the plugin, then include the constant from the plugin class itself. For example, with the same HLS `ATTACHED` event, you can add the `HLS.events.ATTACHED` event as in the following example:
```ts
import HLS from "@flowplayer/player/plugins/hls";
player.on(HLS.events.ATTACHED, (ev) => {
console.log(ev.detail.hls.userConfig);
});
```