home | help
LIGHTNINGD-CONFIG(5)					    LIGHTNINGD-CONFIG(5)

NAME
     lightningd-config -- Lightning daemon configuration file

SYNOPSIS
     ~/.lightning/config

DESCRIPTION
     When  lightningd(8) starts up it usually reads a general configuration file
     (default: $HOME/.lightning/config) then  a  network-specific  configuration
     file  (default: $HOME/.lightning/bitcoin/config).	This can be changed: see
     --conf and --lightning-dir.

     Note that some configuration options, marked dynamic can be changed at run-
     time: see lightning-setconfig(7): by default this	will  write  to  a  file
     called config.setconfig in the network-specific lightning directory, unless
     there is another config file with a name ending in ".setconfig".

     General  configuration  files  are  processed  first, then network-specific
     ones, then command line options: later options override earlier ones except
     addr options and log-level with subsystems, which accumulate.

     include followed by a filename includes another configuration file at  that
     point, relative to the current configuration file.

     All  these  options are mirrored as commandline arguments to lightningd(8),
     so --foo becomes simply foo in the configuration file,  and  --foo=bar  be-
     comes foo=bar in the configuration file.

     Blank lines and lines beginning with # are ignored.

DEBUGGING
     --help  will show you the defaults for many options; they vary with network
     settings so you can specify --network before --help to see the defaults for
     that network.

     The lightning-listconfigs(7) command will output a valid configuration file
     using the current settings.

OPTIONS
   General options
     *	developer

	This enables developer mode, allowing developer options and commands  to
	be  used.   It	also  disabled	deprecated  APIs;  use allow-deprecated-
	apis=true to re-enable them.

     *	allow-deprecated-apis=BOOL

	Enable deprecated options, JSONRPC commands, fields, etc. It defaults to
	true outside developer mode, but you should set it to false when testing
	to ensure that an upgrade won't break your configuration.

     *	help

	Print help and exit. Not very useful inside a  configuration  file,  but
	fun to put in other's config files while their computer is unattended.

     *	version

	Print  version	and  exit. Also useless inside a configuration file, but
	putting this in someone's config file may convince them to read this man
	page.

     *	database-upgrade=BOOL

	Upgrades to Core Lightning often change the database: once this is done,
	downgrades are not generally possible.	By default, Core Lightning  will
	exit  with  an error rather than upgrade, unless this is an official re-
	leased version.  If you really want to upgrade to a non-release version,
	you can set this to true (or false to never allow a  non-reversible  up-
	grade!).

     *	i-promise-to-fix-broken-api-user=FEATURE

	Deprecated  features get removed slowly (over 3 releases), but sometimes
	people still get surprised when they are finally removed.   As	long  as
	they haven't been actually fully removed, this option will re-enable it.
	Unless	we've  made a horrible mistake it's probably time to complain or
	fix to whatever is using the old API.	It  can  be  specified	multiple
	times for different features.

   Whitespace Handling
     Because  it's a common error, we automatically trim whitespace from the end
     of most configuration options. Exceptions are noted below:

     *	log-prefix: Preserves whitespace at the end.
     *	alias: Preserves whitespace at the end.

   Bitcoin control options:
     Bitcoin control options:

     *	network=NETWORK

	Select the network parameters (bitcoin, testnet,  testnet4,  signet,  or
	regtest).  This is not valid within the per-network configuration file.

     *	mainnet

	Alias for network=bitcoin.

     *	regtest

	Alias for network=regtest (added in v23.08)

     *	testnet

	Alias for network=testnet.

     *	testnet4

	Alias for network=testnet4.

     *	signet

	Alias for network=signet.

     *	bitcoin-cli=PATH [plugin bcli]

	The name of bitcoin-cli executable to run.

     *	bitcoin-datadir=DIR [plugin bcli]

	-datadir argument to supply to bitcoin-cli(1).

     *	bitcoin-rpcuser=USER [plugin bcli]

	The RPC username for talking to bitcoind(1).

     *	bitcoin-rpcpassword=PASSWORD [plugin bcli]

	The RPC password for talking to bitcoind(1).

     *	bitcoin-rpcconnect=HOST [plugin bcli]

	The bitcoind(1) RPC host to connect to.

     *	bitcoin-rpcport=PORT [plugin bcli]

	The bitcoind(1) RPC port to connect to.

     *	bitcoin-rpcclienttimeout=SECONDS [plugin bcli]

	The  bitcoind(1) RPC client timeout in seconds. Default is set to 60 in-
	stead of 900 to match bitcoin-retry-timeout default.  When  set  explic-
	itly, the higher value of it and bitcoin-retry-timeout is used.

     *	bitcoin-retry-timeout=SECONDS [plugin bcli]

	Number	of  seconds to keep trying a bitcoin-cli(1) command. If the com-
	mand keeps failing after this time, exit with a fatal error.

     *	rescan=BLOCKS

	Number of blocks to rescan from the current  head,  or	absolute  block-
	height if negative. This is only needed if something goes badly wrong.

   Lightning daemon options
     *	lightning-dir=DIR

	Sets the working directory. All files (except --conf and --lightning-dir
	on  the  command  line) are relative to this.  This is only valid on the
	command-line, or in a configuration file specified by --conf.

     *	subdaemon=SUBDAEMON:PATH

	Specifies an alternate subdaemon binary.  Current subdaemons  are  chan-
	neld, closingd, connectd, gossipd, hsmd, onchaind, and openingd.  If the
	supplied  path	is relative the subdaemon binary is found in the working
	directory. This option may be specified multiple times.

	So, subdaemon=hsmd:remote_signer would use a hypothetical remote signing
	proxy instead of the standard lightning_hsmd binary.

     *	pid-file=PATH

	Specify pid file to write to.

     *	log-level=LEVEL[:SUBSYSTEM][:PATH]

	What log level to print out: options are io,  trace,  debug,  info,  un-
	usual,	broken.   If  SUBSYSTEM is supplied, this sets the logging level
	for any subsystem (or nodeid) containing that string. If  PATH	is  sup-
	plied,	it means this log-level filter is only applied to that log-file,
	which is useful for creating logs to capture a specific subsystem.  This
	option may be specified multiple times.  Subsystems include:

	*  lightningd: The main lightning daemon

	*  database: The database subsystem

	*  wallet: The wallet subsystem

	*  gossipd: The gossip daemon

	*  plugin-manager: The plugin subsystem

	*  plugin-P: Each plugin, P = plugin path without directory

	*  hsmd: The secret-holding daemon

	*  connectd: The network connection daemon

	*  jsonrpc#FD: Each JSONRPC connection, FD = file descriptor number

	The following subsystems exist for each channel, where N  is  an  incre-
	menting internal integer id assigned for the lifetime of the channel:

	*  openingd-chan#N: Each opening / idling daemon

	*  channeld-chan#N: Each channel management daemon

	*  closingd-chan#N: Each closing negotiation daemon

	*  onchaind-chan#N: Each onchain close handling daemon

	So,  log-level=debug:plugin would set debug level logging on all plugins
	and the plugin manager.  log-level=io:chan#55 would set  IO  logging  on
	channel   number   55	(or   550,   for  that	matter).   log-level=de-
	bug:024b9a1fa8:/tmp/024b9a1fa8.debug.log would	set  debug  logging  for
	that channel only on the log-file=/tmp/024b9a1fa8.debug.log (or any node
	id containing that string).

     *	log-prefix=PREFIX

	Prefix	for  all  log lines: this can be customized if you want to merge
	logs with multiple daemons.  Usually you want to include a space at  the
	end of PREFIX, as the timestamp follows immediately.

     *	log-file=PATH

	Log  to  this  file  (instead of stdout).  If you specify this more than
	once you'll get more than one log file: - is used to mean stdout.  Send-
	ing lightningd(8) SIGHUP will cause it to reopen each file  (useful  for
	log rotation).

     *	log-timestamps=BOOL

	Set this to false to turn off timestamp prefixes (they will still appear
	in crash log files).

     *	rpc-file=PATH

	Set JSON-RPC socket (or /dev/tty), such as for $ lightning-cli(1).

     *	rpc-file-mode=MODE

	Set  JSON-RPC  socket  file mode, as a 4-digit octal number.  Default is
	0600, meaning only the user that launched  lightningd  can  command  it.
	Set  to  0660  to  allow  users with the same group to access the RPC as
	well.

     *	daemon

	Run in the background, suppress stdout and stderr.  Note that  you  need
	to specify log-file for this case.

     *	conf=PATH

	Sets configuration file, and disable reading the normal general and net-
	work  ones.  If  this is a relative path, it is relative to the starting
	directory, not lightning-dir (unlike other paths). PATH must  exist  and
	be readable (we allow missing files in the default case). Using this in-
	side a configuration file is invalid.

     *	wallet=DSN

	Identify  the  location  of  the  wallet. This is a fully qualified data
	source name, including a scheme such as sqlite3 or postgres followed  by
	the connection parameters.

	The   default	wallet	 corresponds   to   the  following  DSN:  --wal-
	let=sqlite3://$HOME/.lightning/bitcoin/lightningd.sqlite31

	For the sqlite3 scheme, you can specify a single backup database file by
	separating   it    with    a	:    character,    like    so:	  --wal-
	let=sqlite3://$HOME/.lightning/bitcoin/lightningd.sqlite3:/backup/light-
	ningd.sqlite3

	The following is an example of a postgresql wallet DSN:

	--wallet=postgres://user:pass@localhost:5432/db_name

	This will connect to a DB server running on localhost port 5432, authen-
	ticate	with  username user and password pass, and then use the database
	db_name. The database must exist, but the schema will be  managed  auto-
	matically by lightningd.

     *	hsm-passphrase

	If  set, you will be prompted to enter a passphrase for your HSM secret.
	This option supports both legacy 32-byte  hsm_secret  files  (where  the
	passphrase  encrypts  the  secret)  and new BIP39 mnemonic-based secrets
	(where the passphrase is used as additional entropy during seed  deriva-
	tion according to the BIP39 standard).

	Note  that  once you set a passphrase, this option will be mandatory for
	lightningd to start. If there is no HSM secret yet, lightningd will cre-
	ate  a	new  mnemonic-based  secret  that  will  be  secured  with  your
	passphrase following BIP39 specifications.

	For  legacy users: If you have an existing encrypted hsm_secret that was
	created with the deprecated encrypted-hsm option, this will continue  to
	work seamlessly.

	For  new mnemonic-based secrets: The passphrase becomes part of the seed
	derivation process as specified in BIP39, providing an additional factor
	of security. The mnemonic words alone are not sufficient to  derive  the
	seed without the passphrase.

	If  you  have  an  unencrypted legacy hsm_secret you want to encrypt, or
	need to manage your HSM secrets, see lightning-hsmtool(8).

	(Note: This option replaces the deprecated encrypted-hsm option.)

     *	grpc-host=HOST [plugin cln-grpc]

	Defines the GRPC server host. Default is 127.0.0.1.

     *	grpc-port=portnum [plugin cln-grpc]

	The port number for the GRPC plugin to listen for incoming  connections.
	Default is 9736.

     *	grpc-msg-buffer-size=number [plugin cln-grpc]

	The size of the buffer used by the GRPC-plugin. This buffer stores noti-
	fications  between  receiving  them  from lightningd and forwarding them
	over grpc. If buffer overflow occurs some notifications will not be  de-
	livered.

   Lightning node customization options
     *	recover=mnemonic

	Restore  the  node  from  a mnemonic.  For pre-25.12 nodes (which didn't
	have a mnemonic), use a 32-byte secret encoded as either a  codex32  se-
	cret string or a 64-character hex string.

	This  will fail if the hsm_secret file exists.	Your node will start the
	node in offline mode, for manual recovery.  The secret can be  extracted
	from the hsm_secret using lightning-hsmtool(8)'s getsecret.

     *	alias=NAME

	Up  to	32 bytes of UTF-8 characters to tag your node. Completely silly,
	since anyone can call their node anything they want. The default  is  an
	NSA-style  codename  derived  from your public key, but "Peter Todd" and
	"VAULTERO" are good options, too.

     *	rgb=RRGGBB

	Your favorite color as a hex code.

     *	fee-base=MILLISATOSHI

	Default: 1000. The base fee to charge for  every  payment  which  passes
	through.  Note	that millisatoshis are a very, very small unit! Changing
	this value will only affect new channels and not existing ones.  If  you
	want  to  change fees for existing channels, use the RPC call lightning-
	setchannel(7).

     *	fee-per-satoshi=MILLIONTHS

	Default: 10 (0.001%). This is the proportional fee to charge  for  every
	payment  which	passes	through.  As percentages are too coarse, it's in
	millionths, so 10000 is 1%, 1000 is 0.1%. Changing this value will  only
	affect	new  channels  and not existing ones. If you want to change fees
	for existing channels, use the RPC call lightning-setchannel(7).

     *	min-capacity-sat=SATOSHI [dynamic]

	Default: 10000. This value defines the minimal effective channel  capac-
	ity  in satoshi to accept for channel opening requests. This will reject
	any opening of a channel which can't pass an HTLC of least  this  value.
	Usually  this  prevents  a  peer opening a tiny channel, but it can also
	prevent a channel you open with a reasonable amount  and  the  peer  re-
	questing such a large reserve that the capacity of the channel falls be-
	low this.

     *	ignore-fee-limits=BOOL

	Allow  nodes  which  establish	channels to us to set any fee they want.
	This may result in a channel which cannot be  closed,  should  fees  in-
	crease,  but make channels far more reliable since we never close it due
	to unreasonable fees.  Note that this can be set on a per-channel  basis
	with lightning-setchannel(7).

     *	commit-time=MILLISECONDS

	How long to wait before sending commitment messages to the peer: in the-
	ory  increasing  this  would reduce load, but your node would have to be
	extremely busy node for you to even notice.

     *	force-feerates==VALUES

	Networks like regtest and testnet have unreliable fee estimates: we usu-
	ally treat them as the minimum (253 sats/kw) if we can't get them.  This
	allows override of one or more of our standard feerates (see  lightning-
	feerates(7)).	Up  to	5  values,  separated by '/' can be provided: if
	fewer are provided, then the final value is used for the remainder.  The
	values are in per-kw (roughly 1/4 of bitcoind's per-kb values), and  the
	order is "opening", "mutual_close", "unilateral_close", "delayed_to_us",
	"htlc_resolution", and "penalty".

	You would usually put this option in the per-chain config file, to avoid
	setting it on Bitcoin mainnet!	e.g. ~rusty/.lightning/regtest/config.

     *	htlc-minimum-msat=MILLISATOSHI

	Default:  0. Sets the minimal allowed HTLC value for newly created chan-
	nels.  If you want to change the htlc_minimum_msat  for  existing  chan-
	nels, use the RPC call lightning-setchannel(7).

     *	htlc-maximum-msat=MILLISATOSHI

	Default: unset (no limit). Sets the maximum allowed HTLC value for newly
	created channels. If you want to change the htlc_maximum_msat for exist-
	ing channels, use the RPC call lightning-setchannel(7).

     *	announce-addr-discovered=BOOL

	Explicitly  control the usage of discovered public IPs in node_announce-
	ment updates.  Default: 'auto' - Only if we don't have anything else  to
	announce.   Note: You also need to open TCP port 9735 on your router to-
	wards your node.  Note: Will always be disabled if you use  'always-use-
	proxy'.

     *	announce-addr-discovered-port=PORT  Sets  the public TCP port to use for
	announcing dynamically discovered IPs.	If unset, this defaults  to  the
	selected networks lightning port, which is 9735 on mainnet.

   Lightning channel and HTLC options
     *	large-channels (deprecated in v23.11)

	As  of	v23.11,  this  is the default (and thus, the option is ignored).
	Previously if you didn't specify this, channel	sizes  were  limited  to
	16777215  satoshi.  Note: this option is spelled large-channels but it's
	pronounced wumbo.

     *	watchtime-blocks=BLOCKS

	How long we need to spot an outdated close attempt: on opening a channel
	we tell our peer that this is how long they'll have to wait if they per-
	form a unilateral close.

     *	(deprecated in v23.05) max-locktime-blocks=BLOCKS

	The longest our funds can be delayed (ie. the  longest	watchtime-blocks
	our peer can ask for, and also the longest HTLC timeout we will accept).
	If our peer asks for longer, we'll refuse to create a channel, and if an
	HTLC asks for longer, we'll refuse it.

     *	funding-confirms=BLOCKS

	Confirmations  required  for the funding transaction when the other side
	opens a channel before the channel is usable.

     *	commit-fee=PERCENT

	The percentage of estimatesmartfee 2/CONSERVATIVE to use for the commit-
	ment transactions: default is 100.

     *	commit-feerate-offset=INTEGER

	The additional feerate a channel opener adds to their preferred  feerate
	to  lessen the odds of a disconnect due to feerate disagreement (default
	5).

     *	max-concurrent-htlcs=INTEGER

	Number of HTLCs one channel can handle concurrently in	each  direction.
	Should be between 1 and 483 (default 30).

     *	max-dust-htlc-exposure-msat=MILLISATOSHI

	Option	which limits the total amount of sats to be allowed as dust on a
	channel.

     *	cltv-delta=BLOCKS

	The number of blocks between incoming payments	and  outgoing  payments:
	this  needs  to  be enough to make sure that if we have to, we can close
	the outgoing payment before the incoming, or redeem  the  incoming  once
	the outgoing is redeemed.

     *	cltv-final=BLOCKS

	The number of blocks to allow for payments we receive: if we have to, we
	might  need  to redeem this on-chain, so this is the number of blocks we
	have to do that.

     *	accept-htlc-tlv-type=types

	Normally HTLC onions which contain unknown  even  fields  are  rejected.
	This  option  specifies  that  this type is to be accepted, and ignored.
	Can be specified multuple times. (Added in v23.08).

     *	min-emergency-msat=msat

	This is the amount of funds to keep in the wallet to close anchor  chan-
	nels  (which  don't  carry  their own transaction fees).  It defaults to
	25000sat, and is only maintained if there are any anchor  channels  (or,
	when  opening  an  anchor channel).  This amount may be insufficient for
	multiple closes at once, however.

   Cleanup control options:
     *	autoclean-cycle=SECONDS [plugin autoclean, dynamic]

	Perform search for things to clean every SECONDS seconds (default  3600,
	or 1 hour, which is usually sufficient).

     *	autoclean-networkevents-age=SECONDS [plugin autoclean, dynamic]

     How  old  network	events (in listnetworkevents) have to be before deletion
     (default 30 days, i.e. 2592000 seconds)

     *	autoclean-succeededforwards-age=SECONDS [plugin autoclean, dynamic]

	How old successful forwards (settled in listforwards status) have to  be
	before deletion (default 0, meaning never).

     *	autoclean-failedforwards-age=SECONDS [plugin autoclean, dynamic]

	How  old failed forwards (failed or local_failed in listforwards status)
	have to be before deletion (default 0, meaning never).

     *	autoclean-succeededpays-age=SECONDS [plugin autoclean, dynamic]

	How old successful payments (complete in listpays status) have to be be-
	fore deletion (default 0, meaning never).

     *	autoclean-failedpays-age=SECONDS [plugin autoclean, dynamic]

	How old failed payment attempts (failed in listpays status) have  to  be
	before deletion (default 0, meaning never).

     *	autoclean-paidinvoices-age=SECONDS [plugin autoclean, dynamic]

	How  old  invoices which were paid (paid in listinvoices status) have to
	be before deletion (default 0, meaning never).

     *	autoclean-expiredinvoices-age=SECONDS [plugin autoclean, dynamic]

	How old invoices which were not paid (and cannot be) (expired in listin-
	voices status) before deletion (default 0, meaning never).

     Note: prior to v22.11, forwards for channels which  were  closed  were  not
     easily distinguishable.  As a result, autoclean may delete more than one of
     these at once, and then suffer failures when it fails to delete the others.

   Payment and invoice control options:
     *	payment-fronting-node=nodeid

	Always	use  this nodeid as the entry point when we generate invoices or
	offers: currently, the node must be a neighbor we have a  channel  with.
	For BOLT11 invoices we will use a routehint with the alias for the short
	channel  id  to  provide  limited privacy (we still reveal our node id).
	For BOLT12 invoices and offers, we provide a blinded path from the  node
	to  us	which  provides  better privacy.  This can be specified multiple
	times for multiple fronting nodes.

     *	disable-mpp [plugin pay]

	Disable the multi-part payment sending support in the pay plugin. By de-
	fault the MPP support is enabled, but it can be desirable to disable  in
	situations  in	which  each payment should result in a single HTLC being
	forwarded in the network.

     *	invoices-onchain-fallback

	Add a (taproot) fallback address to invoices  produced	by  the  invoice
	command, so they invoices can also be paid onchain.

     *	xpay-handle-pay=BOOL [plugin xpay, dynamic]

	Setting this makes xpay intercept simply pay commands (default false).

     *	xpay-slow-mode=BOOL [plugin xpay, dynamic]

	Setting  this  makes xpay wait until all parts have failed/succeeded be-
	fore returning.  Usually this is unnecessary, as xpay will return on the
	first success (we have the preimage, if they don't take  all  the  parts
	that's	their problem) or failure (the destination could succeed another
	part, but it would mean it was only partially  paid).	The  default  is
	false.

     *	xpay-user-layer=name [plugin xpay]

	Specify  the  name  of	a layer xpay shall use always for every payment.
	This is specially useful when combined with  xpay-handle-pay  since  the
	layers	parameter  is  not  available in the pay interface.  This can be
	specified multiple times to add more layers.

     *	askrene-timeout=SECONDS [plugin askrene, dynamic]

	This option makes the getroutes call fail if it  takes	more  than  this
	many seconds.  Setting it to zero is a fun way to ensure your node never
	makes payments.

     *	askrene-max-threads=NUMBER [plugin askrene, dynamic]

	This  option  controls	how  many routes askrene will calculate at once:
	this is only useful on nodes which make multiple payments at  once,  and
	setting  the number higher than your number of cores/CPUS will not help.
	The default is 4.

     *	bkpr-currency=name [plugin bookkeeper, dynamic]

	The name is an ISO-4217 name (e.g. USD), which will be passed to curren-
	cyrate to fetch the exchange rate for that currency on	each  bookkeeper
	event.	Setting name to the empty string is equivalent not setting it.

     *	bwatch-poll-interval=MILLISECONDS [plugin bwatch]

	Delay between polls for new blocks from bitcoind (default: 30000).

     *	experimental-bwatch [plugin bwatch]

	Enable	the experimental bwatch chain watcher.	Without this, the plugin
	stays loaded but does not poll bitcoind or process watches.

   Networking options
     Note that for simple setups, the implicit autolisten option does the  right
     thing:  for  the mainnet (bitcoin) network it will try to bind to port 9735
     on IPv4 and IPv6, and will announce it to peers if it seems like  a  public
     address (and other default ports for other networks, as described below).

     Core  Lightning  also  support IPv4/6 address discovery behind NAT routers.
     If your node detects an new public address, it will  update  its  announce-
     ment.   For  this	to work you need to forward the default TCP port 9735 to
     your node.  IP discovery is only active  if  no  other  addresses	are  an-
     nounced.

     You can instead use addr to override this (eg. to change the port), or pre-
     cisely  control  where  to bind and what to announce with the bind-addr and
     announce-addr options. These will disable the autolisten logic, so you must
     specify exactly what you want!

     *	addr=[IPADDRESS[:PORT]]|autotor:TORIPADDRESS[:SERVICEPORT][/torport=TOR-
	PORT]|statictor:TORIPADDRESS[:SERVICEPORT][/torport=TORPORT][/tor-
	blob=[blob]]|HOSTNAME[:PORT]

	Set an IP address (v4 or v6) or automatic Tor address to listen  on  and
	(maybe) announce as our node address.

	An empty 'IPADDRESS' is a special value meaning bind to IPv4 and/or IPv6
	on  all  interfaces,  '0.0.0.0'  means bind to all IPv4 interfaces, '::'
	means 'bind to all IPv6 interfaces' (if you want to specify an IPv6  ad-
	dress  and  a port, use [] around the IPv6 address, like [::]:9750).  If
	'PORT' is not specified, the default  port  9735  is  used  for  mainnet
	(testnet: 19735, signet: 39735, regtest: 19846, testnet4: 49735).  If we
	can  determine	a  public IP address from the resulting binding, the ad-
	dress is announced.

	If the argument begins with 'autotor:' then it is followed by  the  IPv4
	or  IPv6  address  of the Tor control port (default port 9051), and this
	will be used to configure a Tor hidden service for port 9735 in case  of
	mainnet  (bitcoin)  network  whereas  other networks (testnet, testnet4,
	signet, regtest) will set the same default ports they  use  for  non-Tor
	addresses  (see  above).   The	Tor hidden service will be configured to
	point to the first IPv4 or IPv6 address we bind to  and  is  by  default
	unique to your node's id.

	If the argument begins with 'statictor:' then it is followed by the IPv4
	or  IPv6  address  of the Tor control port (default port 9051), and this
	will be used to configure a static Tor hidden service.	You can add  the
	text '/torblob=BLOB' followed by up to 64 Bytes of text to generate from
	this text a v3 onion service address text unique to the first 32 Byte of
	this text.  You can also use an postfix '/torport=TORPORT' to select the
	external  tor binding. The result is that over tor your node is accessi-
	ble by a port defined by you and possibly different from your local node
	port assignment.

	This option can be used multiple times to add more  addresses,	and  its
	use  disables  autolisten.   If necessary, and 'always-use-proxy' is not
	specified, a DNS lookup may be done  to  resolve  HOSTNAME  or	TORIPAD-
	DRESS'.

	If  HOSTNAME  was  given  that resolves to a local interface, the daemon
	will bind to that interface.

     *	bind-addr=[ws:][IPADDRESS[:PORT]]|SOCKETPATH|HOSTNAME[:PORT]

	Set an IP address or UNIX domain socket to listen to,  but  do	not  an-
	nounce.  A UNIX domain socket is distinguished from an IP address by be-
	ginning with a /.

	An empty 'IPADDRESS' is a special value meaning bind to IPv4 and/or IPv6
	on all interfaces, '0.0.0.0' means bind to  all  IPv4  interfaces,  '::'
	means  'bind  to all IPv6 interfaces'.	'PORT' is not specified, 9735 is
	used.

	The ws: prefix indicates to expect connections to use the RFC-6455  Web-
	Socket	protocol  instead  of  raw  TCP/IP.   This is more usable by web
	browsers directly, but often requires  a  reverse  proxy  to  speak  TLS
	("wss").

	This  option  can  be used multiple times to add more addresses, and its
	use disables autolisten.  If necessary, and  'always-use-proxy'  is  not
	specified, a DNS lookup may be done to resolve 'IPADDRESS'.

	If  a  HOSTNAME  was  given and always-use-proxy is not specified, a DNS
	lookup may be done to resolve it and  bind  to	a  local  interface  (if
	found).

     *	announce-addr=IPADDRESS[:PORT]|TORADDRESS.onion[:PORT]|dns:HOST-
	NAME[:PORT]

	Set  an  IP (v4 or v6) address or Tor address to announce; a Tor address
	is distinguished by ending in .onion. PORT defaults to 9735.

	Empty or wildcard IPv4 and IPv6 addresses don't make sense here.   Also,
	unlike	the  'addr' option, there is no checking that your announced ad-
	dresses are public (e.g. not localhost).

	This option can be used multiple times to add more  addresses,	and  its
	use disables autolisten.

	Since  v23.058,  the dns: prefix can be used to indicate that this host-
	name and port should be announced as a DNS hostname entry.  Please  note
	that  most mainnet nodes do not yet use, read or propagate this informa-
	tion correctly.

     *	announce-addr-dns=BOOL (deprecated in v23.08)

	When set to true (default is false), prefixes all HOSTNAME in  announce-
	addr with dns:.

     *	offline

	Do not bind to any ports, and do not try to reconnect to any peers. This
	can  be useful for maintenance and forensics, so is usually specified on
	the command line. Overrides all addr and bind-addr options.

     *	autoconnect-seeker-peers=NUMBER (added in v24.11)

	Sets the number of peers to gossip with: if we don't have this many con-
	nections, we will try to connect to random peers until we do.	The  de-
	fault is 10.

     *	autolisten=BOOL

	By  default, we bind (and maybe announce) on IPv4 and IPv6 interfaces if
	no addr, bind-addr or announce-addr options are specified. Setting  this
	to false disables that.

     *	proxy=IPADDRESS[:PORT]

	Set a socks proxy to use to connect to Tor nodes (or for all connections
	if  always-use-proxy  is  set).  The port defaults to 9050 if not speci-
	fied.

     *	always-use-proxy=BOOL

	Always use the proxy, even to connect to normal IP  addresses  (you  can
	still  connect	to Unix domain sockets manually). This also disables all
	DNS lookups, to avoid leaking information.

     *	disable-dns

	Disable the DNS bootstrapping mechanism to find a node by its node ID.

     *	message-padding=BOOL

	If set to true, connectd will send extra bytes to peers to make messages
	uniform length.  Some implementations don't accept  these  extra  bytes,
	and  our  detection  of  them is not always reliable, so this option de-
	faults to false.

     *	tor-service-password=PASSWORD

	Set a Tor control password, which may be needed for autotor: to  authen-
	ticate to the Tor control port.

     *	clnrest-port=PORT [plugin clnrest]

	Sets the REST server port to listen to (3010 is common).  If this is not
	specified, the clnrest plugin will be disabled.

     *	clnrest-protocol=PROTOCOL [plugin clnrest]

	Specifies the REST server protocol. Default is HTTPS.

     *	clnrest-host=HOST [plugin clnrest]

	Defines the REST server host. Default is 127.0.0.1.

     *	clnrest-certs=PATH  [plugin clnrest]

	Defines  the path for HTTPS cert & key. Default path is same as RPC file
	path to utilize gRPC's client certificate. If it is missing at the  con-
	figured  location,  new identity (client.pem and client-key.pem) will be
	generated.

     *	clnrest-cors-origins=CORSORIGINS  [plugin clnrest]

	Define multiple origins which are allowed  to  share  resources  on  web
	pages  to  a domain different from the one that served the web page. De-
	fault is * which allows all origins.

     *	clnrest-csp=CSPOLICY  [plugin clnrest]

	Creates a whitelist of trusted content sources that can run on a webpage
	and helps mitigate the risk  of  attacks.  Default  CSP  is  default-src
	'self';  font-src 'self'; img-src 'self' data:; frame-src 'self'; style-
	src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline';.

     *	clnrest-swagger-root=URL  [plugin clnrest]

	Root url for Swagger UI. Default is /.

     *	wss-bind-addr=[IPADDRESS[:PORT]]|SOCKETPATH|HOSTNAME[:PORT] [plugin wss-
	proxy]

	Sets the WSS address. This option can be used multiple times to add more
	addresses.

     *	wss-certs=PATH	[plugin wss-proxy]

	Defines the path for WSS cert & key. Default path is same  as  RPC  file
	path  to  utilize gRPC/clnrest's client certificate. If it is missing at
	the configured location, new identity  (client.pem  and  client-key.pem)
	will be generated.

     *	exposesecret-passphrase=passphrase  [plugin exposesecret]

	Defines  a  passphrase which will let users extract the hsm_secret using
	the exposesecret command.  If this is not set, the exposesecret  command
	always fails.

     *	currencyrate-add-source=NAME,URL,MEMBER [plugin cln-currencyrate]

	Add   a   price   source   for	the  cln-currencyrate  plugin,	of  form
	NAME,URL,MEMBERS where URL and MEMBERS can  have  {currency}  and  {cur-
	rency_lc}  to  substitute  for upper-case and lower-case currency names.
	MEMBERS is how to deconstruct the result, for example if the  result  is
	{"USD":  {"last_trade": 12456.79}} then MEMBERS would be USD,last_trade.
	If you need to deconstruct an array specify it's position with it's  in-
	dex, starting at 0. (added in v26.04)

	The default sources are:

	*  coingecko:
	   https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs%5C_currencies=%7Bcurrency%5C_lc%7D
	*  kraken:
	   https://api.kraken.com/0/public/Ticker?pair=XXBTZ%7Bcurrency%7D
	*  blockchain: https://blockchain.info/ticker
	*  bitstamp:
	   https://www.bitstamp.net/api/v2/ticker/btc%7Bcurrency%5C_lc%7D
	*  coindesk: https://data-api.coindesk.com/index/cc/v1/latest/tic
	*  coinbase: https://api.coinbase.com/v2/prices/BTC-%7Bcurrency%7D/spot
	*  binance:
	   https://data-api.binance.vision/api/v3/ticker/price?symbol=BTC%7Bcurrency%7D

     *	currencyrate-disable-source=NAME [plugin cln-currencyrate]

	Disable the cln-currencyrate source with this name. (added in v26.04)

   Lightning Plugins
     lightningd(8)  supports  plugins,	which offer additional configuration op-
     tions and JSON-RPC methods, depending on the plugin. Some are  supplied  by
     default (usually located in libexec/c-lightning/plugins/). If a plugins di-
     rectory  exists under lightning-dir that is searched for plugins along with
     any immediate subdirectories). You can specify additional paths too:

     *	plugin=PATH

	Specify a plugin to run as part of Core Lightning. This can be specified
	multiple times to add multiple plugins.  Note that unless plugins  them-
	selves	specify ordering requirements for being called on various hooks,
	plugins will be ordered by commandline, then config file.

     *	plugin-dir=DIRECTORY

	Specify a directory to look for plugins; all executable files  not  con-
	taining punctuation (other than ., - or _) in 'DIRECTORY are loaded. DI-
	RECTORY must exist; this can be specified multiple times to add multiple
	directories.   The  ordering  of plugins within a directory is currently
	unspecified.

     *	clear-plugins

	This option clears all plugin, important-plugin, and plugin-dir  options
	preceding  it,	including the default built-in plugin directory. You can
	still add plugin-dir, plugin,  and  important-plugin  options  following
	this and they will have the normal effect.

     *	disable-plugin=PLUGIN

	If PLUGIN contains a /, plugins with the same path as PLUGIN will not be
	loaded	at  startup.  Otherwise,  no  plugin with that base name will be
	loaded at startup, whatever directory it is in.  This option  is  useful
	for disabling a single plugin inside a directory.  You can still explic-
	itly  load  plugins  which have been disabled, using lightning-plugin(7)
	start.

     *	important-plugin=PLUGIN

	Speciy a plugin to run as part of Core Lightning.  This can be specified
	multiple times to add multiple plugins.  Plugins specified via this  op-
	tion  are considered so important, that if the plugin stops for any rea-
	son (including via lightning-plugin(7) stop), Core Lightning  will  also
	stop running.  This way, you can monitor crashes of important plugins by
	simply monitoring if Core Lightning terminates.  Built-in plugins, which
	are  installed	with  lightningd(8), are automatically considered impor-
	tant.

   Experimental Options
     Experimental options are subject to breakage  between  releases:  they  are
     made available for advanced users who want to test proposed features.

     *	fetchinvoice-noconnect

	Specifying  this  prevents fetchinvoice, sendinvoice and replying to in-
	voice request from trying to connect directly to the offering node as  a
	last resort.

     *	experimental-shutdown-wrong-funding

	Specifying this allows the wrong_funding field in _shutdown: if a remote
	node has opened a channel but claims it used the incorrect txid (and the
	channel  hasn't  been  used  yet at all) this allows them to negotiate a
	clean shutdown with the txid they offer (#4421).

     *	experimental-dual-fund

	Specifying this enables support for  the  dual	funding  protocol  (bolt
	#851), allowing both parties to contribute funds to a channel. The deci-
	sion  about whether to add funds or not to a proposed channel is handled
	automatically by a plugin that implements the appropriate logic for your
	needs. The default behavior is to not contribute funds.

     *	experimental-splicing

	Specifying this enables support for the splicing protocol  (bolt  #863),
	allowing  both	parties  to dynamically adjust the size a channel. These
	changes can be built interactively using PSBT and  combined  with  other
	channel  actions  including  dual  fund,  additional channel splices, or
	generic transaction activity.  The operations will  be	bundled  into  a
	single transaction. The channel will remain active while awaiting splice
	confirmation,  however you can only spend the smaller of the prior chan-
	nel balance and the new one.

	(deprecated in v26.04)

     *	experimental-lsps-client

	Specifying this enables client side support for the lsps protocol  (blip
	#50).  Core-Lightning only supports the lsps2 (blip #52) subprotocol de-
	scribing the creation of just-in-time-channel (JIT-channels)  between  a
	LSP and this client.

     *	experimental-lsps2-service

	Specifying  this enables a LSP JIT-Channel service according to the lsps
	protocol (blip #52). It requires a LSP-Policy plugin to be available and
	a experimental-lsps2-promise-secret to be set.

     *	experimental-lsps2-promise-secret=promisesecret

	Sets a promisesecret for the LSP JIT-Channel service. Is a  64-character
	hex string that acts as the secret for promises according to (blip #52).
	Is required if experimental-lsps2-service is set.

BUGS
     You should report bugs on our github issues page, and maybe submit a fix to
     gain our eternal gratitude!

AUTHOR
     Rusty  Russell  rusty@rustcorp.com.au  wrote this man page, and much of the
     configuration language, but many others did the hard work of  actually  im-
     plementing these options.

SEE ALSO
     lightning-listconfigs(7)  lightning-setchannel(7)	lightningd(8) lightning-
     hsmtool(8)

RESOURCES
     Main web site: https://github.com/ElementsProject/lightning

COPYING
     Note: the modules in the ccan/ directory have their own licenses,	but  the
     rest of the code is covered by the BSD-style MIT license.

Core Lightning v26.06.1 				    LIGHTNINGD-CONFIG(5)

home | help