{
  "id": "i2pd",
  "name": "i2pd",
  "homepage": "https://github.com/PurpleI2P/i2pd",
  "description": "A lightweight, high-performance C++ I2P router.",
  "executables": [
    "i2pd"
  ],
  "dotfiles": {
    "paths": [],
    "secret": [
      "~/.i2pd/i2pd.conf",
      "~/.i2pd/tunnels.conf"
    ]
  },
  "commands": {
    "format": 1,
    "label": "Run the i2pd router",
    "description": "Start the router with common overrides. Every option can also be set in i2pd.conf; transport, tunnel and per-service options are left out.",
    "quality": "ai-draft",
    "parser": {
      "end_of_options": "--",
      "interleave": "permute",
      "long_equals": true,
      "short_attached": false,
      "short_bundles": false
    },
    "source": [
      {
        "id": "man",
        "kind": "manual",
        "url": "https://github.com/PurpleI2P/i2pd/blob/openssl/debian/i2pd.1",
        "revision": "openssl 2026-10",
        "evidence": "--conf=\n--tunconf=\n--log=\nLogs destination: stdout, file, syslog\n--logfile=\n--loglevel=\nLog messages above this level (debug, info, warn, error, none)\n--datadir=\n--port=\n--ipv6\n--floodfill\n--bandwidth=\n"
      },
      {
        "id": "docs",
        "kind": "manual",
        "url": "https://github.com/PurpleI2P/i2pd_docs_en/blob/master/docs/user-guide/configuration.md",
        "revision": "master 2026-10",
        "evidence": "for example, running i2pd with argument `--port=10123` and setting option `port = 10123` in config file will have\n    ./i2pd --datadir .\nRun `./i2pd --help` to show builtin help message\nand use `--http.theme=hacker`.\ndaemon                                 | Router will go to background after start (default: true)\n"
      }
    ],
    "field": [
      {
        "id": "conf",
        "label": "Config file",
        "type": "path",
        "path": {
          "kind": "file",
          "role": "input"
        },
        "option": [
          "--conf"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "datadir",
        "label": "Data directory",
        "type": "path",
        "path": {
          "kind": "directory",
          "role": "input"
        },
        "option": [
          "--datadir"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "port",
        "label": "Listen port",
        "type": "integer",
        "option": [
          "--port"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "log",
        "label": "Log destination",
        "type": "enum",
        "option": [
          "--log"
        ],
        "choices": [
          {
            "value": "stdout",
            "label": "stdout"
          },
          {
            "value": "file",
            "label": "File"
          },
          {
            "value": "syslog",
            "label": "syslog"
          }
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "loglevel",
        "label": "Log level",
        "type": "enum",
        "option": [
          "--loglevel"
        ],
        "choices": [
          {
            "value": "debug",
            "label": "Debug"
          },
          {
            "value": "info",
            "label": "Info"
          },
          {
            "value": "warn",
            "label": "Warn"
          },
          {
            "value": "error",
            "label": "Error"
          },
          {
            "value": "none",
            "label": "None"
          }
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "logfile",
        "label": "Log file",
        "type": "path",
        "path": {
          "kind": "file",
          "role": "output"
        },
        "option": [
          "--logfile"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "ipv6",
        "label": "Enable IPv6",
        "type": "boolean",
        "option": [
          "--ipv6"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "floodfill",
        "label": "Run as floodfill",
        "type": "boolean",
        "option": [
          "--floodfill"
        ],
        "sources": [
          "man"
        ]
      },
      {
        "id": "bandwidth",
        "label": "Bandwidth limit",
        "description": "KBps or a letter alias L, O, P, X.",
        "type": "string",
        "option": [
          "--bandwidth"
        ],
        "sources": [
          "man"
        ]
      }
    ],
    "task": [
      {
        "id": "foreground",
        "label": "Run with a data directory",
        "fields": [
          "datadir",
          "log",
          "loglevel"
        ],
        "required": [
          "datadir"
        ]
      }
    ],
    "group": [
      {
        "id": "basic",
        "label": "Basic",
        "fields": [
          "conf",
          "datadir",
          "port",
          "log",
          "loglevel",
          "logfile"
        ]
      },
      {
        "id": "advanced",
        "label": "Advanced",
        "fields": [
          "ipv6",
          "floodfill",
          "bandwidth"
        ]
      }
    ]
  }
}
