id = "i2pd" name = "i2pd" homepage = "https://github.com/PurpleI2P/i2pd" description = "A lightweight, high-performance C++ I2P router." executables = ["i2pd"] [dotfiles] # The official i2pd configuration guide documents these per-user files. The # main config can contain HTTP authentication and tunnel definitions can hold # service credentials, so both files are treated as secrets end to end. # https://github.com/PurpleI2P/i2pd_docs_en/blob/master/docs/user-guide/configuration.md # https://github.com/PurpleI2P/i2pd/blob/openssl/contrib/i2pd.conf 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 } [[commands.source]] id = "man" kind = "manual" url = "https://github.com/PurpleI2P/i2pd/blob/openssl/debian/i2pd.1" revision = "openssl 2026-10" evidence = """ --conf= --tunconf= --log= Logs destination: stdout, file, syslog --logfile= --loglevel= Log messages above this level (debug, info, warn, error, none) --datadir= --port= --ipv6 --floodfill --bandwidth= """ [[commands.source]] 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 ./i2pd --datadir . Run `./i2pd --help` to show builtin help message and use `--http.theme=hacker`. daemon | Router will go to background after start (default: true) """ [[commands.field]] id = "conf" label = "Config file" type = "path" path = { kind = "file", role = "input" } option = ["--conf"] sources = ["man"] [[commands.field]] id = "datadir" label = "Data directory" type = "path" path = { kind = "directory", role = "input" } option = ["--datadir"] sources = ["man"] [[commands.field]] id = "port" label = "Listen port" type = "integer" option = ["--port"] sources = ["man"] [[commands.field]] id = "log" label = "Log destination" type = "enum" option = ["--log"] choices = [{ value = "stdout", label = "stdout" }, { value = "file", label = "File" }, { value = "syslog", label = "syslog" }] sources = ["man"] [[commands.field]] 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"] [[commands.field]] id = "logfile" label = "Log file" type = "path" path = { kind = "file", role = "output" } option = ["--logfile"] sources = ["man"] [[commands.field]] id = "ipv6" label = "Enable IPv6" type = "boolean" option = ["--ipv6"] sources = ["man"] [[commands.field]] id = "floodfill" label = "Run as floodfill" type = "boolean" option = ["--floodfill"] sources = ["man"] [[commands.field]] id = "bandwidth" label = "Bandwidth limit" description = "KBps or a letter alias L, O, P, X." type = "string" option = ["--bandwidth"] sources = ["man"] [[commands.task]] id = "foreground" label = "Run with a data directory" fields = ["datadir", "log", "loglevel"] required = ["datadir"] [[commands.group]] id = "basic" label = "Basic" fields = ["conf", "datadir", "port", "log", "loglevel", "logfile"] [[commands.group]] id = "advanced" label = "Advanced" fields = ["ipv6", "floodfill", "bandwidth"]