New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

@optave/codegraph

Package Overview
Dependencies
Maintainers
1
Versions
43
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@optave/codegraph

Local code graph CLI — parse codebases with tree-sitter, build dependency graphs, query them

Source
npmnpm
Version
1.4.1
Version published
Weekly downloads
4.7K
453.09%
Maintainers
1
Weekly downloads
 
Created
Source

codegraph

codegraph

Local code dependency graph CLI — parse, query, and visualize your codebase at file and function level.

npm version Apache-2.0 License CI Node >= 20 Local Only

Why codegraph?Quick StartFeaturesCommandsLanguagesAI IntegrationPracticesCI/CDRoadmapContributing

Zero network calls. Zero telemetry. Your code never leaves your machine.

Codegraph uses tree-sitter (via WASM — no native compilation required) to parse your codebase into an AST, extracts functions, classes, imports, and call sites, resolves dependencies, and stores everything in a local SQLite database. Query it instantly from the command line.

💡 Why codegraph?

Comparison last verified: February 2026

Most dependency graph tools only tell you which files import which — codegraph tells you which functions call which, who their callers are, and what breaks when something changes. Here's how it compares to the alternatives:

Feature comparison

CapabilitycodegraphMadgedep-cruiserSkottNx graphSourcetrail
Function-level analysisYesYes
Multi-language10111Any (project)4
Semantic searchYes
MCP / AI agent supportYes
Git diff impactYesPartial
Persistent databaseYesYes
Watch modeYesDaemon
CI workflow includedYesRulesYes
Cycle detectionYesYesYesYes
Zero configYesYesYes
Fully local / no telemetryYesYesYesYesPartialYes
Free & open sourceYesYesYesYesPartialArchived

What makes codegraph different

DifferentiatorIn practice
🔬Function-level, not just filesTraces handleAuth()validateToken()decryptJWT() and shows 14 callers across 9 files break if decryptJWT changes
🌐Multi-language, one CLIJS/TS + Python + Go + Rust + Java + C# + PHP + Ruby + Terraform in a single graph — no juggling Madge, pyan, and cflow
🤖AI-agent readyBuilt-in MCP server — AI assistants query your graph directly via codegraph fn <name>
💥Git diff impactcodegraph diff-impact shows changed functions, their callers, and full blast radius — ships with a GitHub Actions workflow
🔒Fully local, zero telemetryNo accounts, no API keys, no cloud, no data exfiltration — Apache-2.0, free forever
Build once, query instantlySQLite-backed — build in ~30s, every query under 100ms. Native Rust engine with WASM fallback. Most competitors re-parse every run
🧠Semantic searchcodegraph search "handle auth" uses local embeddings — multi-query with RRF ranking via "auth; token; JWT"

How other tools compare

Many tools in this space are cloud-based or SaaS — meaning your code leaves your machine. Others require external services, accounts, or API keys. Codegraph makes zero network calls and has zero telemetry. Everything runs locally.

ToolWhat it does wellWhere it falls short
MadgeSimple file-level JS/TS dependency graphsNo function-level analysis, no impact tracing, JS/TS only
dependency-cruiserArchitectural rule validation for JS/TSModule-level only (function-level explicitly out of scope), requires config
SkottModule graph with unused code detectionFile-level only, JS/TS only, no persistent database
Nx graphMonorepo project-level dependency graphRequires Nx workspace, project-level only (not file or function)
SourcetrailRich GUI with symbol-level graphsArchived/discontinued (2021), no JS/TS, no CLI
SourcegraphEnterprise code search and navigationCloud/SaaS — code sent to servers, $19+/user/mo, no longer open source
CodeSeeVisual codebase mapsCloud-based — code leaves your machine, acquired by GitKraken
UnderstandDeep multi-language static analysis$100+/month per seat, proprietary, GUI-only, no CI or AI integration
Snyk CodeAI-powered security scanningCloud-based — code sent to Snyk servers for analysis, not a dependency graph tool
pyan / cflowFunction-level call graphsSingle-language each (Python / C only), no persistence, no queries

🚀 Quick Start

# Install from npm
npm install -g @optave/codegraph

# Or install from source
git clone https://github.com/optave/codegraph.git
cd codegraph
npm install
npm link

# Build a graph for any project
cd your-project
codegraph build        # → .codegraph/graph.db created

# Start exploring
codegraph map          # see most-connected files
codegraph query myFunc # find any function, see callers & callees
codegraph deps src/index.ts  # file-level import/export map

✨ Features

FeatureDescription
🔍Symbol searchFind any function, class, or method by name with callers/callees
📁File dependenciesSee what a file imports and what imports it
💥Impact analysisTrace every file affected by a change (transitive)
🧬Function-level tracingCall chains, caller trees, and function-level impact
📊Diff impactParse git diff, find overlapping functions, trace their callers
🗺️Module mapBird's-eye view of your most-connected files
🔄Cycle detectionFind circular dependencies at file or function level
📤ExportDOT (Graphviz), Mermaid, and JSON graph export
🧠Semantic searchEmbeddings-powered natural language search with multi-query RRF ranking
👀Watch modeIncrementally update the graph as files change
🤖MCP serverModel Context Protocol integration for AI assistants
🔒Fully localNo network calls, no data exfiltration, SQLite-backed

📦 Commands

Build & Watch

codegraph build [dir]          # Parse and build the dependency graph
codegraph build --no-incremental  # Force full rebuild
codegraph build --engine wasm  # Force WASM engine (skip native)
codegraph watch [dir]          # Watch for changes, update graph incrementally

Query & Explore

codegraph query <name>         # Find a symbol — shows callers and callees
codegraph deps <file>          # File imports/exports
codegraph map                  # Top 20 most-connected files
codegraph map -n 50            # Top 50

Impact Analysis

codegraph impact <file>        # Transitive reverse dependency trace
codegraph fn <name>            # Function-level: callers, callees, call chain
codegraph fn <name> --no-tests --depth 5
codegraph fn-impact <name>     # What functions break if this one changes
codegraph diff-impact          # Impact of unstaged git changes
codegraph diff-impact --staged # Impact of staged changes
codegraph diff-impact HEAD~3   # Impact vs a specific ref

Export & Visualization

codegraph export -f dot        # Graphviz DOT format
codegraph export -f mermaid    # Mermaid diagram
codegraph export -f json       # JSON graph
codegraph export --functions -o graph.dot  # Function-level, write to file
codegraph cycles               # Detect circular dependencies
codegraph cycles --functions   # Function-level cycles

Codegraph can build local embeddings for every function, method, and class, then search them by natural language. Everything runs locally using @huggingface/transformers — no API keys needed.

codegraph embed                # Build embeddings (default: minilm)
codegraph embed --model nomic  # Use a different model
codegraph search "handle authentication"
codegraph search "parse config" --min-score 0.4 -n 10
codegraph models               # List available models

Separate queries with ; to search from multiple angles at once. Results are ranked using Reciprocal Rank Fusion (RRF) — items that rank highly across multiple queries rise to the top.

codegraph search "auth middleware; JWT validation"
codegraph search "parse config; read settings; load env" -n 20
codegraph search "error handling; retry logic" --kind function
codegraph search "database connection; query builder" --rrf-k 30

A single trailing semicolon is ignored (falls back to single-query mode). The --rrf-k flag controls the RRF smoothing constant (default 60) — lower values give more weight to top-ranked results.

Available Models

FlagModelDimensionsSizeLicenseNotes
minilm (default)all-MiniLM-L6-v2384~23 MBApache-2.0Fastest, good for quick iteration
jina-smalljina-embeddings-v2-small-en512~33 MBApache-2.0Better quality, still small
jina-basejina-embeddings-v2-base-en768~137 MBApache-2.0High quality, 8192 token context
jina-codejina-embeddings-v2-base-code768~137 MBApache-2.0Best for code search, trained on code+text
nomicnomic-embed-text-v1768~137 MBApache-2.0Good quality, 8192 context
nomic-v1.5nomic-embed-text-v1.5768~137 MBApache-2.0Improved nomic, Matryoshka dimensions
bge-largebge-large-en-v1.51024~335 MBMITBest general retrieval, top MTEB scores

The model used during embed is stored in the database, so search auto-detects it — no need to pass --model when searching.

AI Integration

codegraph mcp                  # Start MCP server for AI assistants

Common Flags

FlagDescription
-d, --db <path>Custom path to graph.db
-T, --no-testsExclude .test., .spec., __test__ files
--depth <n>Transitive trace depth (default varies by command)
-j, --jsonOutput as JSON
-v, --verboseEnable debug output
--engine <engine>Parser engine: native, wasm, or auto (default: auto)
-k, --kind <kind>Filter by kind: function, method, class (search)
--file <pattern>Filter by file path pattern (search)
--rrf-k <n>RRF smoothing constant for multi-query search (default 60)

🌐 Language Support

LanguageExtensionsCoverage
JavaScript.js, .jsx, .mjs, .cjsFull — functions, classes, imports, call sites
TypeScript.ts, .tsxFull — interfaces, type aliases, .d.ts
Python.pyFunctions, classes, methods, imports, decorators
Go.goFunctions, methods, structs, interfaces, imports, call sites
Rust.rsFunctions, methods, structs, traits, use imports, call sites
Java.javaClasses, methods, constructors, interfaces, imports, call sites
C#.csClasses, structs, records, interfaces, enums, methods, constructors, using directives, invocations
PHP.phpFunctions, classes, interfaces, traits, enums, methods, namespace use, calls
Ruby.rbClasses, modules, methods, singleton methods, require/require_relative, include/extend
Terraform.tf, .hclResource, data, variable, module, output blocks

⚙️ How It Works

┌──────────┐    ┌───────────┐    ┌───────────┐    ┌──────────┐    ┌─────────┐
│  Source  │──▶│ tree-sitter│──▶│  Extract  │──▶│  Resolve │──▶│ SQLite  │
│  Files   │    │   Parse   │    │  Symbols  │    │  Imports │    │   DB    │
└──────────┘    └───────────┘    └───────────┘    └──────────┘    └─────────┘
                                                                       │
                                                                       ▼
                                                                 ┌─────────┐
                                                                 │  Query  │
                                                                 └─────────┘
  • Parse — tree-sitter parses every source file into an AST (native Rust engine or WASM fallback)
  • Extract — Functions, classes, methods, interfaces, imports, exports, and call sites are extracted
  • Resolve — Imports are resolved to actual files (handles ESM conventions, tsconfig.json path aliases, baseUrl)
  • Store — Everything goes into SQLite as nodes + edges with tree-sitter node boundaries
  • Query — All queries run locally against the SQLite DB — typically under 100ms

Dual Engine

Codegraph ships with two parsing engines:

EngineHow it worksWhen it's used
Native (Rust)napi-rs addon built from crates/codegraph-core/ — parallel multi-core parsing via rayonAuto-selected when the prebuilt binary is available
WASMweb-tree-sitter with pre-built .wasm grammars in grammars/Fallback when the native addon isn't installed

Both engines produce identical output. Use --engine native|wasm|auto to control selection (default: auto).

Call Resolution

Calls are resolved with priority and confidence scoring:

PrioritySourceConfidence
1Import-awareimport { foo } from './bar' → link to bar1.0
2Same-file — definitions in the current file1.0
3Same directory — definitions in sibling files0.7
4Same parent directory — definitions in sibling dirs0.5
5Global fallback — match by name across codebase0.3
6Method hierarchy — resolved through extends/implements

Dynamic patterns like fn.call(), fn.apply(), fn.bind(), and obj["method"]() are also detected on a best-effort basis.

📊 Performance

Benchmarked on a ~3,200-file TypeScript project:

MetricValue
Build time~30s
Nodes19,000+
Edges120,000+
Query time<100ms
DB size~5 MB

🤖 AI Agent Integration

MCP Server

Codegraph includes a built-in Model Context Protocol server, so AI assistants can query your dependency graph directly:

codegraph mcp

CLAUDE.md / Agent Instructions

Add this to your project's CLAUDE.md to help AI agents use codegraph:

## Code Navigation

This project uses codegraph. The database is at `.codegraph/graph.db`.

- **Before modifying a function**: `codegraph fn <name> --no-tests`
- **Before modifying a file**: `codegraph deps <file>`
- **To assess PR impact**: `codegraph diff-impact --no-tests`
- **To find entry points**: `codegraph map`
- **To trace breakage**: `codegraph fn-impact <name> --no-tests`

Rebuild after major structural changes: `codegraph build`

### Semantic search

Use `codegraph search` to find functions by intent rather than exact name.
When a single query might miss results, combine multiple angles with `;`:

  codegraph search "validate auth; check token; verify JWT"
  codegraph search "parse config; load settings" --kind function

Multi-query search uses Reciprocal Rank Fusion — functions that rank
highly across several queries surface first. This is especially useful
when you're not sure what naming convention the codebase uses.

When writing multi-queries, use 2-4 sub-queries (2-4 words each) that
attack the problem from different angles. Pick from these strategies:
- **Naming variants**: cover synonyms the author might have used
  ("send email; notify user; deliver message")
- **Abstraction levels**: pair high-level intent with low-level operation
  ("handle payment; charge credit card")
- **Input/output sides**: cover the read half and write half
  ("parse config; apply settings")
- **Domain + technical**: bridge business language and implementation
  ("onboard tenant; create organization; provision workspace")

Use `--kind function` to cut noise. Use `--file <pattern>` to scope.

See docs/recommended-practices.md for integration guides:

  • Git hooks — auto-rebuild on commit, impact checks on push, commit message enrichment
  • CI/CD — PR impact comments, threshold gates, graph caching
  • AI agents — MCP server, CLAUDE.md templates, Claude Code hooks
  • Developer workflow — watch mode, explore-before-you-edit, semantic search
  • Secure credentialsapiKeyCommand with 1Password, Bitwarden, Vault, macOS Keychain, pass

🔁 CI / GitHub Actions

Codegraph ships with a ready-to-use GitHub Actions workflow that comments impact analysis on every pull request.

Copy .github/workflows/codegraph-impact.yml to your repo, and every PR will get a comment like:

3 functions changed12 callers affected across 7 files

🛠️ Configuration

Create a .codegraphrc.json in your project root to customize behavior:

{
  "include": ["src/**", "lib/**"],
  "exclude": ["**/*.test.js", "**/__mocks__/**"],
  "ignoreDirs": ["node_modules", ".git", "dist"],
  "extensions": [".js", ".ts", ".tsx", ".py"],
  "aliases": {
    "@/": "./src/",
    "@utils/": "./src/utils/"
  },
  "build": {
    "incremental": true
  }
}

LLM credentials

Codegraph supports an apiKeyCommand field for secure credential management. Instead of storing API keys in config files or environment variables, you can shell out to a secret manager at runtime:

{
  "llm": {
    "provider": "openai",
    "apiKeyCommand": "op read op://vault/openai/api-key"
  }
}

The command is split on whitespace and executed with execFileSync (no shell injection risk). Priority: command output > CODEGRAPH_LLM_API_KEY env var > file config. On failure, codegraph warns and falls back to the next source.

Works with any secret manager: 1Password CLI (op), Bitwarden (bw), pass, HashiCorp Vault, macOS Keychain (security), AWS Secrets Manager, etc.

📖 Programmatic API

Codegraph also exports a full API for use in your own tools:

import { buildGraph, queryNameData, findCycles, exportDOT } from '@optave/codegraph';

// Build the graph
buildGraph('/path/to/project');

// Query programmatically
const results = queryNameData('myFunction', '/path/to/.codegraph/graph.db');
import { parseFileAuto, getActiveEngine, isNativeAvailable } from '@optave/codegraph';

// Check which engine is active
console.log(getActiveEngine());      // 'native' or 'wasm'
console.log(isNativeAvailable());    // true if Rust addon is installed

// Parse a single file (uses auto-selected engine)
const symbols = await parseFileAuto('/path/to/file.ts');
import { searchData, multiSearchData, buildEmbeddings } from '@optave/codegraph';

// Build embeddings (one-time)
await buildEmbeddings('/path/to/project');

// Single-query search
const { results } = await searchData('handle auth', dbPath);

// Multi-query search with RRF ranking
const { results: fused } = await multiSearchData(
  ['auth middleware', 'JWT validation'],
  dbPath,
  { limit: 10, minScore: 0.3 }
);
// Each result has: { name, kind, file, line, rrf, queryScores[] }

⚠️ Limitations

  • No full type inference — parses .d.ts interfaces but doesn't use TypeScript's type checker for overload resolution
  • Dynamic calls are best-effort — complex computed property access and eval patterns are not resolved
  • Python imports — resolves relative imports but doesn't follow sys.path or virtual environment packages

🗺️ Roadmap

See ROADMAP.md for the full development roadmap. Current plan:

  • Rust CoreComplete (v1.3.0) — native tree-sitter parsing via napi-rs, parallel multi-core parsing, incremental re-parsing, import resolution & cycle detection in Rust
  • Foundation HardeningComplete (v1.4.0) — parser registry, 11-tool MCP server, test coverage 62%→75%, apiKeyCommand secret resolution
  • Intelligent Embeddings — LLM-generated descriptions, hybrid search
  • Natural Language Queriescodegraph ask command, conversational sessions
  • Expanded Language Support — 8 new languages (12 → 20)
  • GitHub Integration & CI — reusable GitHub Action, PR review, SARIF output
  • Visualization & Advanced — web UI, dead code detection, monorepo support, agentic search

🤝 Contributing

Contributions are welcome! See CONTRIBUTING.md for the full guide — setup, workflow, commit convention, testing, and architecture notes.

git clone https://github.com/optave/codegraph.git
cd codegraph
npm install
npm test

Looking to add a new language? Check out Adding a New Language.

📄 License

Apache-2.0

Built with tree-sitter and better-sqlite3. No data leaves your machine. Ever.

Keywords

codegraph

FAQs

Package last updated on 22 Feb 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts