MCPcopy Create free account
hub / github.com/mkdocstrings/griffe

github.com/mkdocstrings/griffe @2.1.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 2.1.0 ↗ · + Follow
1,396 symbols 5,497 edges 91 files 999 documented · 72% 16 cross-repo links updated 21d ago2.1.0 · 2026-06-19★ 66433 open issues

Browse by type

Functions 1,229 Types & classes 163 Endpoints 4
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Griffe

ci documentation pypi version gitter radicle

Griffe logo, created by François Rozet

Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API.

Griffe, pronounced "grif" (/ɡʁif/), is a french word that means "claw", but also "signature" in a familiar way. "On reconnaît bien là sa griffe."

Installation

pip install griffe

With uv:

uv tool install griffe

Usage

Dump JSON-serialized API

On the command line, pass the names of packages to the griffe dump command:

$ griffe dump httpx fastapi
{
  "httpx": {
    "name": "httpx",
    ...
  },
  "fastapi": {
    "name": "fastapi",
    ...
  }
}

See the Serializing chapter for more examples.

Check for API breaking changes

Pass a relative path to the griffe check command:

$ griffe check mypackage --verbose
mypackage/mymodule.py:10: MyClass.mymethod(myparam):
Parameter kind was changed:
  Old: positional or keyword
  New: keyword-only

For src layouts:

$ griffe check --search src mypackage --verbose
src/mypackage/mymodule.py:10: MyClass.mymethod(myparam):
Parameter kind was changed:
  Old: positional or keyword
  New: keyword-only

It's also possible to directly check packages from PyPI.org (or other indexes configured through PIP_INDEX_URL). This feature requires that you install Griffe with the pypi extra:

pip install griffe[pypi]

The command syntax is:

griffe check package_name -b project-name==2.0 -a project-name==1.0

See the Checking chapter for more examples.

Load and navigate data with Python

With Python, loading a package:

import griffe

fastapi = griffe.load("fastapi")

Finding breaking changes:

import griffe

previous = griffe.load_git("mypackage", ref="0.2.0")
current = griffe.load("mypackage")

for breakage in griffe.find_breaking_changes(previous, current):
    ...

See the Loading chapter for more examples.

Sponsors

Silver sponsors

FastAPI

Bronze sponsors

Nixtla


ofek samuelcolvin tlambert03 ssbarnea femtomc cmarqu kolenaIO ramnes machow BenHammersley trevorWieland MarcoGorelli analog-cbarber OdinManiac rstudio-sponsorship schlich butterlyn livingbio NemetschekAllplan EricJayHartman 15r10nk activeloopai roboflow cmclaughlin blaisep RapidataAI rodolphebarbanneau theSymbolSyndicate blakeNaccarato ChargeStorm Alphadelta14 Cusp-AI

And 7 more private sponsor(s).

Core symbols most depended-on inside this repo

Shape

Function 674
Method 555
Class 163
Route 4

Languages

Python100%

Modules by API surface

packages/griffelib/src/griffe/_internal/models.py186 symbols
packages/griffelib/src/griffe/_internal/expressions.py142 symbols
packages/griffelib/src/griffe/_internal/diff.py75 symbols
packages/griffelib/src/griffe/_internal/docstrings/models.py66 symbols
packages/griffelib/tests/test_docstrings/test_google.py62 symbols
packages/griffelib/tests/test_docstrings/test_sphinx.py56 symbols
packages/griffelib/tests/test_docstrings/test_numpy.py51 symbols
packages/griffelib/src/griffe/_internal/extensions/base.py37 symbols
packages/griffelib/tests/test_extensions/test_base.py34 symbols
packages/griffelib/tests/test_models.py30 symbols
packages/griffelib/src/griffe/_internal/agents/inspector.py30 symbols
packages/griffelib/src/griffe/_internal/mixins.py29 symbols

For agents

$ claude mcp add griffe \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page