Awesome
ssb-plugins
ssb-plugins
is a plugin that provides additional plugin related functionality to a secret-stack instance.
Without ssb-plugins
, plugins can only be loaded explicitly by an ssb-server with the .use()
method.
Generally speaking, this plugin provides the abilility for plugins to be loaded and run as a separate process, with communication over muxrpc.
There are 2 main ways that plugins can be enabled using ssb-plugins
:
- loaded explicitly as part of the creation of a secret-stack instance
- loaded as a set of user configured plugins, defined in one's ssb config folder
Additionally, if enabling plugins from user-configuration, making use of .use(require('ssb-plugins'))
explicitly will enable the CLI commands for users to install / uninstall / enable / disable plugins manually.
For explicit documentation of the CLI API, see here.
How to write plugins
See secret-stack/PLUGINS.md
for how to create a plugin
Examples
var createSbot = require('secret-stack')()
.use(require('ssb-db'))
createSbot
.use(require('ssb-plugins/load-user-plugins')()) //load user plugins from configuration. This may be used without the above!
.use(require('ssb-plugins/load')(path, name)) //load an out of process plugin directly.
.use(require('ssb-plugins')) //provides install, uninstall, enable, disable. (optional)
In-line out of process plugins
Run a plugin as a separate process. The process is started by the parent process, and they communicate by running muxrpc over stdio. This means that plugins may now be written in a language other than javascript.
out of process plugins can be loaded manually. using require('ssb-plugins/load')(location, name)`
var Load = require('ssb-plugins/load')
createSbot
.use(Load(path/to/plugin, 'plugin'))
Load user configured plugins
add all plugins defined in configuration.
createSbot
.use(require('ssb-plugins/load-user-plugins'))
Plugins are configured as following:
Normally this is created by sbot plugins.install <plugin-name>
but it can also be installed manually.
"plugins": {
//load a javascript plugin, exposed as "plugin1"
"ssb-plugin1: true,
//load your own version of plugin2. note it is renamed to "plugin2"
//so it is exposed as "plugin2" not "plugin2-forked"
"ssb-plugin2-forked: "plugin2",
"ssb-plugin2": {
enabled: true,
name, process
}
}
Installing a user configured ssb-plugin manually
cd ~/.ssb
npm install <plugin-name>
# open `./config` in your favorite editor
nano config
# set the config
"plugins": {
"<plugin-name>": true
}
# or if it's an out of process plugin
"plugins": {
"<plugin-name>": {
"process": true,
"name": ... //if it should be exposed with a different name...
}
}
License
MIT