# Plugin Libraries

There are three types of third-party libraries for all plugins: *preconfigured*, *default*, and *plugin specific*.

### Preconfigured Libraries

Preconfigured libraries are libraries that have the same configuration for all plugins. These are included in an object `this.pluginLibraries`. The libraries included are:

* [`app`](https://www.npmjs.com/package/express) - Express app (v4.16.2)
* [`toolsLib`](https://github.com/bitholla/hollaex-tools-lib) - HollaEx Tools Library
* [`loggerPlugin`](https://www.npmjs.com/package/winston) - Winston logger (v3.2.1)

### Default Libraries

Default libraries are libraries that are already installed in the Kit itself. These can be imported using `require`. Please take a look at the Kit [`package.json`](https://github.com/bitholla/hollaex-kit/blob/master/server/package.json) file for all default libraries included. Some are:

<details>

<summary>Click here to view the default libraries</summary>

* [`lodash`](https://www.npmjs.com/package/lodash) - (v4.17.20)
* [`expressValidator`](https://www.npmjs.com/package/express-validator) - (v6.7.0)
* [`multer`](https://www.npmjs.com/package/multer) - (v1.4.2)
* [`moment`](https://www.npmjs.com/package/moment) - (v2.21.0)
* [`mathjs`](https://www.npmjs.com/package/mathjs) - (v3.20.2)
* [`bluebird`](https://www.npmjs.com/package/bluebird) - (v3.5.3)
* [`rp`](https://www.npmjs.com/package/request-promise) - Request promise (v4.2.2)
* [`uuid`](https://www.npmjs.com/package/uuid) - (v3.2.1)
* [`umzug`](https://www.npmjs.com/package/umzug) - (v2.3.0)
* [`sequelize`](https://www.npmjs.com/package/sequelize) - (v4.37.7)
* [`json2csv`](https://www.npmjs.com/package/json2csv) - (v4.5.4)
* [`flat`](https://www.npmjs.com/package/flat) - (v5.0.0)
* [`cron` ](https://www.npmjs.com/package/node-cron) - (v2.8.5)
* [`bcryptjs`](https://www.npmjs.com/package/bcryptjs) - (v2.4.3)
* [`validator`](https://www.npmjs.com/package/validator) - (v9.4.1)
* [`cors`](https://www.npmjs.com/package/cors) - (v2.8.5)

</details>

### Plugin Specific Libraries

Plugin-specific libraries are libraries that are not installed in the Kit but are required for the plugin. These can be installed through the `prescript.install` object in the plugin `config.json file` and imported using `require`.&#x20;

{% hint style="danger" %}
**Do not add** any plugin-specific libraries that are already included by default.&#x20;

A different version could be installed which can cause unexpected bugs.
{% endhint %}

To add a plugin-specific library on installation, include the library name inside the `install` array in the  `prescript` object. To specify a version, include the `@` symbol with the version desired (similar to how a basic npm install works).

```javascript
{
    ...
    prescript: {
        install: ['hello-world-npm']
    },
    ...
```
