
This covers which programming languages GrepAI can index and trace for call graph analysis. You get full indexing plus tracing for the usual suspects like Go, TypeScript, Python, Rust, Java, and C++, while languages like Ruby, Swift, and Kotlin only get indexed for semantic search without call graph support. The distinction matters because tracing requires language-specific parsing to build caller/callee relationships, while indexing works on any text file. Includes config examples for enabling specific languages, excluding test files, and choosing between fast regex mode or precise tree-sitter parsing. Honestly most useful as a reference when you're setting up a new project and need to know if your stack will get full tracing or just search.
$ npx -y skills add yoanbernabeu/grepai-skills --skill grepai-languages --agent claude-codeInstalls into .claude/skills of the current project.
This skill covers the programming languages supported by GrepAI for indexing and call graph analysis.
GrepAI indexes files with a built-in list of extensions (source code, config and documentation). Other extensions can be added with chunking.custom_extensions. Binary files, minified files (such as *.min.js) and files larger than 1 MB are skipped.
| Language | Extensions | Index | Trace |
|---|---|---|---|
| Go | .go | ✅ | ✅ |
| JavaScript | .js, .jsx | ✅ | ✅ |
| TypeScript | .ts, .tsx | ✅ | ✅ |
| Vue SFC | .vue | ✅ | ✅ |
| Python | .py | ✅ | ✅ |
| PHP | .php | ✅ | ✅ |
| Ruby | .rb | ✅ | ✅ |
| Lua | .lua | ✅ | ✅ |
| Java | .java | ✅ | ✅ |
| C | .c, .h | ✅ | ✅ |
| C++ | .cpp, .hpp, .cc, .cxx, .hxx | ✅ | ✅ |
| Rust | .rs | ✅ | ✅ |
| Zig | .zig | ✅ | ✅ |
| C# | .cs | ✅ | ✅ |
| F# | .fs (trace also .fsx, .fsi) | ✅ | ✅ |
| Pascal/Delphi | .pas, .dpr | ✅ | ✅ |
| GDScript | .gd | ✅ | ✅ |
| Language | Extensions |
|---|---|
| Swift | .swift |
| Kotlin | .kt |
| Scala | .scala |
| Dart | .dart |
| Elixir | .ex, .exs |
| Erlang | .erl |
| Clojure | .clj |
| Haskell | .hs |
| OCaml | .ml |
| Elm | .elm |
| Nim | .nim |
| R | .r |
| Svelte | .svelte |
| Shell | .sh, .bash, .zsh |
| SQL | .sql |
| HTML / CSS | .html, .css, .scss, .less |
| Markdown / text | .md, .txt |
| Config | .yaml, .yml, .json, .toml, .xml, .ini, .cfg, .conf, .env |
| Infrastructure | .tf, .hcl, .proto |
Any other extension (.kts, .mdx, .htm, .prisma…) needs chunking.custom_extensions.
Only extensions listed in trace.enabled_languages get symbols extracted. The defaults:
# .grepai/config.yaml
trace:
enabled_languages:
- .go
- .js
- .ts
- .jsx
- .tsx
- .vue
- .py
- .php
- .lua
- .gd
- .rb
- .c
- .h
- .cpp
- .hpp
- .cc
- .cxx
- .hxx
- .rs
- .zig
- .cs
- .java
- .fs
- .fsx
- .fsi
- .pas
- .dpr
A config created by an older version may lack newer entries (.vue, .lua, .gd, .rb, .hxx, F#): add them by hand. An empty list falls back to the defaults.
trace.mode and trace.exclude_patterns never had any effect and were removed in grepai 1.0.0. To keep files (tests, mocks, generated code) out of every index, including the symbol index, use the top-level ignore list or a .grepaiignore file (gitignore syntax):
ignore:
- "*_test.go"
- "*.spec.ts"
- "**/fixtures/**"
To keep test files searchable but ranked lower, use search boosting penalties instead (see the grepai-search-boosting skill).
Trace accuracy: Excellent. Go's explicit syntax makes tracing very reliable.
Trace accuracy: Good. Some dynamic patterns may be missed. *.d.ts files are type declarations; ignore them if they add noise.
.vue files are compiled with Node.js before indexing and tracing, and results are mapped back to the original lines:
framework_processing:
enabled: true
mode: auto # auto | require | off
node_path: node # Node.js command name or absolute path outside the project
frameworks:
vue:
enabled: true
node_path accepts only a command name resolved through PATH (node, nodejs, node20, node.exe) or a local absolute path outside the project and its git repository. Any other value (relative path, path inside the project or its repository, missing path…) is ignored with a warning, and grepai uses node from PATH. A Node.js installed inside the project (e.g. ./node_modules/.bin/node) is no longer used.@vue/compiler-sfc, grepai logs a warning and falls back to the <script> blocks.@vue/compiler-sfc from the project's node_modules. Only run grepai on repositories you trust, or set framework_processing.frameworks.vue.enabled: false.Trace accuracy: Good. Dynamic imports and decorators may be missed. Comments and triple-quoted strings are handled, and Python keywords are not reported as calls.
Trace accuracy: Good. Methods (def, def self., names ending in ?, ! or =), classes and modules are extracted. Method calls (receiver.method) are found with or without parentheses, but a bare call without parentheses (route 'GET', path) is not, because a regex cannot tell it apart from a variable.
Trace accuracy: Good. Macros and templates may affect accuracy.
Trace accuracy: Excellent. Rust's explicit syntax aids accurate tracing.
Trace accuracy: Good. Magic methods may not be fully traced.
Trace accuracy: Good. Reflection-based calls may be missed.
Trace accuracy: Good. Delegates and events may be partially traced.
Trace only the languages you need, and keep tests out of the indexes if you don't want them:
trace:
enabled_languages:
# Backend (Go)
- .go
# Frontend (TypeScript)
- .ts
- .tsx
ignore:
- "*_test.go"
- "*.spec.ts"
SQL and other index-only files are still searchable; they just have no call graph.
chunking.custom_extensions--mode flag of grepai trace is deprecated and has no effect (output always reports "mode": "fast")Index extensions outside the built-in list with chunking.custom_extensions (leading dot required). They are indexed for search, not traced:
chunking:
custom_extensions:
- .tengo
- .prisma
The watcher uses the same list, so these files stay up to date.
GrepAI uses file extensions for detection. It does NOT use:
#!/usr/bin/env python)trace.enabled_languagesframework_processing.frameworks.vue# Check what's being indexed
grepai status
❌ Problem: Files not being indexed
✅ Solution: Check the file isn't ignored (.gitignore, .grepaiignore, ignore) and that its extension is built in or in chunking.custom_extensions
❌ Problem: Trace missing for language
✅ Solution: Ensure the extension is in trace.enabled_languages (older configs lack newer languages)
❌ Problem: .vue files only partly traced
✅ Solution: Install Node.js and @vue/compiler-sfc in the project; check the node_path warning in the logs
❌ Problem: Wrong language detected ✅ Solution: GrepAI uses extensions only; rename files if needed
Language support summary:
📚 GrepAI Language Support
Full Support (Index + Trace):
- Go, JavaScript, TypeScript, Vue, Python, PHP, Ruby, Lua, Java
- C/C++, Rust, Zig, C#, F#, Pascal/Delphi, GDScript
Index Only (No Trace):
- Swift, Kotlin, Scala, Dart, Elixir, Haskell, ...
- Shell scripts, SQL, HTML, CSS
- Config files (YAML, JSON, TOML)
- Documentation (Markdown)
Your config enables trace for:
- .go, .js, .ts, .py
Sponsors