Skip to content

Contributing

CLDK extends along two clean axes, and they’re independent. Understanding the split is the whole game.

flowchart LR
    subgraph Backends["Backends: emit canonical JSON"]
      direction TB
      G["codeanalyzer-go<br/>(new!)"]
      J["codeanalyzer-java"]
      P["codeanalyzer-python"]
    end
    subgraph Frontends["Frontends: consume canonical JSON"]
      direction TB
      PY["Python SDK (cldk)"]
      RS["Rust SDK<br/>(planned)"]
    end
    Backends -->|typed JSON| Frontends
  • A backend teaches CLDK to understand a new language. It parses source, builds a symbol table and call graph, and serializes them to the canonical JSON schema. Backends are standalone tools (the codeanalyzer-* family) and can be written in whatever language suits the analysis: Java analysis in Java, Python analysis in Python, and so on.
  • A frontend is an SDK that consumes that JSON and exposes an ergonomic analysis API. Today there’s one frontend: the Python SDK. A second (Rust) is on the roadmap.

Add a backend and every existing frontend can analyze the new language. Add a frontend and it inherits every existing backend.