Reference
Check support for your code.
Kin can keep your files, but the code connections it can identify depend on the language. Check the support levels below before choosing a project to try.
Documentation
Start
Work with code
Connect tools
Understand Kin
Reference
Troubleshoot
Start
Work with code
Connect tools
Understand Kin
Reference
Troubleshoot
How this works in Kin
Every admitted file is kept exactly, whatever it is written in. How much structure Kin extracts from it depends on the tier the file lands in, and only one of those four tiers produces the entities and relations every other answer is built on.
Check this on your own machine
Run kin languages for the list your build ships, and kin graph status in a repository for its parse coverage per language. The table below is the manifest this site renders, checked against that command on Kin v0.7.6 on 2026-09-09. Current release: v0.7.19.
The four tiers
Whole-repository ingest and incremental edits route a file the same way, and a test asserts the two paths cannot drift apart.
Full semantic
Entities (functions, classes, methods, types), relations (calls, containment, inheritance), test detection, and doc and comment summaries. Every adapter below is this tier.
Shallow syntax
Coarse top-level declarations, imports and a syntax fingerprint, with no call graph, no nested entities, no tests and no docs. The tier exists in the pipeline and routes no extensions today, because every language with a shallow grammar also has a full adapter.
Structured artifact
Dedicated extractors for manifests and configs: Cargo.toml, package.json, go.mod, pom.xml, Dockerfile, CI configs, SQL migrations.
Opaque artifact
A content hash and a MIME hint. Never dropped, never parsed. Markdown, JSON, YAML and other structured text land here unless a structured-artifact extractor matches them, and so do Scala, Lua, R, Zig, Elixir, Erlang, Haskell, OCaml and Perl.
The 14 language adapters
Each one puts its extensions in the full semantic tier. Five of them also carry type-resolved enrichment, which is what turns a name that looks like a call into a recorded edge with a resolved target; the rest resolve what the grammar alone can establish.
| Language | Extensions | Enrichment | What it records |
|---|---|---|---|
| TypeScript | .ts, .tsx | Type-resolved | Full imports, classes, functions, variable scopes & type enrichment. |
| JavaScript | .js, .jsx | Type-resolved | Dynamic AST, ES modules & CommonJS require, classes, scopes. |
| Python | .py | Type-resolved | Module imports, class definitions, function boundaries, decorators. |
| Go | .go | Type-resolved | Package scopes, struct & interface implementations, direct call graphs. |
| Java | .java | Grammar | Class/interface hierarchies, method overrides, package bindings. |
| Rust | .rs | Type-resolved | Struct/trait impls, macro expansions, mod declarations, full modules. |
| C | .c, .h | Grammar | Function declarations, header inclusion hierarchies, macro expansion. |
| C++ | .cpp, .hpp, .h | Grammar | Namespaces, class methods, template scopes, operator overloading. |
| C# | .cs | Grammar | Namespace groupings, class outlines, properties, method signatures. |
| Ruby | .rb | Grammar | Class/module namespaces, method boundaries, require scopes. |
| PHP | .php | Grammar | Classes, functions, namespaces, traits, dynamic function inclusions. |
| Swift | .swift | Grammar | Protocol extensions, structures, generic bounds, closure mappings. |
| Kotlin | .kt | Grammar | Kotlin packages, data classes, extension methods, inline scopes. |
| HCL (Terraform) | .tf, .tfvars | Grammar | Infrastructure blocks, module bindings, variables & resources. |
A file in any other language
It is admitted and kept, and it answers no semantic question. In the words the CLI itself prints:
Files in other languages are still admitted as repository authority with their content and history. What they do not get is entities, relations, and the semantic search built on them.That matters most when an answer looks empty. A caller in an unadapted file is not a caller the graph knows about, so an empty result is a statement about coverage before it is a statement about your code. The source is public if you want to read the routing yourself: github.com/firelock-ai/kin.
Next action
Check a repository before you admit it.
Admit a small copy and read the parse coverage line. That tells you what share of the files Kin produced entities from, which is the number that decides how much any later answer is worth.
Try Kin alongside Git