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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

callix-1.0.0.tar.gz (705.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

callix-1.0.0-cp310-abi3-musllinux_1_2_x86_64.whl (20.4 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

callix-1.0.0-cp310-abi3-musllinux_1_2_aarch64.whl (19.2 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

callix-1.0.0-cp310-abi3-manylinux_2_28_x86_64.whl (20.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

callix-1.0.0-cp310-abi3-manylinux_2_28_aarch64.whl (19.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

callix-1.0.0-cp310-abi3-macosx_11_0_arm64.whl (18.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

callix-1.0.0-cp310-abi3-macosx_10_12_x86_64.whl (19.4 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file callix-1.0.0.tar.gz.

File metadata

  • Download URL: callix-1.0.0.tar.gz
  • Upload date:
  • Size: 705.2 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for callix-1.0.0.tar.gz
Algorithm Hash digest
SHA256 c9b88d95ed73fc6f3a9d35b01671f0421af4da050a64536cc2ef6486c991e245
MD5 c3314ce71e3f605edb15cd7cba2d50f4
BLAKE2b-256 d0784e5ef6a5a0184f923836363c15de11d071672b9ac1a25e98049274e1e5d5

See more details on using hashes here.

File details

Details for the file callix-1.0.0-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: callix-1.0.0-cp310-abi3-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 20.4 MB
  • Tags: CPython 3.10+, musllinux: musl 1.2+ x86-64
  • Uploaded using 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}

File hashes

Hashes for callix-1.0.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f6a190a779e00ffeacd74f0801adc2ab89aa0b1a6f4e4793ea159f35e14c1f6d
MD5 dadc213608655de16e7fc8e7dcf7488b
BLAKE2b-256 82b8e0f728bca1cf0b436ca6996c7a8e94969d9819cce0e69815c5770f21e214

See more details on using hashes here.

File details

Details for the file callix-1.0.0-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: callix-1.0.0-cp310-abi3-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 19.2 MB
  • Tags: CPython 3.10+, musllinux: musl 1.2+ ARM64
  • Uploaded using 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}

File hashes

Hashes for callix-1.0.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f4f82a1d20b88c648b14e35cb86d1c448e71cd0cc9715dea0f998fc212e58660
MD5 d70f174d1214fb887f1ec97c03b3d8c4
BLAKE2b-256 fd6d1065055df7d150925e298689dfc7b122b7663fd1e86ee90e958633738340

See more details on using hashes here.

File details

Details for the file callix-1.0.0-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: callix-1.0.0-cp310-abi3-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 20.1 MB
  • Tags: CPython 3.10+, manylinux: glibc 2.28+ x86-64
  • Uploaded using 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}

File hashes

Hashes for callix-1.0.0-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 26c6c7b064a18ebe7f175c064cfbb3f17367ab2c7f0343e38f20d15e0bf1e3b1
MD5 56eee4724c1b851b770d9ad2e6222c1e
BLAKE2b-256 2a15b2adeb28eb801d443614b6104c73bc85a2159ab3edce3f75e6e529431c65

See more details on using hashes here.

File details

Details for the file callix-1.0.0-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: callix-1.0.0-cp310-abi3-manylinux_2_28_aarch64.whl
  • Upload date:
  • Size: 19.0 MB
  • Tags: CPython 3.10+, manylinux: glibc 2.28+ ARM64
  • Uploaded using 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}

File hashes

Hashes for callix-1.0.0-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 52e551ac300583d1713a00068b5027ea4c2a54a572cb8709ebd1bae7673510dc
MD5 d0a4dd5dcbffed1352a486c22ebcdd6e
BLAKE2b-256 50fb431bd23617a10563d1c0989fd0614537c1e169755e6369bb89ef7ca35e31

See more details on using hashes here.

File details

Details for the file callix-1.0.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: callix-1.0.0-cp310-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 18.6 MB
  • Tags: CPython 3.10+, macOS 11.0+ ARM64
  • Uploaded using 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}

File hashes

Hashes for callix-1.0.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f577dd664e23ebedb627be0bf035b5faee6d2172ab8f4ea75a23b902b9fc958d
MD5 60868046ce126f4dba17a9097b178b15
BLAKE2b-256 f165c1b09e86235138bc3a5f29c5989f8f365bb420a6bd96d9df29e03507456b

See more details on using hashes here.

File details

Details for the file callix-1.0.0-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

  • Download URL: callix-1.0.0-cp310-abi3-macosx_10_12_x86_64.whl
  • Upload date:
  • Size: 19.4 MB
  • Tags: CPython 3.10+, macOS 10.12+ x86-64
  • Uploaded using 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}

File hashes

Hashes for callix-1.0.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4501037a5ad664ed040f9cc6312440bef735f720ea10a203a38cdcc7edb383d6
MD5 8212a4a51c6f4ec79d6dcd19d86bfbcc
BLAKE2b-256 ccf25419459ae3a5c7dc52feec1d26ccac273d0b1f96ff3feec53c4c40cc0399

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page