---
description: >-
  Plugins for stash-it are things that can influence the data that flows through
  cache instance's methods. Plugins can also add new functionality (extend the
  API).
---

# Plugins

A plugin is an object that consists of, at least, one property: `hooks` and / or `createExtensions`. Here is an example of full grown plugin (without the body):

```javascript
{
    hooks: [],
    createExtensions: ({ cacheInstance, getPreData, getPostData }) => {}
}
```

## **How to use a plugin? What do I get from it?**

If you take for example [stash-it-plugin-debug](https://github.com/smolak/stash-it-plugin-debug) you gain two things (read more on this plugin's repo page):

1. Data that flows in, through and out of each cache's method is going to be tracked (using passed callback, e.g. `console.log`).
2. Adds new method `runDiangnostics()`.

Here's how you use it:

```javascript
import createDebugPlugin from 'stash-it-plugin-debug';

// assuming that you already have cache instance
const debugPlugin = createDebugPlugin(console.log);
const cacheWithPlugins = cache.registerPlugins([ debugPlugin ]);

// without the plugin, this method would not be here
cacheWithPlugins.runDiagnostics(); // runs the diagnostics

cache.runDiagnostics(); // error, runDiagnostics is not a function
```
