# What Are the Optional Dependencies for Code-Graph-RAG? Complete Installation Guide

> Explore optional dependencies for Code-Graph-RAG including test, treesitter-full, semantic, milvus, and ast-grep. Enhance your installation with testing, parsing, and search tools.

- Repository: [Vitali Avagyan/code-graph-rag](https://github.com/vitali87/code-graph-rag)
- Tags: how-to-guide
- Published: 2026-08-12

---

**Code-Graph-RAG provides five optional dependency groups—`test`, `treesitter-full`, `semantic`, `milvus`, and `ast-grep`—that extend the core library with testing utilities, multi-language parsers, semantic search capabilities, and AST pattern matching.**

Code-Graph-RAG is a Python library designed for constructing code-aware retrieval-augmented generation (RAG) systems. While the core installation includes essential components like `loguru`, `mcp`, and basic Tree-Sitter bindings, the project defines **optional dependencies** in [`pyproject.toml`](https://github.com/vitali87/code-graph-rag/blob/main/pyproject.toml) to support advanced features without bloating the base package. These extras allow you to tailor the installation to specific use cases, from parsing multiple programming languages to enabling vector-based semantic search.

## Available Optional Dependency Groups

The optional dependencies are declared in the `[project.optional-dependencies]` table of [`pyproject.toml`](https://github.com/vitali87/code-graph-rag/blob/main/pyproject.toml) (lines 87–131). Each group serves a distinct purpose and can be installed independently.

### Test Dependencies

The `test` extra provides the complete toolchain needed to run the library’s test suite and generate coverage reports. This includes `pytest`, `pytest-asyncio`, `pytest-cov`, `pytest-xdist`, and `testcontainers`, along with supporting libraries like `libclang`, `filelock`, `ast-grep-py`, and `pyyaml`.

### Full Tree-Sitter Language Support

The `treesitter-full` extra installs comprehensive Tree-Sitter grammars for deep code-graph construction across multiple languages. This group includes parsers for Python, JavaScript, TypeScript, Rust, Go, Scala, Java, C, C++, Lua, PHP, C#, and Dart (declared in [`pyproject.toml`](https://github.com/vitali87/code-graph-rag/blob/main/pyproject.toml) lines 100–114).

### Semantic Search Capabilities

The `semantic` extra enables embedding-based semantic search and RAG functionality. It installs `qdrant-client` for vector database interaction, along with `torch` and `transformers` for running local embedding models.

### Milvus Vector Database Integration

The `milvus` extra adds support for the Milvus vector database through the `pymilvus[milvus-lite]` package, offering an alternative backend to Qdrant for vector storage and retrieval.

### AST Pattern Matching

The `ast-grep` extra provides utilities for structural code search using the `ast-grep-py` library, complemented by `pyyaml` for configuration file parsing.

## How to Install Code-Graph-RAG with Optional Dependencies

Install the core library alone for minimal footprint:

```bash
pip install code-graph-rag

```

Add specific functionality using bracket notation:

```bash

# Testing and development tools

pip install "code-graph-rag[test]"

# Comprehensive language parsing support

pip install "code-graph-rag[treesitter-full]"

# Semantic search with Qdrant and ML embeddings

pip install "code-graph-rag[semantic]"

# Milvus vector database support

pip install "code-graph-rag[milvus]"

# AST-based pattern matching utilities

pip install "code-graph-rag[ast-grep]"

```

Combine multiple extras for complete functionality:

```bash
pip install "code-graph-rag[semantic,treesitter-full]"

```

## Conditional Imports and Lazy Loading

The library implements **lazy imports** to handle missing optional dependencies gracefully. In [`codebase_rag/cli.py`](https://github.com/vitali87/code-graph-rag/blob/main/codebase_rag/cli.py), the CLI entry point conditionally imports modules based on which extras are present. The `codebase_rag/semantic/` directory contains modules that require the `semantic` extra, while `codebase_rag/parsers/` houses Tree-Sitter wrappers that leverage the `treesitter-full` extra for additional language support. The test suite located in `codebase_rag/tests/` strictly requires the `test` extra to execute properly.

## Summary

- **Five optional groups** are available: `test`, `treesitter-full`, `semantic`, `milvus`, and `ast-grep`.
- **Install via extras** using `pip install "code-graph-rag[extra-name]"` syntax.
- **Test extra** provides pytest, coverage tools, and integration testing frameworks.
- **Treesitter-full** adds support for 13+ programming languages beyond the core grammars.
- **Semantic extra** enables Qdrant vector search with PyTorch and Hugging Face Transformers.
- **Implementation** uses conditional imports in [`codebase_rag/cli.py`](https://github.com/vitali87/code-graph-rag/blob/main/codebase_rag/cli.py) to maintain modularity.

## Frequently Asked Questions

### How do I install all optional dependencies at once?

You must specify each extra individually, as there is no single "all" meta-package defined in [`pyproject.toml`](https://github.com/vitali87/code-graph-rag/blob/main/pyproject.toml). Install the most common combination for full functionality: `pip install "code-graph-rag[treesitter-full,semantic,ast-grep]"`.

### What happens if I try to use semantic search without installing the semantic extra?

The code will raise an `ImportError` or `ModuleNotFoundError` when attempting to import `qdrant-client`, `torch`, or `transformers`. The library is designed to fail fast when required optional dependencies are missing for specific features.

### Can I use Milvus instead of Qdrant for vector storage?

Yes. Install the `milvus` extra (`pip install "code-graph-rag[milvus]"`) to use `pymilvus[milvus-lite]` as an alternative vector backend. Note that the `semantic` extra installs Qdrant by default, so you should install only the extras corresponding to your preferred backend.

### Are the Tree-Sitter grammars in treesitter-full required for basic functionality?

No. The core library includes basic Tree-Sitter support, but the `treesitter-full` extra is required for parsing languages like Rust, Go, Java, C/C++, and others beyond Python and JavaScript. Without this extra, the parser will fail to build syntax trees for unsupported languages.