id = "hsd"
name = "HSD"
homepage = "https://github.com/handshake-org/hsd"
description = "Handshake daemon and full node"
executables = ["hsd", "hsd-cli", "hsw-cli"]
platforms = ["macos", "linux"]
[dotfiles]
paths = []
secret = ["~/.hsd/hsd.conf", "~/.hsd/hsw.conf"]
side_effect = false
[commands]
format = 1
label = "Start hsd"
description = "Start the Handshake node with DNS ports and inbound connections configured. API keys, mining and wallet options are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = false, short_bundles = false }
[[commands.source]]
id = "readme"
kind = "manual"
url = "https://raw.githubusercontent.com/handshake-org/hsd/HEAD/README.md"
revision = "2026-10-27"
evidence = """$ hsd --ns-port 5300
$ hsd --rs-host 0.0.0.0 --rs-port 53 # Warning: public!
To accept inbound connections, add the `--listen` flag.
$ hsd --listen --max-inbound 50
$ hsd --listen --public-host [my-public-ip-address] --max-inbound 50
$ hsd --http-host '::' --api-key 'hunter2' \
--coinbase-address 'ts1qsu62stru80svj5xk6mescy65v0lhg8xxtweqsr'"""
[[commands.field]]
id = "ns_port"
label = "Authoritative DNS port"
description = "Default 5349."
type = "integer"
option = ["--ns-port"]
sources = ["readme"]
[[commands.field]]
id = "rs_host"
label = "Recursive DNS host"
description = "0.0.0.0 makes the resolver public."
type = "string"
option = ["--rs-host"]
sources = ["readme"]
[[commands.field]]
id = "rs_port"
label = "Recursive DNS port"
description = "Default 5350."
type = "integer"
option = ["--rs-port"]
sources = ["readme"]
[[commands.field]]
id = "listen"
label = "Accept inbound connections"
type = "boolean"
option = ["--listen"]
sources = ["readme"]
[[commands.field]]
id = "max_inbound"
label = "Max inbound peers"
type = "integer"
option = ["--max-inbound"]
sources = ["readme"]
[[commands.field]]
id = "public_host"
label = "Public host"
description = "Advertise this address to peers."
type = "string"
option = ["--public-host"]
sources = ["readme"]
[[commands.field]]
id = "http_host"
label = "HTTP host"
type = "string"
option = ["--http-host"]
sources = ["readme"]
[[commands.field]]
id = "coinbase_address"
label = "Coinbase address"
type = "string"
option = ["--coinbase-address"]
sources = ["readme"]
[[commands.task]]
id = "dns"
label = "Custom DNS ports"
fields = ["ns_port", "rs_host", "rs_port"]
required = ["ns_port"]
[[commands.task]]
id = "inbound"
label = "Accept inbound peers"
fields = ["listen", "max_inbound", "public_host"]
required = ["listen"]
set = { listen = [true] }
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["ns_port", "rs_host", "rs_port", "listen", "max_inbound", "public_host"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["http_host", "coinbase_address"]