One analysis interface over every language: call graphs, symbol tables, and reachability — program analysis your agents can call.
Documentation | Quickstart | Discussions | Discord
CodeLLM-DevKit (CLDK) loads a codebase and hands you back a typed object model of it — classes, methods, fields, call graphs, and dataflow — through one consistent analysis object. Instead of token-heavy crawls through files to answer questions like "what calls this method?" or "is this code reachable?", agents and developers run precise, deterministic lookups against the actual program. The result is grounded answers from ground truth rather than approximations from grepping.
Every language is analyzed by a dedicated codeanalyzer-* engine that emits the same canonical schema — as analysis.json or as a Neo4j property graph — and the SDK normalizes it into the same typed API. Java, Python, TypeScript/JavaScript, and Infrastructure as Code (Helm) ship today; Go, Rust, C/C++, and more are in development.
- 📚 Read the documentation for guides, core concepts, and common tasks
- 💻 Install the Python SDK and query your project:
pip install cldkfrom cldk import CLDK
from cldk.analysis import AnalysisLevel
analysis = CLDK.python(
project_path="/path/to/python/project",
analysis_level=AnalysisLevel.call_graph,
)
print(len(analysis.get_classes()), "classes")
print(analysis.get_call_graph())Swap CLDK.python(...) for CLDK.java(...) or CLDK.typescript(...) — the query API is the same across languages. The Python and TypeScript analyzers install as dependencies and the Java analyzer is bundled, so pip install cldk is all you need — analyzing Java projects only needs a JDK on your PATH.
| Repository | What it is | Install |
|---|---|---|
| python-sdk | The official Python SDK. Typed facades over every analyzer below, plus a read-only Neo4j backend for graphs populated out of band. | pip install cldkpip install "cldk[neo4j]" |
Each analyzer is a standalone CLI. All four ship on PyPI, so pip install works without a language toolchain: Python, TypeScript, and IaC as prebuilt binaries, Java as a JAR with a bundled JVM. Homebrew formulas live in homebrew-tap; Java also has a one-line installer for the bare JAR.
| Repository | Language | CLI | Install |
|---|---|---|---|
| codeanalyzer-java | Java / Jakarta EE (source or bytecode), via WALA and JavaParser. The wheel bundles a JVM; the installer needs Java 11+. | canjv |
pip install codeanalyzer-javabrew install codellm-devkit/tap/codeanalyzer-javacurl --proto '=https' --tlsv1.2 -LsSf https://github.com/codellm-devkit/codeanalyzer-java/releases/latest/download/codeanalyzer-installer.sh | sh |
| codeanalyzer-python | Python. Symbol table, call graph, and native CFG/PDG/SDG dataflow. | canpy |
pip install codeanalyzer-pythonpip install "codeanalyzer-python[neo4j]"brew install codellm-devkit/tap/codeanalyzer-python |
| codeanalyzer-typescript | TypeScript / JavaScript. Symbols, call graph, types, decorators, and intra/interprocedural dataflow. | cants |
pip install codeanalyzer-typescriptbrew install codellm-devkit/tap/codeanalyzer-typescript |
| codeanalyzer-iac | Infrastructure as Code, starting with Helm charts. Rendered-resource graph with typed configuration facets. | caniac |
pip install codeanalyzer-iacbrew install codellm-devkit/tap/codeanalyzer-iac |
All analyzers also read and write the shared contract in codeanalyzer-schema.
Under active development or exploratory. APIs, output, and packaging may change without notice.
- codeanalyzer-go - static analysis backend for Go
- codeanalyzer-clang - static analysis backend for the C language family
- codeanalyzer-rust - static analysis backend for Rust, built on the compiler's IR
- codeanalyzer-kotlin - static analysis backend for Kotlin
- codeanalyzer-swift - static analysis backend for Swift
- typescript-sdk - TypeScript SDK
- docs - source for codellm-devkit.info
- cldk-devtools - agent skills for extending and maintaining CLDK
- homebrew-tap - Homebrew formulas for the analyzers
We welcome contributions of all kinds! Whether you want to fix bugs, improve documentation, or propose new features, please see our contributing guide to get started.
Have questions? Join the discussion in our community forum or Discord server.
To cite CodeLLM-DevKit, please use the following reference:
@article{krishna2024codellm,
title={Codellm-Devkit: A Framework for Contextualizing Code LLMs with Program Analysis Insights},
author={Krishna, Rahul and Pan, Rangeet and Pavuluri, Raju and Tamilselvam, Srikanth and Vukovic, Maja and Sinha, Saurabh},
journal={arXiv preprint arXiv:2410.13007},
year={2024}
}CodeLLM-DevKit is an open source project from IBM Research and open to contributions from the entire community. All content in these repositories including code has been provided by IBM under the associated open source software license and IBM is under no obligation to provide enhancements, updates, or support. IBM developers produced this code as an open source project (not as an IBM product), and IBM makes no assertions as to the level of quality nor security.
For any questions, feedback, or suggestions, please contact the authors:
| Name | |
|---|---|
| Rahul Krishna | i.m.ralk@gmail.com |
| Rangeet Pan | rangeet.pan@ibm.com |
| Saurabh Sinha | sinhas@us.ibm.com |