# Concept: Shareable configuration

Most commonly shareable configuration is delivered as npm package exporting
an object containing `.rules` as default. To use shared configuration you specify it as item in the `.extends` array:

```js
// commitlint.config.js
module.exports = {
  extends: ['example'], // => @commitlint-config-example
};
```

This causes `commitlint` to pick up `commitlint-config-example`. Make it available by installing it.

```bash
npm install --save-dev commitlint-config-example
```

The rules found in `commitlint-config-example` are merged with the rules in `commitlint.config.js`, if any.

This works recursively, enabling shareable configuration to extend on an indefinite chain of other shareable configurations.

## Relative config

You can also load local configuration by using a relative path to the file.

> This must always start with a `.` (dot).

```js
// commitlint.config.js
module.exports = {
  extends: ['./example'], // => ./example.js
};
```

## Scoped packages

When using scoped packages you have two options.

You can provide the full path of the package like:

```js
// commitlint.config.js
module.exports = {
  extends: ['@commitlint/config-conventional'], // => commitlint/config-conventional
};
```

Or just the scope/owner of the package.

> Just like "normal" extends listed above, this will add `<scope>/commitlint-config`.

```js
// commitlint.config.js
module.exports = {
  extends: ['@coolcompany'], // => coolcompany/commitlint-config
};
```

If you don't use the exact `<scope>/commitlint-config` pattern, you have to provide the full name of the package.