41 lines
1.9 KiB
Markdown
41 lines
1.9 KiB
Markdown
title: Creating Plugins
|
|
layout: docs
|
|
---
|
|
|
|
If you can't [find a plugin](/plugins) that fulfills your needs, it's probably a good time to think about creating your own. In this guide we'll discuss how to set up a custom plugin and briefly talk about various use cases. Later on we'll dive into the available [Plugin APIs](/docs/plugin_reference.html).
|
|
|
|
## Creating a plugin project
|
|
|
|
A plugin is really just another NodeJS project that takes a plugin API object and make use of it. To get started, all we have to do is creating a new directory and initializing it as an npm module:
|
|
|
|
```
|
|
$ mkdir yourpluginname
|
|
$ cd yourpluginname
|
|
$ npm init
|
|
```
|
|
|
|
Once that is done we can create an `index.js` file that contains the following code:
|
|
|
|
```
|
|
module.exports = function(embark) {
|
|
// plugin logic goes here
|
|
}
|
|
```
|
|
|
|
The `embark` object provides plenty of APIs to extend different functionalities of Embark, which can be found in the [Plugin Api Reference](plugin_reference.html).
|
|
|
|
## Usecase examples
|
|
|
|
Since the Plugin API surface is rather big, here are some usecase examples to sparkle some inspiration:
|
|
|
|
* Adding a Smart Contract file to the list of source files to be watched so they can be used by other Smart Contracts with `addContractFile()`
|
|
* Adding a Smart Contract configuration using `registerContractConfiguration()` (goes well with `addContractFile()`)
|
|
* Adding a hook that's called before a Smart Contract's binary will be deployed using `beforeDeploy()`
|
|
* Configure a custom provider for web3 initialization with `registerClientWeb3Provider()`
|
|
* Create your own custom Smart Contract wrapper logic using `registerContractsGeneration()`
|
|
* Adding a new command to Embark's interactive console using `registerConsoleCommand()`
|
|
* Adding support for other compilers such as Viper, LLL, etc. using `embark.registerCompiler()`
|
|
* Executing certain actions when Smart Contracts are deployed with `embark.events.on()`
|
|
* Registering a service in Embark - `registerServiceCheck()`
|
|
|