{
  "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
    },
    "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\n$ hsd --rs-host 0.0.0.0 --rs-port 53 # Warning: public!\nTo accept inbound connections, add the `--listen` flag.\n$ hsd --listen --max-inbound 50\n$ hsd --listen --public-host [my-public-ip-address] --max-inbound 50\n$ hsd --http-host '::' --api-key 'hunter2' --coinbase-address 'ts1qsu62stru80svj5xk6mescy65v0lhg8xxtweqsr'"
      }
    ],
    "field": [
      {
        "id": "ns_port",
        "label": "Authoritative DNS port",
        "description": "Default 5349.",
        "type": "integer",
        "option": [
          "--ns-port"
        ],
        "sources": [
          "readme"
        ]
      },
      {
        "id": "rs_host",
        "label": "Recursive DNS host",
        "description": "0.0.0.0 makes the resolver public.",
        "type": "string",
        "option": [
          "--rs-host"
        ],
        "sources": [
          "readme"
        ]
      },
      {
        "id": "rs_port",
        "label": "Recursive DNS port",
        "description": "Default 5350.",
        "type": "integer",
        "option": [
          "--rs-port"
        ],
        "sources": [
          "readme"
        ]
      },
      {
        "id": "listen",
        "label": "Accept inbound connections",
        "type": "boolean",
        "option": [
          "--listen"
        ],
        "sources": [
          "readme"
        ]
      },
      {
        "id": "max_inbound",
        "label": "Max inbound peers",
        "type": "integer",
        "option": [
          "--max-inbound"
        ],
        "sources": [
          "readme"
        ]
      },
      {
        "id": "public_host",
        "label": "Public host",
        "description": "Advertise this address to peers.",
        "type": "string",
        "option": [
          "--public-host"
        ],
        "sources": [
          "readme"
        ]
      },
      {
        "id": "http_host",
        "label": "HTTP host",
        "type": "string",
        "option": [
          "--http-host"
        ],
        "sources": [
          "readme"
        ]
      },
      {
        "id": "coinbase_address",
        "label": "Coinbase address",
        "type": "string",
        "option": [
          "--coinbase-address"
        ],
        "sources": [
          "readme"
        ]
      }
    ],
    "task": [
      {
        "id": "dns",
        "label": "Custom DNS ports",
        "fields": [
          "ns_port",
          "rs_host",
          "rs_port"
        ],
        "required": [
          "ns_port"
        ]
      },
      {
        "id": "inbound",
        "label": "Accept inbound peers",
        "fields": [
          "listen",
          "max_inbound",
          "public_host"
        ],
        "required": [
          "listen"
        ],
        "set": {
          "listen": [
            true
          ]
        }
      }
    ],
    "group": [
      {
        "id": "basic",
        "label": "Basic",
        "fields": [
          "ns_port",
          "rs_host",
          "rs_port",
          "listen",
          "max_inbound",
          "public_host"
        ]
      },
      {
        "id": "advanced",
        "label": "Advanced",
        "fields": [
          "http_host",
          "coinbase_address"
        ]
      }
    ]
  }
}
