Skip to main content

callix

Polyglot code analysis in Rust. Parses Python, TypeScript, Go, Rust, PHP, C, C++ and YAML into a shared graph IR — with the type checkers linked in, so there are no language servers to install.

PyPI Python License CI

Documentation · Repository · Issues


Repository → Language Adapter → Graph (IR) → your code

Nodes and directed relations, typed and deterministic: functions, classes, modules, the calls between them, and the HTTP or gRPC boundaries where one service meets another.

Why

Code analysis usually asks you to assemble it — install a language server, put it on PATH, wire up the transport, keep the versions in step. callix links the analysis engines into the module instead:

Language Symbol resolution Extra setup
Python ty, linked as a library none
TypeScript typescript-go, linked as a Go c-archive none
Go go/packages + go/types, same c-archive a Go toolchain
Rust rust-analyzer scip index, decoded natively rust-analyzer and Cargo
PHP a symbol table built from the sources none
C / C++ a symbol table over the parsed sources none
YAML none — it declares no symbols none

Python and TypeScript need nothing beyond the wheel — the checkers and their standard-library stubs are inside it. Go and Rust use the toolchain the project already has, because a standard library shipped as sources cannot be frozen into a wheel. PHP and the C family have no checker worth linking and no widely installed indexer worth shelling out to — every precise C/C++ option requires a compile_commands.json, which almost no repository ships — so callix builds a symbol table from the sources and reports degraded, honest about being a symbol table and not a type checker.

Installation

pip install callix

Python ≥ 3.10. Wheels for Linux glibc and musl (x86_64, aarch64) and macOS (arm64, x86_64); Windows is not supported.

The published release is 0.1.0 — four adapters (Python, TypeScript, Go, Rust) and Python ≥ 3.13. PHP, C, C++ and YAML are on main and unreleased; build from source to use them.

Usage

from callix import NodeKind, PythonAdapter

graph = PythonAdapter().analyze("path/to/project")

print(len(graph.nodes), len(graph.relations))
for node in graph.nodes_by_kind(NodeKind.FUNCTION):
    print(node.qualified_name, graph.callers(node.id))

graph.to_json(indent=2)          # serialization
old.diff(new)                    # structural diff

The same call works for every other language — TypeScriptAdapter, GoAdapter, RustAdapter, PhpAdapter, CAdapter, CppAdapter, YamlAdapter — and each discovers its own project roots, so a monorepo works without configuration.

Symbol resolution is on by default. resolve=False gives a structural graph; graph.metadata["resolver_status"] always says how complete the result is.

A Python server declaring @app.get("/users/{id}") and a TypeScript client calling fetch("/users/1") produce the same boundary node, so merging their graphs links the two services. See Cross-language analysis.

Documentation

https://callix-tools.github.io/callix/

Benchmarks

Last run: 2026-07-29 13:55 UTC · callix main · runner Linux x86_64 · single cold run, indicative only.

Project Lang Commit LOC Files Nodes Relations Time Peak RSS KLOC/s Resolver Resolved
apache/superset python c83fb2b 399 519 1 886 179 307 379 535 17.2s 1,004 MB 23.2 ok 84% of 281 667 (10s)
colinhacks/zod typescript 1fb56a5 74 194 404 15 236 27 578 2.3s 420 MB 32.2 ok 89% of 17 067 (1s)
gin-gonic/gin go 73726dc 23 672 98 11 688 15 646 5.4s 933 MB 4.4 ok 99% of 12 755 (0s)
casdoor/casdoor go 696bcf0 86 898 458 32 606 42 295 35.1s 4,207 MB 2.5 ok 100% of 33 504 (7s)
gohugoio/hugo go 4d22555 224 821 897 75 619 100 542 16.8s 4,432 MB 13.3 ok 98% of 78 036 (4s)
BurntSushi/ripgrep rust 4649aa9 50 275 98 5 420 15 318 17.1s 1,076 MB 2.9 ok 99% of 11 668 (0s)
tokio-rs/axum rust c59208c 43 653 296 8 162 15 095 88.1s 3,124 MB 0.5 ok 87% of 10 030 (0s)
astral-sh/ruff rust 6686f63 687 409 1 870 70 186 221 119 230.8s 6,006 MB 3.0 ok 100% of 159 277 (2s)
Total 1 590 441 398 224 413.0s 3.9 92% of 604 004

Peak RSS measured via getrusage.max (largest single process — ours or a resolver subprocess; no cgroup counter was readable, so this is not the tree total). KLOC/s = analysed thousands-of-lines per second. Generated by benchmarks/run_benchmarks.py.

Speed-ups against graphlens, the Python implementation this replaces: 5.2× on apache/superset, 3.3× on colinhacks/zod, 2.6× on gin-gonic/gin. Details and method in Benchmarks.

Versioning

Semver covers the graph contract — the node and relation kinds, the two id formulas, 1-based spans, node ordering, the serialization format — and the Python API as generated into the committed .pyi. It does not cover what the resolvers answer: the Python one is a pinned 0.0.x release of ty, the Rust one is whatever rust-analyzer the machine has. A patch release may change which CALLS edges appear. What is watched instead is the aggregate share of resolved queries, recorded per project in the baselines.

Full statement, including which changes need a major release: Versioning.

Contributing

See CONTRIBUTING.md for the development loop, the build constraints, and how releases are cut.

License

MIT

Release files for callix 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for callix 1.0.0
File Size Uploaded
callix-1.0.0.tar.gz 705.2 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for callix 1.0.0
File
callix-1.0.0-cp310-abi3-musllinux_1_2_x86_64.whl CPython 3.10 abi3 Linux musl 1.2+ x86-64 Details
callix-1.0.0-cp310-abi3-musllinux_1_2_aarch64.whl CPython 3.10 abi3 Linux musl 1.2+ ARM64 Details
callix-1.0.0-cp310-abi3-manylinux_2_28_x86_64.whl CPython 3.10 abi3 Linux glibc 2.28+ x86-64 Details
callix-1.0.0-cp310-abi3-manylinux_2_28_aarch64.whl CPython 3.10 abi3 Linux glibc 2.28+ ARM64 Details
callix-1.0.0-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
callix-1.0.0-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 117.4 MB

Release files / callix-1.0.0.tar.gz

Download URL callix-1.0.0.tar.gz
Size 705.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c9b88d95ed73fc6f3a9d35b01671f0421af4da050a64536cc2ef6486c991e245
BLAKE2b-256 checksum
How to use checksums
d0784e5ef6a5a0184f923836363c15de11d071672b9ac1a25e98049274e1e5d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / callix-1.0.0-cp310-abi3-musllinux_1_2_x86_64.whl

Download URL callix-1.0.0-cp310-abi3-musllinux_1_2_x86_64.whl
Size 20.4 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
f6a190a779e00ffeacd74f0801adc2ab89aa0b1a6f4e4793ea159f35e14c1f6d
BLAKE2b-256 checksum
How to use checksums
82b8e0f728bca1cf0b436ca6996c7a8e94969d9819cce0e69815c5770f21e214
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / callix-1.0.0-cp310-abi3-musllinux_1_2_aarch64.whl

Download URL callix-1.0.0-cp310-abi3-musllinux_1_2_aarch64.whl
Size 19.2 MB
Tags CPython 3.10 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
f4f82a1d20b88c648b14e35cb86d1c448e71cd0cc9715dea0f998fc212e58660
BLAKE2b-256 checksum
How to use checksums
fd6d1065055df7d150925e298689dfc7b122b7663fd1e86ee90e958633738340
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / callix-1.0.0-cp310-abi3-manylinux_2_28_x86_64.whl

Download URL callix-1.0.0-cp310-abi3-manylinux_2_28_x86_64.whl
Size 20.1 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
26c6c7b064a18ebe7f175c064cfbb3f17367ab2c7f0343e38f20d15e0bf1e3b1
BLAKE2b-256 checksum
How to use checksums
2a15b2adeb28eb801d443614b6104c73bc85a2159ab3edce3f75e6e529431c65
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / callix-1.0.0-cp310-abi3-manylinux_2_28_aarch64.whl

Download URL callix-1.0.0-cp310-abi3-manylinux_2_28_aarch64.whl
Size 19.0 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
52e551ac300583d1713a00068b5027ea4c2a54a572cb8709ebd1bae7673510dc
BLAKE2b-256 checksum
How to use checksums
50fb431bd23617a10563d1c0989fd0614537c1e169755e6369bb89ef7ca35e31
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / callix-1.0.0-cp310-abi3-macosx_11_0_arm64.whl

Download URL callix-1.0.0-cp310-abi3-macosx_11_0_arm64.whl
Size 18.6 MB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f577dd664e23ebedb627be0bf035b5faee6d2172ab8f4ea75a23b902b9fc958d
BLAKE2b-256 checksum
How to use checksums
f165c1b09e86235138bc3a5f29c5989f8f365bb420a6bd96d9df29e03507456b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / callix-1.0.0-cp310-abi3-macosx_10_12_x86_64.whl

Download URL callix-1.0.0-cp310-abi3-macosx_10_12_x86_64.whl
Size 19.4 MB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
4501037a5ad664ed040f9cc6312440bef735f720ea10a203a38cdcc7edb383d6
BLAKE2b-256 checksum
How to use checksums
ccf25419459ae3a5c7dc52feec1d26ccac273d0b1f96ff3feec53c4c40cc0399
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

1.0.0 This release

7 release files

0.1.0

5 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page