{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://json.schemastore.org/lychee.json",
  "x-tombi-toml-version": "v1.0.0",
  "title": "lychee configuration",
  "description": "Configuration for lychee, the fast asynchronous link checker.\nhttps://lychee.cli.rs/guides/config/",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "files_from": {
      "description": "Read input filenames from the given file or stdin if the path is '-'.",
      "type": "string"
    },
    "verbose": {
      "description": "Program log level.",
      "type": "string",
      "enum": ["error", "warn", "info", "debug", "trace"]
    },
    "no_progress": {
      "description": "Do not show the interactive progress bar.",
      "type": "boolean"
    },
    "host_stats": {
      "description": "Show per-host statistics at the end of the run.",
      "type": "boolean"
    },
    "extensions": {
      "$ref": "#/definitions/stringArray",
      "description": "File extensions to check."
    },
    "default_extension": {
      "description": "File extension used to parse input sources without a recognized file type.",
      "type": "string"
    },
    "cache": {
      "description": "Enable link caching.",
      "type": "boolean"
    },
    "max_cache_age": {
      "description": "Discard cached requests older than this duration, such as '2d' or '12h'.",
      "type": "string"
    },
    "cache_exclude_status": {
      "$ref": "#/definitions/statusSelector",
      "description": "Status codes or ranges ignored from the cache."
    },
    "dump": {
      "description": "Extract links without checking them.",
      "type": "boolean"
    },
    "dump_inputs": {
      "description": "Dump inputs instead of extracting or checking links.",
      "type": "boolean"
    },
    "archive": {
      "description": "Web archive to use for suggestions.",
      "type": "string",
      "enum": ["wayback"]
    },
    "suggest": {
      "description": "Suggest link replacements for broken links.",
      "type": "boolean"
    },
    "max_redirects": {
      "description": "Maximum number of allowed redirects.",
      "type": "integer",
      "minimum": 0
    },
    "max_retries": {
      "description": "Maximum number of retries per request.",
      "type": "integer",
      "minimum": 0
    },
    "min_tls": {
      "description": "Minimum accepted TLS version.",
      "type": "string",
      "enum": ["TLSv1_0", "TLSv1_1", "TLSv1_2", "TLSv1_3"]
    },
    "max_concurrency": {
      "description": "Maximum number of concurrent network requests.",
      "type": "integer",
      "minimum": 1
    },
    "host_concurrency": {
      "description": "Default maximum concurrent requests per host.",
      "type": "integer",
      "minimum": 0
    },
    "host_request_interval": {
      "description": "Default minimum interval between requests to the same host, such as '50ms' or '1s'.",
      "type": "string"
    },
    "threads": {
      "description": "Number of threads to utilize.",
      "type": "integer",
      "minimum": 1
    },
    "user_agent": {
      "description": "User agent sent with each request.",
      "type": "string"
    },
    "insecure": {
      "description": "Proceed for server connections considered insecure.",
      "type": "boolean"
    },
    "scheme": {
      "$ref": "#/definitions/stringArray",
      "description": "URL schemes to check, such as http, https, file, and mailto."
    },
    "offline": {
      "description": "Only check local files and block network requests.",
      "type": "boolean"
    },
    "include": {
      "$ref": "#/definitions/stringArray",
      "description": "URLs to check, with preference over excludes. Values are regular expressions."
    },
    "exclude": {
      "$ref": "#/definitions/stringArray",
      "description": "URLs and mail addresses excluded from checking. Values are regular expressions."
    },
    "exclude_path": {
      "$ref": "#/definitions/stringArray",
      "description": "Paths excluded from checking. Values are regular expressions."
    },
    "exclude_all_private": {
      "description": "Exclude all private, link-local, and loopback IP ranges.",
      "type": "boolean"
    },
    "exclude_private": {
      "description": "Exclude private IP address ranges.",
      "type": "boolean"
    },
    "exclude_link_local": {
      "description": "Exclude link-local IP address ranges.",
      "type": "boolean"
    },
    "exclude_loopback": {
      "description": "Exclude loopback IP address ranges and localhost.",
      "type": "boolean"
    },
    "include_mail": {
      "description": "Check email addresses.",
      "type": "boolean"
    },
    "remap": {
      "$ref": "#/definitions/stringArray",
      "description": "URI remapping rules."
    },
    "fallback_extensions": {
      "$ref": "#/definitions/stringArray",
      "description": "Fallback extensions to apply when a URL does not specify one."
    },
    "index_files": {
      "$ref": "#/definitions/stringArray",
      "description": "Index file names used to resolve directory links."
    },
    "header": {
      "$ref": "#/definitions/stringMap",
      "description": "Custom request headers applied to all requests."
    },
    "accept": {
      "$ref": "#/definitions/statusSelector",
      "description": "Accepted status codes or ranges for valid links."
    },
    "accept_timeouts": {
      "description": "Accept timed out requests.",
      "type": "boolean"
    },
    "include_fragments": {
      "description": "Fragment checking mode.",
      "type": "string",
      "enum": ["none", "anchor-only", "text-only", "full"]
    },
    "timeout": {
      "description": "Website timeout in seconds from connect to response finished.",
      "type": "integer",
      "minimum": 0
    },
    "retry_wait_time": {
      "description": "Minimum wait time in seconds between retries.",
      "type": "integer",
      "minimum": 0
    },
    "method": {
      "$ref": "#/definitions/methods",
      "description": "Request method or ordered list of fallback methods."
    },
    "base_url": {
      "description": "Base URL or absolute path used to resolve relative URLs in local files.",
      "type": "string"
    },
    "root_dir": {
      "description": "Root directory used when checking absolute local links.",
      "type": "string"
    },
    "basic_auth": {
      "$ref": "#/definitions/stringArray",
      "description": "HTTP basic auth selectors in the form 'example.com user:password'."
    },
    "github_token": {
      "description": "GitHub API token used to avoid rate limiting on github.com links.",
      "type": "string"
    },
    "skip_missing": {
      "description": "Skip missing input files.",
      "type": "boolean"
    },
    "no_ignore": {
      "description": "Do not skip files ignored by ignore files.",
      "type": "boolean"
    },
    "hidden": {
      "description": "Do not skip hidden directories and files.",
      "type": "boolean"
    },
    "include_verbatim": {
      "description": "Check links inside code and preformatted blocks.",
      "type": "boolean"
    },
    "glob_ignore_case": {
      "description": "Ignore case when expanding filesystem path glob inputs.",
      "type": "boolean"
    },
    "output": {
      "description": "Output file for the status report.",
      "type": "string"
    },
    "mode": {
      "description": "Output display mode.",
      "type": "string",
      "enum": ["plain", "color", "emoji", "task"]
    },
    "format": {
      "description": "Output format for the final status report.",
      "type": "string",
      "enum": ["compact", "detailed", "json", "junit", "markdown"]
    },
    "generate": {
      "description": "Generate special output instead of checking links.",
      "type": "string",
      "enum": [
        "man",
        "complete-bash",
        "complete-elvish",
        "complete-fish",
        "complete-powershell",
        "complete-zsh"
      ]
    },
    "require_https": {
      "description": "Treat HTTP links as errors when HTTPS is available.",
      "type": "boolean"
    },
    "cookie_jar": {
      "description": "File used to read and write cookies.",
      "type": "string"
    },
    "include_wikilinks": {
      "description": "Check WikiLinks in Markdown files.",
      "type": "boolean"
    },
    "preprocess": {
      "description": "Command used to preprocess input files.",
      "type": "object",
      "additionalProperties": false,
      "required": ["command"],
      "properties": {
        "command": {
          "type": "string"
        }
      }
    },
    "hosts": {
      "description": "Host-specific rate limiting and header overrides.",
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/hostConfig"
      }
    }
  },
  "definitions": {
    "statusSelector": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "integer",
          "minimum": 100,
          "maximum": 999
        },
        {
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer",
                "minimum": 100,
                "maximum": 999
              }
            ]
          }
        }
      ]
    },
    "methods": {
      "oneOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string",
            "minLength": 1
          }
        }
      ]
    },
    "hostConfig": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "concurrency": {
          "description": "Maximum concurrent requests allowed for this host.",
          "type": "integer",
          "minimum": 0
        },
        "request_interval": {
          "description": "Minimum interval between requests to this host.",
          "type": "string"
        },
        "headers": {
          "$ref": "#/definitions/stringMap",
          "description": "Custom request headers for this host."
        }
      }
    },
    "stringArray": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "stringMap": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    }
  }
}
