> For the complete documentation index, see [llms.txt](https://stash-it.gitbook.io/stash-it/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://stash-it.gitbook.io/stash-it/plugins.md).

# 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
```
