content: [build-system]
  build-backend = "hatchling.build"
  requires = [
    "hatch-vcs>=0.5",
    "hatchling>=1.27",
  ]
  
  [project]
  name = "pipdeptree"
  description = "Command line utility to show dependency tree of packages."
  readme = "README.md"
  keywords = [
    "application",
    "cache",
    "directory",
    "log",
    "user",
  ]
  license = "MIT"
  license-files = [
    "LICENSE",
  ]
  maintainers = [
    { name = "Bernát Gábor", email = "gaborjbernat@gmail.com" },
    { name = "Vineet Naik", email = "naikvin@gmail.com" },
  ]
  requires-python = ">=3.10"
  classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Environment :: Console",
    "Intended Audience :: Developers",
    "Operating System :: OS Independent",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3.14",
  ]
  dynamic = [
    "version",
  ]
  dependencies = [
    "packaging>=25",
    "pip>=25.2",
  ]
  optional-dependencies.graphviz = [
    "graphviz>=0.21",
  ]
  optional-dependencies.test = [
    "covdefaults>=2.3",
    "diff-cover>=9.7.1",
    "pytest>=8.4.2",
    "pytest-cov>=7",
    "pytest-mock>=3.15.1",
    "virtualenv<21,>=20.34",
  ]
  urls.Changelog = "https://github.com/tox-dev/pipdeptree/releases"
  urls.Documentation = "https://github.com/tox-dev/pipdeptree/blob/main/README.md#pipdeptree"
  urls.Homepage = "https://github.com/tox-dev/pipdeptree"
  urls.Source = "https://github.com/tox-dev/pipdeptree"
  urls.Tracker = "https://github.com/tox-dev/pipdeptree/issues"
  scripts.pipdeptree = "pipdeptree.__main__:main"
  
  [tool.hatch]
  build.hooks.vcs.version-file = "src/pipdeptree/version.py"
  version.source = "vcs"
  
  [tool.ruff]
  line-length = 120
  format.preview = true
  format.docstring-code-line-length = 100
  format.docstring-code-format = true
  lint.select = [
    "ALL",
  ]
  lint.ignore = [
    "A005",   # Don't care about shadowing builtin modules
    "ANN401", # Dynamically typed expressions (typing.Any) are disallowed in
    "COM812", # Conflict with formatter
    "CPY",    # No copyright statements
    "D104",   # Missing docstring in public package
    "D203",   # `one-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible
    "D212",   # `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible
    "DOC201", # TODO: Read the comment for DOC501
    "DOC402", # TODO: Read the comment for DOC501
    "DOC501", # TODO: Remove this once ruff supports Sphinx-style doc-strings; see https://github.com/astral-sh/ruff/issues/12434
    "INP001", # no implicit namespace
    "ISC001", # Conflict with formatter
    "S101",   # asserts allowed
    "S104",   # Possible binding to all interface
  ]
  lint.per-file-ignores."tests/**/*.py" = [
    "D",       # don"t care about documentation in tests
    "FBT",     # don"t care about booleans as positional arguments in tests
    "PLC2701", # Private import in tests
    "PLR0913", # any number of arguments in tests
    "PLR0917", # any number of arguments in tests
    "PLR2004", # Magic value used in comparison, consider replacing with a constant variable
    "S603",    # `subprocess` call: check for execution of untrusted input
  ]
  lint.isort = { known-first-party = [
    "pipdeptree",
  ], required-imports = [
    "from __future__ import annotations",
  ] }
  lint.preview = true
  
  [tool.codespell]
  builtin = "clear,usage,en-GB_to_en-US"
  count = true
  quiet-level = 3
  ignore-words-list = "master"
  
  [tool.pyproject-fmt]
  max_supported_python = "3.14"
  
  [tool.coverage]
  html.show_contexts = true
  html.skip_covered = false
  paths.source = [
    "src",
    ".tox/*/lib/python*/site-packages",
    "*/src",
  ]
  run.parallel = true
  run.plugins = [
    "covdefaults",
  ]
  report.fail_under = 88
  subtract_omit = "*/__main__.py"
  
  [tool.mypy]
  show_error_codes = true
  strict = true
  overrides = [
    { module = [
      "graphviz.*",
      "virtualenv.*",
    ], ignore_missing_imports = true },
  ]
  