NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #720 most downloaded on PyPI
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.
Last release 1 months ago
04 Sep 2026
Release timing varies
gaps range from 8 days to 3 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
5 years old
154 releases · first in 2021
One column per quarter.
Add option to give precedence to docstrings in stubs vs. source ( 09a2a13 by Timothée Mazzucotelli). Issue-447 , PR-481
warnings=False (5cb0ae2 by Timothée Mazzucotelli).is_imported (092ac31 by Timothée Mazzucotelli).Support await expressions ( 6b3caab by Vincent Gao). PR-479
await expressions (6b3caab by Vincent Gao). PR-479warn_missing_types to Sphinx return section reader (a15e782 by Timothée Mazzucotelli). Issue-mkdocstrings-python-337**-unpacking as **value instead of None: value (74ddbbf by Vincent Gao). PR-467Add tests to source distributions for griffecli and griffelib packages. Issue-452
griffecli and griffelib packages. Issue-452Add py.typed marker to packages ( ce46ba3 by Timothée Mazzucotelli).
This tag was signed with the committer’s verified signature .
pawamoy Timothée Mazzucotelli
GPG key ID: 7F557506715E2F19
Verified Learn about vigilant mode .
Allow setting type parameters through aliases ( 75c1236 by Timothée Mazzucotelli). Issue-449
This version removes previously deprecated API:
<small>Compare with 1.15.0</small>
This version removes previously deprecated API:
ExportedName: Public object was removedinfer_docstring_style(options): Parameter was removedparse_auto(options): Parameter was removedparse_google(options): Parameter was removedparse_numpy(options): Parameter was removedparse_sphinx(options): Parameter was removedassert_git_repo: Public object was removedget_latest_tag: Public object was removedget_repo_root: Public object was removedtmp_worktree: Public object was removedgriffe imports lazy in CLI (4772456 by Timothée Mazzucotelli).griffe, griffecli and griffelib uv workspaces (162c31c by Bartosz Sławecki). Issue-408, PR-434, Co-authored-by: Timothée Mazzucotelli dev@pawamoy.frv prefix) (c869c97 by Timothée Mazzucotelli). Upstream-issuePrefer stub over target object if not the same kind ( 196bcf4 by Kattni). Discussion-mkdocstrings-803 , PR-422
auto docstring style (infer from docstring) (4d0a9ee by Timothée Mazzucotelli).None from ObjectNode.module_path (06c2f2f by Frank David Martínez M). PR-419, Co-authored-by: Timothée Mazzucotelli dev@pawamoy.frThe on_wildcard_expansion event is deprecated. Instead, use the on_alias event, and check the [ wildcard_imported ][griffe.Alias.wildcard_imported] bo…
on_alias event's signature changed from on_alias(self, *, node: AST | ObjectNode, alias: Alias, agent: Visitor | Inspector, **kwargs) (an [analysis event][analysis-events]) to on_alias(self, *, alias: Alias, loader: GriffeLoader, **kwargs) ([a load event][load-events]). Use the new signature, or rename your method to on_alias_instance to keep the old signature (on_alias_instance is a new analysis event that replaces the old on_alias one). Backward compatibility is maintained until next major version.on_wildcard_expansion event is deprecated. Instead, use the on_alias event, and check the [wildcard_imported][griffe.Alias.wildcard_imported] boolean attribute of aliases.on_package_loaded event is renamed to on_package. Backward compatibility is maintained until next major version.assert_git_repo, get_repo_root, get_latest_tag and tmp_worktree) is deprecated, as they are not a core part of the library's functionality. These utilities are now part of our internal API.analysis attribute on objects and aliases, telling whether they were loaded through static or dynamic analysis, or created manually (d792a56 by Timothée Mazzucotelli).source_link property (see [Source information][source-information] in our docs) (2a8d824 by Timothée Mazzucotelli). Issue-361, Issue-mkdocstrings-python-253wildcard_imported boolean attribute to aliases, deprecate on_wildcard_expansion event (821300d by Timothée Mazzucotelli).on_alias and on_package_loaded (d3e50db by Timothée Mazzucotelli).Add is_init_method property ( 5417b70 by Timothée Mazzucotelli).
Reduce size of JSON dumps by removing keys with null values ( 58227eb by Timothée Mazzucotelli). Issue-403
Allow disabling "missing type/annotation" warnings ( 07564b4 by Timothée Mazzucotelli). Issue-mkdocstrings-437
Fix type parameters loading (ce41279 by Timothée Mazzucotelli).
<small>Compare with 1.11.0</small>
_griffe package under griffe._internal (8f37158 by Timothée Mazzucotelli).Add data to dict/json output (9731afc by Timothée Mazzucotelli).
<small>Compare with 1.10.0</small>
Allow adding sys.path to search paths when temporary visiting/inspecting package (42983bc by Timothée Mazzucotelli).
<small>Compare with 1.9.0</small>
sys.path to search paths when temporary visiting/inspecting package (42983bc by Timothée Mazzucotelli).Support PEP 695 generics (be28e9c by Victor Westerhuis). Issue-342, PR-348, Co-authored-by: Timothée Mazzucotelli
<small>Compare with 1.8.0</small>
Add method to functions and classes to build and return a stringified signature (8ef1486 by ISOREX). Discussion-376, PR-381, Co-authored-by: Timothée
<small>Compare with 1.7.3</small>
Don't output color codes with GitHub format (2666399 by Timothée Mazzucotelli). Issue-378
<small>Compare with 1.7.2</small>
Override exports when merging module stubs (94f23e7 by Timothée Mazzucotelli). Issue-mkdocstrings-751
<small>Compare with 1.7.1</small>
Never raise alias resolution error when resolving a name from an __init__ method scope (949ff7d by Timothée Mazzucotelli). Issue-374
Remove dependency to astunparse (Python 3.8-) (fd052b1 by Timothée Mazzucotelli).
<small>Compare with 1.6.3</small>
astunparse (Python 3.8-) (fd052b1 by Timothée Mazzucotelli).Allow setting lineno, endlineno and value through aliases (d038eaa by Timothée Mazzucotelli). Issue-griffe-pydantic-29
<small>Compare with 1.6.2</small>
lineno, endlineno and value through aliases (d038eaa by Timothée Mazzucotelli). Issue-griffe-pydantic-29Maintain exports order (__all__) (ded36bf by Timothée Mazzucotelli).
<small>Compare with 1.6.1</small>
__all__) (ded36bf by Timothée Mazzucotelli).Extend exports from already expanded modules (7e708cf by Timothée Mazzucotelli). Issue-746
<small>Compare with 1.6.0</small>
Allow passing literal docstring styles everywhere in the API, not just Parser enumeration values (053bf20 by Timothée Mazzucotelli).
<small>Compare with 1.5.7</small>
Parser enumeration values (053bf20 by Timothée Mazzucotelli).Don't conflate passed argument with class member (instance attribute) (4791b0b by Timothée Mazzucotelli). Issue-357
Remove Google parser support for Deprecated sections (previously never used) (425aece by Timothée Mazzucotelli).
<small>Compare with 1.5.5</small>
Fix check command's Markdown output format not displaying parameter names (5e7af22 by Timothée Mazzucotelli).
Append trailing comma to length-1 tuples (4fccca7 by Timothée Mazzucotelli). Issue-343
<small>Compare with 1.5.3</small>
Stop caching objects' inherited members, aliases' members and inherited members, classes' resolved bases (e8db3a2 by Timothée Mazzucotelli). Issue-346
Always resolve aliases when checking APIs (0b4f0da by Timothée Mazzucotelli).
<small>Compare with 1.5.1</small>
Sort Git tags using creatordate field, which works with both lightweight and annotated tags (3bfa401 by Timothée Mazzucotelli). Issue-327
Allow setting and deleting parameters within container (19f354d by Timothée Mazzucotelli).
<small>Compare with 1.4.1</small>
Drop support for Python 3.8 (f2d39b8 by Timothée Mazzucotelli).
<small>Compare with 1.4.0</small>
Add Markdown and GitHub output formats to the griffe check command (806805c by Timothée Mazzucotelli).
<small>Compare with 1.3.2</small>
griffe check command (806805c by Timothée Mazzucotelli).Normalize paths of temporary Git worktrees (0821e67 by Timothée Mazzucotelli). Issue-324
Refactor and fix logic again for fetching returns/yields/receives annotation from parents (a80bd3c by Timothée Mazzucotelli). Follow-up-of-PR-322
<small>Compare with 1.3.0</small>
Allow deselecting multiple or named items in Yields and Receives (344df50 by Marco Ricci). Issue-263
<small>Compare with 1.2.0</small>
Support attribute syntax in __all__ values (ad99794 by Timothée Mazzucotelli). Issue-316
Pre-emptively expand __all__ values and wildcard imports before firing the on_package_loaded event (21b3780 by Timothée Mazzucotelli).
<small>Compare with 1.1.0</small>
__all__ values and wildcard imports before firing the on_package_loaded event (21b3780 by Timothée Mazzucotelli).<small>Compare with 1.1.0</small>
__all__ values and wildcard imports before firing the on_package_loaded event (21b3780 by Timothée Mazzucotelli).Add on_wildcard_expansion event (c6bc6fa by Timothée Mazzucotelli). Issue-282
Extensions inherit from Extension, (VisitorExtension and InspectorExtension are removed)
<small>Compare with 0.49.0</small>
V1! :rocket: :fire: :rainbow:
Highlights:
Extension, (VisitorExtension and InspectorExtension are removed)as_dict/JSON) as a dictionary instead of a listgriffe module, nowhere elseRemoved objects:
griffe packagegriffe.DocstringWarningCallable classgriffe.When classgriffe.ExtensionType typegriffe.InspectorExtension classgriffe.VisitorExtension classgriffe.HybridExtension extensiongriffe.patch_logger functiongriffe.JSONEncoder.docstring_parser attributegriffe.JSONEncoder.docstring_options attributegriffe.Extensions.attach_visitor methodgriffe.Extensions.attach_inspector methodgriffe.Extensions.before_visit methodgriffe.Extensions.before_children_visit methodgriffe.Extensions.after_children_visit methodgriffe.Extensions.after_visit methodgriffe.Extensions.before_inspection methodgriffe.Extensions.before_children_inspection methodgriffe.Extensions.after_children_inspection methodgriffe.Extensions.after_inspection methodgriffe.GriffeLoader.load_module methodhas_special_name and has_private_name properties on objectsis_explicitely_exported and is_implicitely_exported properties on objectsmember_is_exported method on objectsRenamed/moved objects:
griffe.Function.setter -> griffe.Attribute.settergriffe.Function.deleter -> griffe.Attribute.deleterSignatures:
griffe.docstring_warning(name) parameter was removedgriffe.GriffeLoader.load(module) parameter was removedgriffe.load(module) parameter was removedgriffe.load_git(module) parameter was removedgriffe.find_breaking_changes(ignore_private) parameter was removedCancel deprecation of get_logger and patch_loggers (and deprecate patch_logger instead). Extensions need loggers too, distinct ones, and they were for…
<small>Compare with 0.48.0</small>
WARNING: ⚡ Imminent v1! ⚡🚀 See v0.46.
get_logger and patch_loggers (and deprecate patch_logger instead). Extensions need loggers too, distinct ones, and they were forgotten... Sorry for the back and forth 🙇setter and deleter on Function are deprecated. They were moved into the Attribute class since properties are instantiated as attributes, not functions.**kwargs in their signature, to allow forward-compatibility. Accepting **kwargs also makes it possible to remove unused arguments from the signature.lineno, endlineno). Version 0.49 is able to load both lists and dictionaries from JSON dumps, and version 1 will maintain this ability. However external tools loading JSON dumps will need to be updated.temporary_inspected_package helper (3c4ba16 by Timothée Mazzucotelli).temporary_visited_package (7d5408a by Timothée Mazzucotelli).inits parameter in temporary_visited_package (a4859b7 by Timothée Mazzucotelli).__all__) (f82317a by Timothée Mazzucotelli). Issue-249, Related-to-PR-251source property to docstrings, which return the docstring lines as written in the source (3f6a71a by Timothée Mazzucotelli). Issue-90setter and deleter to Attribute class instead of Function, since that's how properties are instantiated (309c6e3 by Timothée Mazzucotelli). Issue-311has_docstrings, unless they're public (9296ca7 by Timothée Mazzucotelli). Issue-302**kwargs in extension hooks to allow forward-compatibility (2621d52 by Timothée Mazzucotelli). Issue-312patch_loggers in favor of patch_logger (a20796a by Timothée Mazzucotelli).load_pypi in non-Insiders version (a69cffd by Timothée Mazzucotelli).str, Enum instead of StrEnum which needs a backport (77f1544 by Timothée Mazzucotelli). Issue-307All submodules are deprecated. All objects are now exposed in the top-level griffe module.
<small>Compare with 0.47.0</small>
WARNING: ⚡ Imminent v1! ⚡🚀 See v0.46.
griffe module."griffe" in v1. In v1 our single "griffe" logger will provide a method to temporarily disable logging, [logger.disable()][griffe.Logger.disable], since that's the most common third-party use.get_logger function is deprecated. Instead, we'll use a global logger internally, and users are welcome to use it too.patch_loggers function is renamed patch_logger.docstring_warning][griffe.docstring_warning] function can now directly log a warning message instead of returning a callable that does. Passing it a logger name (to get a callable) is deprecated in favor of passing it a docstring, message and offset directly.FORCE_COLOR environment variable (e1b7bd9 by Timothée Mazzucotelli).__all__ convention when checking if a module is public (5abf4e3 by Timothée Mazzucotelli).is_public property (c2bbc10 by Timothée Mazzucotelli).dataclasses internal modules to models (5555de6 by Timothée Mazzucotelli)._griffe internal package (cbce6a5 by Timothée Mazzucotelli).Add deprecated attribute and is_deprecated property to objects/aliases (2a75d84 by Timothée Mazzucotelli).
<small>Compare with 0.46.1</small>
WARNING: ⚡ Imminent v1! ⚡🚀 See v0.46.
has_private_name and has_special_name properties on objects and aliases have been renamed is_private and is_special. The is_private property now only returns true if the name is not special.deprecated attribute and is_deprecated property to objects/aliases (2a75d84 by Timothée Mazzucotelli).is_imported property to objects/aliases (de926cc by Timothée Mazzucotelli).is_class_private property to objects/aliases (491b6c4 by Timothée Mazzucotelli).has_private_name and has_special_name to is_private and is_special (ae7c7e7 by Timothée Mazzucotelli).WARNING: ⚡ Imminent v1! ⚡🚀 See [v0.46](#0460-2024-06-16).
<small>Compare with 0.46.0</small>
WARNING: ⚡ Imminent v1! ⚡🚀 See v0.46.
…code using Griffe before upgrading to v1. See breaking changes and deprecations for v0.46 below.
<small>Compare with 0.45.3</small>
WARNING: ⚡ Imminent v1! ⚡🚀 We are working on v1, and it will come soon, so we recommend that you consider adding an upper bound on Griffe. Version 1 will remove all legacy code! There will be a couple more v0 before so that you get all the deprecation warnings needed to upgrade your code using Griffe before upgrading to v1. See breaking changes and deprecations for v0.46 below.
We are still in v0, so no major bump yet.
has_labels()][griffe.Object.has_labels] method with a labels keyword argument is not supported anymore. The parameter became a variadic positional parameter, so it cannot be used as a keyword argument anymore. Passing a sequence instead of multiple positional arguments still works but will emit a deprecation warning.load_extensions()][griffe.load_extensions] function with an exts keyword argument is not supported anymore. The parameter became a variadic positional parameter, so it cannot be used as a keyword argument anymore. Passing a sequence instead of multiple positional arguments still works but will emit a deprecation warning.Object.has_labels()][griffe.Object.has_labels] and [load_extensions()][griffe.load_extensions] both became variadic positional parameters. Passing a sequence as single argument is deprecated in favor of passing multiple arguments. This is an ergonomic change: I myself often forgot to wrap extensions in a list. Passing sequences of labels (lists, sets, tuples) is also difficult from Jinja templates.member_is_exported()][griffe.Object.member_is_exported], [is_explicitely_exported][griffe.mixins.ObjectAliasMixin.is_explicitely_exported], [is_implicitely_exported][griffe.mixins.ObjectAliasMixin.is_implicitely_exported]. Use the [is_exported][griffe.mixins.ObjectAliasMixin.is_exported] property instead. See issue 281.is_exported()][griffe.mixins.ObjectAliasMixin.is_exported] and [is_public()][griffe.mixins.ObjectAliasMixin.is_public] methods became properties. They can still be called like methods, but will emit deprecation warnings when doing so. See issue 281.ignore_private parameter of the [find_breaking_changes()][griffe.find_breaking_changes] function is now deprecated and unused. With the reworked "exported" and "public" API, this parameter became useless. See issue 281.stats() instead of [Stats][griffe.stats.Stats] will now emit a deprecation warning.docstring attribute to parameters (e21eabe by Hassan Kibirige). Issue-286, Related-to-mkdocstrings/griffe#252, PR-288, Co-authored-by: Timothée Mazzucotelli dev@pawamoy.frstats instead of Stats (e5572d2 by Timothée Mazzucotelli).load_extensions instead of a sequence (fadb72b by Timothée Mazzucotelli). Issue-268Object.has_labels instead of set (c4e3bf2 by Timothée Mazzucotelli). Issue-267Always call on_package_loaded hook on a package, and not any other object (40db38d by Timothée Mazzucotelli). Issue-283
Support setuptools' new editable modules using type annotations (14d45e8 by Timothée Mazzucotelli). Issue-273
Fix loading of importable modules thanks to their __path__ attribute (56f5363 by Timothée Mazzucotelli). Issue-269
Implement -x, --force-inspection CLI option (776063d by Timothée Mazzucotelli).
<small>Compare with 0.44.0</small>
-x, --force-inspection CLI option (776063d by Timothée Mazzucotelli).force_inspection option in the loader API (3266f22 by Timothée Mazzucotelli).__init__ modules) (3f74f67 by Timothée Mazzucotelli).load functions (e418dee by Timothée Mazzucotelli).Add resolved property on expression names, returning the corresponding Griffe object (9b5ca45 by Timothée Mazzucotelli).
<small>Compare with 0.43.0</small>
resolved property on expression names, returning the corresponding Griffe object (9b5ca45 by Timothée Mazzucotelli).Add properties telling whether an expression name resolves to an enumeration class, instance or value (fdb21d9 by Timothée Mazzucotelli). Issue-mkdocs
<small>Compare with 0.42.2</small>
Fix target path of aliases for multipart imports (import a.b.c as x) (ee27ad9 by Timothée Mazzucotelli). Issue-259
Don't return class variables as parameters of dataclasses (2729c22 by Hassan Kibirige). PR-253
Better support for dataclasses (82a9d57 by Timothée Mazzucotelli). Issue-33, Issue-34, Issue-38, Issue-39, PR-240
<small>Compare with 0.41.3</small>
Catch index errors when finding top module in case of search path misconfiguration (46c56c7 by Timothée Mazzucotelli). Issue-#246
<small>Compare with 0.41.2</small>
Fix discovery of packages in the current working directory (44f9617 by Timothée Mazzucotelli). Discussion-mkdocstrings#654
<small>Compare with 0.41.1</small>
The load_git function moved from griffe.git to griffe.loader. It is still importable from griffe.git, but will emit a deprecation warning.
<small>Compare with 0.41.0</small>
load_git function moved from griffe.git to griffe.loader.
It is still importable from griffe.git, but will emit a deprecation warning.load_git into the loader module (327cc5b by Timothée Mazzucotelli).Add option to append sys.path to search paths to the check command too (d153fa0 by Timothée Mazzucotelli).
<small>Compare with 0.40.1</small>
sys.path to search paths to the check command too (d153fa0 by Timothée Mazzucotelli).yield and yield from statements (439f65e by Timothée Mazzucotelli).get_call_keyword_arguments utility function, as it is implemented with a single line and creates a cyclic depdendency with expressions (35cf170 by Timothée Mazzucotelli).ast.unparse instead of our own unparser (6fe1316 by Timothée Mazzucotelli).Don't return properties as parameters of dataclasses (5a5c03b by Timothée Mazzucotelli). Issue #232
<small>Compare with 0.40.0</small>
Your coding agent can read these notes before it upgrades. Set up the MCP server →