NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #755 most downloaded on PyPI
Builds a queryable graph of the imports within one or more Python packages.
Last release 1 months ago
04 Sep 2026
Release timing varies
gaps range from 2 weeks to 7 months
Nearly every release is documented
notes for 34 of 34 stable releases
1 version withdrawn
withdrawn after publishing
8 years old
52 releases · first in 2018
Raise ValueError instead of panicking when Graph.add_import is called with only one of line_number and line_contents.
Support explicit lazy imports.
Raise ValueError instead of panicking when Graph.add_import is called with only one of line_number and line_contents.
Fix panic error when scanning imports of nonexistent namespace children (https://github.com/python-grimp/grimp/issues/308).
Fix panic error when scanning imports of nonexistent namespace children (https://github.com/python-grimp/grimp/issues/308).
Officially support freethreaded Python 3.14+.
Officially support Python 3.15, including lazy imports.
Officially support Windows ARM64 Python 3.11+, including freethreaded 3.14+.
One column per quarter.
Deprecate the NamespacePackageEncountered exception.
Deprecate the NamespacePackageEncountered exception.
Improve contribution experience for Windows developers using Just.
Tweak Just commands for running version-specific Python tests.
Remove typing-extensions as a dependency.
Make package FIPS compatible by marking blake2 hashing with usedforsecurity=False.
Raise ModuleNotPresent instead of an unclear error when find_modules_that_directly_import or find_modules_directly_imported_by is called with a module that is not in the graph. (https://github.com/python-grimp/grimp/issues/113)
Raise ValueError instead of pyo3_runtime.PanicException when a duplicate layer module is passed to find_illegal_dependencies_for_layers.
Update macos runners in release workflow
Update macos runners in release workflow
Support building graph from namespace packages, not just their portions.
Bugfix: support Python 3.14 syntax such as t-strings as syntax errors. (https://github.com/python-grimp/grimp/issues/268)
Drop support for Python 3.9.
Add nominate_cycle_breakers method.
Add nominate_cycle_breakers method.
Officially support Python 3.14.
Officially support Python 3.14.
Improve contribution / CI tooling using Just and UV.
Speed up graph building by switching from Python multiprocessing to Rust-based multithreading for import scanning.
Speed up graph building by switching from Python multiprocessing to Rust-based multithreading for import scanning.
This release was yanked due to poor performance when building very large graphs.
This release was yanked due to poor performance when building very large graphs.
Add closed layers to layer contract.
Rename default repository branch to 'main'.
Optimise find_shortest_chains query.
Use Rust instead of Python's built-in ast module for import parsing.
Use Rust instead of Python's built-in ast module for import parsing.
Provide more control of multiprocessing via GRIMP_MIN_MULTIPROCESSING_MODULES environment variable.
Provide more control of multiprocessing via GRIMP_MIN_MULTIPROCESSING_MODULES environment variable.
Use joblib instead of multiprocessing for CPU parallelism. Fixes https://github.com/python-grimp/grimp/issues/208.
Use joblib instead of multiprocessing for CPU parallelism. Fixes https://github.com/python-grimp/grimp/issues/208.
Accelerate import scanning via CPU parallelism (multiprocessing).
Accelerate import scanning via CPU parallelism (multiprocessing).
Fixed handling of within-descendant-imports when squashing modules (see Issue 195 _).
Fixed handling of within-descendant-imports when squashing modules (see Issue 195).
Added find_matching_modules and find_matching_direct_imports methods.
Added find_matching_modules and find_matching_direct_imports methods.
Added as_packages option to the find_shortest_chain method.
Reimplement the graph in Rust. This is a substantial rewrite that, mostly, significantly improves performance, but there may be certain operations tha
Reimplement the graph in Rust. This is a substantial rewrite that, mostly, significantly improves performance, but there may be certain operations that are slower than before.
Added as_packages option to the find_shortest_chains method.
Added as_packages option to the find_shortest_chains method.
Include 3.13 wheel in release.
Drop support for Python 3.8.
Officially support Python 3.13.
Officially support Python 3.13.
Speed up adding and removing modules.
Speed up adding and removing modules.
Follow symbolic links while walking through module files.
Upgrade PyO3 to 0.21.
Follow symbolic links while walking through module files.
Speed up find_illegal_dependencies_for_layers by using thread concurrency.
Nothing published for this version
Allow configuring sibling layer independence.
Allow configuring sibling layer independence.
Fix bug where a warning would be logged if a non-Python file with multiple dots in the filename was encountered.
Formally add support for Python 3.12.
Add exclude_type_checking_imports argument to build_graph.
Add exclude_type_checking_imports argument to build_graph.
Stable release of functionality from 3.0b1-3.
Stable release of functionality from 3.0b1-3.
Support for independent layers in find_illegal_dependencies_for_layers.
Support for independent layers in find_illegal_dependencies_for_layers.
Nothing published for this version
Rename upstream/downstream in find_illegal_dependencies_for_layers to importer/imported. The original names were accidentally used in reverse; the new
Switch to pyproject.toml.
Rename upstream/downstream in find_illegal_dependencies_for_layers to importer/imported. The original names were accidentally used in reverse; the new names have less potential for confusion.
Use Rust extension module for find_illegal_dependencies_for_layers.
Add find_illegal_dependencies_for_layers method.
Log cache activity.
Drop support for Python 3.7.
Add find_illegal_dependencies_for_layers method.
Change cache filename scheme to use a hash.
Change cache filename scheme to use a hash.
Ignore modules with dots in the filename.
* Add caching.
Add caching.
Annotate get_import_details return value with a DetailedImport.
Annotate get_import_details return value with a DetailedImport.
Officially support Python 3.11.
Officially support Python 3.11.
Significantly speed up graph copying.
Significantly speed up graph copying.
Remove find_all_simple_chains method.
No longer use a networkx graph internally.
Fix bug where import details remained stored in the graph after removing modules or imports.
Officially support Python 3.9 and 3.10.
Officially support Python 3.9 and 3.10.
Drop support for Python 3.6.
Support namespaced packages.
Raise custom exception (NamespacePackageEncountered) if code under analysis appears to be a namespace package.
Raise custom exception (NamespacePackageEncountered) if code under analysis appears to be a namespace package.
Raise custom exception (SourceSyntaxError) if code under analysis contains syntax error.
Raise custom exception (SourceSyntaxError) if code under analysis contains syntax error.
Better handling of source code containing non-ascii compatible characters
Better handling of source code containing non-ascii compatible characters
Significantly increase the speed of building the graph.
Significantly increase the speed of building the graph.
Clarify behaviour of get_import_details.
Clarify behaviour of get_import_details.
Add module_is_squashed method.
Add squash_module method.
Add find_all_simple_chains method.
* Officially support Python 3.8.
Officially support Python 3.8.
Support multiple root packages.
Support multiple root packages.
Add find_shortest_chains method.
Add find_shortest_chains method.
* Add remove_module method.
Add remove_module method.
* Fix Windows incompatibility.
Fix Windows incompatibility.
Fix bug with calling importlib.util.find_spec.
Fix bug with calling importlib.util.find_spec.
Add as_packages parameter to direct_import_exists.
Add as_packages parameter to direct_import_exists.
* Add count_imports method.
Add count_imports method.
Support building the graph with external packages.
Support building the graph with external packages.
Rename get_shortest_path to get_shortest_chain.
Rename get_shortest_path to get_shortest_chain.
Rename path_exists to chain_exists.
Rename and reorder the kwargs for get_shortest_chain and chain_exists.
Raise ValueError if modules with shared descendants are passed to chain_exists if as_packages=True.
Fix bug with find_shortest_path using upstream/downstream the wrong way around.
Improve repr of ImportGraph.
Fix bug with find_shortest_path using upstream/downstream the wrong way around.
Fix bug with analysing relative imports from within __init__.py files.
Fix bug with analysing relative imports from within __init__.py files.
Stop skipping analysing packages called migrations.
Deal with invalid imports by warning instead of raising an exception.
Rename NetworkXBackedImportGraph to ImportGraph.
* Fix PyPI readme rendering.
Fix PyPI readme rendering.
* Implement core functionality.
Implement core functionality.
Your coding agent can read these notes before it upgrades. Set up the MCP server →