Community curated plugins for c-lightning.
Name | Short description |
---|---|
autopilot | An autopilot that suggests channels that should be established |
backup | A simple and reliable backup plugin |
boltz-channel-creation | A c-lightning plugin for Boltz Channel Creation Swaps |
btcli4j | A Bitcoin Backend to enable safely the pruning mode, and support also rest APIs. |
csvexportpays | A plugin that exports all payments to a CSV file |
currencyrate | A plugin to convert other currencies to BTC using web requests |
donations | A simple donations page to accept donations from the web |
drain | Draining, filling and balancing channels with automatic chunks. |
event-websocket | Exposes notifications over a Websocket |
feeadjuster | Dynamic fees to keep your channels more balanced |
graphql | Exposes the c-lightning API over graphql |
invoice-queue | Listen to lightning invoices from multiple nodes and send to a redis queue for processing |
lightning-qt | A bitcoin-qt-like GUI for lightningd |
monitor | helps you analyze the health of your peers and channels |
persistent-channels | Maintains a number of channels to peers |
probe | Regularly probes the network for stability |
prometheus | Lightning node exporter for the prometheus timeseries server |
pruning | This plugin manages pruning of bitcoind such that it can always sync |
rebalance | Keeps your channels balanced |
reckless | An experimental plugin manager (search/install plugins) |
requestinvoice | Http server to request invoices |
sauron | A Bitcoin backend relying on Esplora's API |
sitzprobe | A Lightning Network payment rehearsal utility |
sparko | RPC over HTTP with fine-grained permissions, SSE and spark-wallet support |
summary | Print a nice summary of the node status |
trustedcoin | Replace your Bitcoin Core with data from public block explorers |
webhook | Dispatches webhooks based from event notifications |
watchtower | Watchtower client for The Eye of Satoshi |
zmq | Publishes notifications via ZeroMQ to configured endpoints |
To install and activate a plugin you need to stop your lightningd and restart it
with the plugin
argument like this:
lightningd --plugin=/path/to/plugin/directory/plugin_file_name.py
Notes:
- The
plugin_file_name.py
must have executable permissions:chmod a+x plugin_file_name.py
- A plugin can be written in any programming language, as it interacts with
lightningd
purely using stdin/stdout pipes.
Alternatively, especially when you use multiple plugins, you can copy or symlink
all plugin directories into your ~/.lightning/plugins
directory. The daemon
will load each executable it finds in sub-directories as a plugin. In this case
you don't need to manage all the --plugin=...
parameters.
Most of the plugins can be managed using the RPC interface. Use
lightning-cli plugin start /path/to/plugin/directory/plugin_file_name
to start it, and
lightning-cli plugin stop /path/to/plugin/directory/plugin_file_name
to stop it.
As a plugin developer this option is configurable with all the available plugin libraries,
and defaults to true
.
To simplify plugin development you can rely on pyln-client
for the plugin
implementation, pyln-proto
if you need to parse or write lightning protocol
messages, and pyln-testing
in order to write tests. These libraries can be
retrieved in a number of different ways:
- Using
pip
tools:pip3 install pyln-client pyln-testing
- Using the
PYTHONPATH
environment variable to include your clightning's shippedpyln-*
libraries:
export PYTHONPATH=/path/to/lightnind/contrib/pyln-client:/path/to/lightnind/contrib/pyln-testing:$PYTHONPATH
The pyln-testing
library provides a number of helpers and fixtures to write
tests. While not strictly necessary, writing a test will ensure that your
plugin is working correctly against a number of configurations (both with and
without DEVELOPER
, COMPAT
and EXPERIMENTAL_FEATURES
), and more
importantly that they will continue to work with newly release versions of
c-lightning.
Writing a test is as simple as this:
- The framework will look for unittest filenames starting with
test_
. - The test functions should also start with
test_
.
from pyln.testing.fixtures import *
pluginopt = {'plugin': os.path.join(os.path.dirname(__file__), "YOUR_PLUGIN.py")}
def test_your_plugin(node_factory, bitcoind):
l1 = node_factory.get_node(options=pluginopt)
s = l1.rpc.getinfo()
assert(s['network'] == 'regtest') # or whatever you want to test
Tests are run against pull requests, all commits on master
, as well as once
ever 24 hours to test against the latest master
branch of the c-lightning
development tree.
Running tests locally can be done like this:
(make sure the PYTHONPATH
env variable is correct)
pytest YOUR_PLUGIN/YOUR_TEST.py
Additionally, some Python plugins come with a requirements.txt
which can be
used to install the plugin's dependencies using the pip
tools:
pip3 install -r requirements.txt
Note: You might need to also specify the --user
command line flag depending on
your environment.
The minimum supported version of Python for this repository is currently 3.6.x
(23 Dec 2016).
Python plugins users must ensure to have a version >= 3.6
.
Python plugins developers must ensure their plugin to work with all Python versions >= 3.6
.
- @conscott's plugins
- @renepickhardt's plugins
- @rsbondi's plugins
- c-lightning plugins emulating commands of LND (lncli)
- Description of the plugin API
- C Plugin API by @rustyrussell
- Python Plugin API & RPC Client (PyPI) by @cdecker and a video tutorial by @renepickhardt
- Go Plugin API & RPC Client by @niftynei
- C++ Plugin API & RPC Client by @darosior
- Javascript Plugin API & RPC Client by @darosior
- Java Plugin API & RPC Client by @vincenzopalazzo