abhigyanpatwari/GitNexusPublic

GitNexus: The Zero-Server Code Intelligence Engine

AI summary: An interactive, client-side knowledge graph generator for exploring and querying large codebases.

Stars
47.7K
+35 today
Forks
5.2K
Watchers
168
Open issues
233
Open PRs
46
Contributors
~205
Commits
2.1K
Branches
115

TypeScriptOtherCreated Aug 2, 2025Last push todayLatest release v1.6.12+135 stars this week+725 this month

Quick answers

What is GitNexus?
An interactive, client-side knowledge graph generator for exploring and querying large codebases.
What does GitNexus do?
GitNexus is an advanced visualization tool that parses source code repositories into interactive, node-based knowledge graphs. By accepting inputs directly from platforms like GitHub, GitLab, and Azure (or via local ZIP uploads), it maps out the structural relationships and dependencies between files and modules. It features a built-in Graph RAG (Retrieval-Augmented Generation) agent that allows developers to ask complex architectural questions directly against the generated graph. Because all processing occurs entirely client-side, GitNexus ensures total privacy without requiring backend infrastructure or code uploads.
Who is GitNexus for?
Software engineers, technical leads, and security analysts needing a secure, visual method to rapidly understand and query complex codebase architectures.
How do I get started with GitNexus?
Install the package via npm install gitnexus and provide a repository URL or ZIP file to begin generating graphs.
How popular is GitNexus on GitHub?
abhigyanpatwari/GitNexus has 47,713 stars and 5,181 forks on GitHub, and gained 135 stars in the last 7 days.
What license does GitNexus use?
abhigyanpatwari/GitNexus is released under the Other license.

Star history

since Jul 28, 2026
020K40KJul 2026Aug 2026Sep 2026Oct 2026
47.7K stars as of Oct 4, 2026. Measured daily since Jul 28, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 2 commits2026-01-04: 3 commits2026-01-05: 6 commits2026-01-06: 6 commits2026-01-07: 3 commits2026-01-08: 2 commits2026-01-09: 3 commits2026-01-10: 2 commits2026-01-11: 8 commits2026-01-12: 3 commits2026-01-13: 5 commits2026-01-14: 0 commits2026-01-15: 3 commits2026-01-16: 1 commit2026-01-17: 3 commits2026-01-18: 6 commits2026-01-19: 6 commits2026-01-20: 0 commits2026-01-21: 1 commit2026-01-22: 0 commits2026-01-23: 1 commit2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 2 commits2026-01-27: 1 commit2026-01-28: 2 commits2026-01-29: 3 commits2026-01-30: 1 commit2026-01-31: 1 commit2026-02-01: 1 commit2026-02-02: 1 commit2026-02-03: 4 commits2026-02-04: 9 commits2026-02-05: 2 commits2026-02-06: 2 commits2026-02-07: 2 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 2 commits2026-02-14: 3 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 11 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 2 commits2026-02-21: 4 commits2026-02-22: 19 commits2026-02-23: 7 commits2026-02-24: 4 commits2026-02-25: 24 commits2026-02-26: 10 commits2026-02-27: 20 commits2026-02-28: 6 commits2026-03-01: 10 commits2026-03-02: 2 commits2026-03-03: 1 commit2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 6 commits2026-03-07: 4 commits2026-03-08: 3 commits2026-03-09: 3 commits2026-03-10: 2 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 4 commits2026-03-14: 3 commits2026-03-15: 3 commits2026-03-16: 4 commits2026-03-17: 6 commits2026-03-18: 15 commits2026-03-19: 28 commits2026-03-20: 26 commits2026-03-21: 23 commits2026-03-22: 15 commits2026-03-23: 42 commits2026-03-24: 4 commits2026-03-25: 8 commits2026-03-26: 12 commits2026-03-27: 3 commits2026-03-28: 7 commits2026-03-29: 3 commits2026-03-30: 2 commits2026-03-31: 0 commits2026-04-01: 12 commits2026-04-02: 6 commits2026-04-03: 2 commits2026-04-04: 4 commits2026-04-05: 1 commit2026-04-06: 6 commits2026-04-07: 3 commits2026-04-08: 8 commits2026-04-09: 12 commits2026-04-10: 6 commits2026-04-11: 8 commits2026-04-12: 5 commits2026-04-13: 9 commits2026-04-14: 5 commits2026-04-15: 19 commits2026-04-16: 9 commits2026-04-17: 8 commits2026-04-18: 34 commits2026-04-19: 5 commits2026-04-20: 7 commits2026-04-21: 15 commits2026-04-22: 3 commits2026-04-23: 16 commits2026-04-24: 11 commits2026-04-25: 0 commits2026-04-26: 4 commits2026-04-27: 16 commits2026-04-28: 8 commits2026-04-29: 4 commits2026-04-30: 14 commits2026-05-01: 12 commits2026-05-02: 2 commits2026-05-03: 7 commits2026-05-04: 20 commits2026-05-05: 7 commits2026-05-06: 11 commits2026-05-07: 12 commits2026-05-08: 7 commits2026-05-09: 18 commits2026-05-10: 7 commits2026-05-11: 7 commits2026-05-12: 9 commits2026-05-13: 11 commits2026-05-14: 16 commits2026-05-15: 5 commits2026-05-16: 10 commits2026-05-17: 3 commits2026-05-18: 8 commits2026-05-19: 10 commits2026-05-20: 9 commits2026-05-21: 14 commits2026-05-22: 17 commits2026-05-23: 6 commits2026-05-24: 8 commits2026-05-25: 10 commits2026-05-26: 11 commits2026-05-27: 8 commits2026-05-28: 9 commits2026-05-29: 12 commits2026-05-30: 9 commits2026-05-31: 6 commits2026-06-01: 4 commits2026-06-02: 12 commits2026-06-03: 10 commits2026-06-04: 28 commits2026-06-05: 6 commits2026-06-06: 2 commits2026-06-07: 6 commits2026-06-08: 6 commits2026-06-09: 13 commits2026-06-10: 25 commits2026-06-11: 2 commits2026-06-12: 4 commits2026-06-13: 12 commits2026-06-14: 2 commits2026-06-15: 9 commits2026-06-16: 6 commits2026-06-17: 0 commits2026-06-18: 14 commits2026-06-19: 1 commit2026-06-20: 5 commits2026-06-21: 3 commits2026-06-22: 2 commits2026-06-23: 8 commits2026-06-24: 5 commits2026-06-25: 8 commits2026-06-26: 3 commits2026-06-27: 0 commits2026-06-28: 1 commit2026-06-29: 2 commits2026-06-30: 5 commits2026-07-01: 6 commits2026-07-02: 16 commits2026-07-03: 6 commits2026-07-04: 3 commits2026-07-05: 1 commit2026-07-06: 4 commits2026-07-07: 4 commits2026-07-08: 2 commits2026-07-09: 13 commits2026-07-10: 3 commits2026-07-11: 4 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 20 commits2026-07-15: 1 commit2026-07-16: 42 commits2026-07-17: 14 commits2026-07-18: 5 commits2026-07-19: 3 commits2026-07-20: 26 commits2026-07-21: 52 commits2026-07-22: 18 commits2026-07-23: 3 commits2026-07-24: 4 commits2026-07-25: 9 commits2026-07-26: 3 commits2026-07-27: 8 commits2026-07-28: 7 commits2026-07-29: 2 commits2026-07-30: 3 commits2026-07-31: 13 commits2026-08-01: 23 commits2026-08-02: 11 commits2026-08-03: 2 commits2026-08-04: 13 commits2026-08-05: 5 commits2026-08-06: 11 commits2026-08-07: 4 commits2026-08-08: 7 commits2026-08-09: 4 commits2026-08-10: 4 commits2026-08-11: 6 commits2026-08-12: 4 commits2026-08-13: 12 commits2026-08-14: 2 commits2026-08-15: 2 commits2026-08-16: 1 commit2026-08-17: 0 commits2026-08-18: 5 commits2026-08-19: 2 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 11 commits2026-08-25: 3 commits2026-08-26: 5 commits2026-08-27: 11 commits2026-08-28: 2 commits2026-08-29: 9 commits2026-08-30: 6 commits2026-08-31: 4 commits2026-09-01: 17 commits2026-09-02: 3 commits2026-09-03: 41 commits2026-09-04: 11 commits2026-09-05: 6 commits2026-09-06: 2 commits2026-09-07: 5 commits2026-09-08: 10 commits2026-09-09: 10 commits2026-09-10: 16 commits2026-09-11: 7 commits2026-09-12: 8 commits2026-09-13: 1 commit2026-09-14: 8 commits2026-09-15: 2 commits2026-09-16: 4 commits2026-09-17: 8 commits2026-09-18: 7 commits2026-09-19: 5 commits2026-09-20: 4 commits2026-09-21: 1 commit2026-09-22: 3 commits2026-09-23: 3 commits2026-09-24: 11 commits2026-09-25: 5 commits2026-09-26: 3 commits2026-09-27: 5 commits2026-09-28: 7 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits
1,888 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    47,713 stars

  • Very active

    1,888 commits in 52 weeks

  • Community-driven

    ~205 contributors

  • Outside contributions

    87% of recent commits from the community

  • Well documented

    High community health score

  • Continuous integration

    Automated checks passing

  • Repeat trending

    23 trending appearances

What GitNexus does

GitNexus is an advanced visualization tool that parses source code repositories into interactive, node-based knowledge graphs. By accepting inputs directly from platforms like GitHub, GitLab, and Azure (or via local ZIP uploads), it maps out the structural relationships and dependencies between files and modules. It features a built-in Graph RAG (Retrieval-Augmented Generation) agent that allows developers to ask complex architectural questions directly against the generated graph. Because all processing occurs entirely client-side, GitNexus ensures total privacy without requiring backend infrastructure or code uploads.

Software engineers, technical leads, and security analysts needing a secure, visual method to rapidly understand and query complex codebase architectures.

  • Zero-Server Architecture: Executes entirely within the browser, requiring no backend infrastructure or data transmission to external servers.
  • Interactive Knowledge Graphs: Dynamically visualizes the repository's deep structure, clearly highlighting complex dependencies and inter-module relationships.
  • Built-in Graph RAG Agent: Natively integrates AI capabilities to answer complex architectural queries directly based on the localized knowledge graph.
  • Broad Repository Support: Seamlessly accepts and parses inputs directly from GitHub, GitLab, Azure, or via direct local ZIP file uploads.
  • Client-Side Processing: Guarantees maximum privacy and code security by ensuring the source code never leaves the user's local machine.

Where teams use it

Codebase Exploration

Onboarding developers rapidly comprehend the architecture and deeply nested dependencies of a large repository without configuring local environments.

Architectural Review

Technical leads visually map system designs to easily identify tightly coupled modules, structural bottlenecks, or architectural smells.

AI-Assisted Querying

Engineers utilize the built-in Graph RAG agent to ask specific, context-aware questions regarding massive, complex code structures securely.

Secure Auditing

Security analysts review intricate code relationships and data flows strictly on their local machine, ensuring proprietary code remains entirely confidential.

Getting started: Install the package via npm install gitnexus and provide a repository URL or ZIP file to begin generating graphs.

README

main branch

GitNexus

abhigyanpatwari%2FGitNexus | Trendshift

Discord npm version License: PolyForm Noncommercial OpenSSF Scorecard CI Workflows

The context engine for Enterprise Codebases

Indexes any codebase into a knowledge graph — every dependency, call chain, cluster, and execution flow — then exposes it through smart MCP tools so AI agents never miss code.

💬 Discord · 🌐 Web UI ·

Gitnexus_CLI.1.mp4

Like DeepWiki, but deeper. DeepWiki helps you understand code. GitNexus lets you analyze it — a knowledge graph tracks every relationship, not just descriptions.

TL;DR: The CLI + MCP makes your AI agent reliable — it gives Cursor, Claude Code, Antigravity, Codex, and friends a deep architectural view of your codebase so they stop missing dependencies, breaking call chains, and shipping blind edits. Even smaller models get full architectural clarity. The Web UI is a quick way to chat with any repo in the browser.

Quick Start

# 1. Index your repo (run from repo root)
npx gitnexus analyze

# 2. Connect your editors (one-time, auto-detects Claude Code, Cursor, Codex, …)
npx gitnexus setup

That's it. analyze indexes the codebase, installs agent skills, registers Claude Code hooks, and creates AGENTS.md / CLAUDE.md context files — all in one command. setup writes the MCP config so your AI agent can use the graph.

Install problems? npm 11 crash · slow cold install · no C++ toolchain

On npm 11.x? npx can crash during install with Cannot destructure property 'package' of 'node.target' (an npm/arborist bug, before GitNexus runs). Use pnpm instead — it builds the native deps explicitly:

pnpm --allow-build=@ladybugdb/core --allow-build=gitnexus --allow-build=tree-sitter dlx gitnexus@latest analyze

Or install globally (npm install -g gitnexus@latest) and run gitnexus analyze. See #1939.

Fastest MCP startup: install globally (npm i -g gitnexus) before running gitnexus setup — this writes an absolute-path MCP config that bypasses npx entirely. On a cold cache, an npx-based MCP install can exceed Claude Code's MCP_TIMEOUT default (~30s).

No C++ toolchain? Set GITNEXUS_SKIP_OPTIONAL_GRAMMARS=1 before npm install -g gitnexus to skip the vendored grammar materialize/build for tree-sitter-dart, tree-sitter-proto, tree-sitter-swift, and tree-sitter-kotlin — those four languages won't be parsed, but install completes in seconds without python3/make/g++. Strict =1 only — any other value falls through to the rebuild.

Local embeddings are opt-in. Default npm install does not fetch @huggingface/transformers or onnxruntime-node. Run gitnexus embeddings install (or gitnexus analyze --embeddings, which auto-heals) to fetch the stack through your npm registry config into ~/.gitnexus/embedding-runtime. CUDA GPU binaries still use NuGet via --cuda (#2370). The prefix needs Node with module.registerHooks (≥ 22.15 on 22.x, ≥ 23.5 on 23.x). A leftover 1.6.12 package-first tree is residual until a clean reinstall; --force only refreshes prefix overrides.

About tree-sitter-kotlin: like Dart/Proto/Swift, Kotlin is a vendored grammar (under gitnexus/vendor/tree-sitter-kotlin). Upstream ships source only (no prebuilt binaries), so GitNexus cross-builds the platform prebuilds itself (via the build-tree-sitter-prebuilds GitHub Actions workflow) and vendors them — the same uniform pipeline used for Dart, Proto, and Swift. node-gyp-build selects the right .node at require time, so no C/C++ toolchain is needed. If no prebuild matches your platform-arch, only Kotlin (.kt/.kts) parsing is unavailable; the rest of gitnexus is unaffected.

Deploy to Render

Deploy GitNexus in one click:

Deploy to Render

The Blueprint creates two services. gitnexus-server runs gitnexus serve as a private service: no public URL, reachable only over Render's private network, with a persistent disk for indexes and cloned repos. gitnexus-web is the public one. It serves the UI and reverse-proxies /api/* to the server, so the browser talks to a single origin.

At the Blueprint's defaults this runs about $35/month: $25 for the server's standard instance, $7 for the web service's starter instance, and $2.50 for the 10 GB disk. See Render's pricing for other plans.

The deploy generates an access token, and the UI asks for it on first use:

  1. Open the gitnexus-web service in your Render dashboard.
  2. Copy GITNEXUS_SERVE_AUTH_TOKEN from its Environment tab.
  3. Load the site and paste the token into the prompt (or the settings panel).

Every /api/* request carries that token as a header, and the proxy answers 401 without it. The browser keeps it in sessionStorage, so a new tab asks again. To rotate it, edit the environment variable and redeploy.

The proxy strips Origin before forwarding, so the server's CSRF guard does nothing for proxied traffic; it passes Origin-less requests through by design. The token is the only control on this deploy, not a second layer behind the guard. Anyone holding it can read every indexed repo. See SECURITY.md.

Indexing is memory-bound. If gitnexus-server runs out of memory on a large repo, raise its plan, which sets available RAM: standard is 2 GB, pro is 4 GB. Raise sizeGB only if the disk fills with clones and indexes.

Deploy to RepoCloud

Deploy on RepoCloud

Two Ways to Use GitNexus

CLI + MCP (recommended) Web UI
What Index repos locally, connect AI agents via MCP Visual graph explorer + AI chat in browser
For Daily development with Cursor, Claude Code, Antigravity, Codex, Windsurf, OpenCode Quick exploration, demos, one-off analysis
Scale Full repos, any size Limited by browser memory (~5k files), or unlimited via backend mode
Install npm install -g gitnexus No install — gitnexus.vercel.app
Storage LadybugDB native (fast, persistent) LadybugDB WASM (in-memory, per session)
Parsing Tree-sitter native bindings Tree-sitter WASM
Privacy Everything local, no network Everything in-browser, no server

Bridge mode: gitnexus serve connects the two — the web UI auto-detects the local server and can browse all your CLI-indexed repos without re-uploading or re-indexing.

Why a Knowledge Graph?

Tools like Cursor, Claude Code, Codex, Cline, Roo Code, and Windsurf are powerful — but they don't truly know your codebase structure. So this happens:

  1. AI edits UserService.validate()
  2. Doesn't know 47 functions depend on its return type
  3. Breaking changes ship

Traditional Graph RAG gives the LLM raw graph edges and hopes it explores enough. GitNexus precomputes structure at index time — clustering, tracing, scoring — so tools return complete context in one call:

flowchart TB
    subgraph Traditional["Traditional Graph RAG"]
        direction TB
        U1["User: What depends on UserService?"]
        U1 --> LLM1["LLM receives raw graph"]
        LLM1 --> Q1["Query 1: Find callers"]
        Q1 --> Q2["Query 2: What files?"]
        Q2 --> Q3["Query 3: Filter tests?"]
        Q3 --> Q4["Query 4: High-risk?"]
        Q4 --> OUT1["Answer after 4+ queries"]
    end

    subgraph GN["GitNexus Smart Tools"]
        direction TB
        U2["User: What depends on UserService?"]
        U2 --> TOOL["impact UserService upstream"]
        TOOL --> PRECOMP["Pre-structured response:
        8 callers, 3 clusters, all 90%+ confidence"]
        PRECOMP --> OUT2["Complete answer, 1 query"]
    end
Loading

Core innovation: Precomputed Relational Intelligence

  • Reliability — the LLM can't miss context; it's already in the tool response
  • Token efficiency — no 10-query chains to understand one function
  • Model democratization — smaller LLMs work because the tools do the heavy lifting

What Your AI Agent Gets

19 MCP tools (17 per-repo + 2 group)

Tool What It Does
list_repos Discover all indexed repositories (paginated — limit/offset)
query Process-grouped hybrid search (BM25 + semantic + RRF)
context 360-degree symbol view — categorized refs, process participation
impact Blast radius analysis with depth grouping and confidence
trace Shortest directed path between two symbols (call + class-member edges)
detect_changes Git-diff impact — maps changed lines to affected processes
check Read-only structural checks against the indexed graph
rename Multi-file coordinated rename with graph + text search
cypher Raw Cypher graph queries
route_map API route map — which components fetch which endpoints, and handlers
tool_map MCP/RPC tool definitions — where they're defined and handled
shape_check Validate API response shapes against consumers' property accesses
api_impact Pre-change impact report for an API route handler
explain Explain persisted taint findings (source→sink flows, --pdg indexes)
pdg_query Query control/data dependence at statement level (--pdg indexes)
read_file Read a checkout file (optional 0-indexed slice; maxLines cap)
grep Regex search of the working tree for indexed files (1-based hits)
group_list List configured repository groups
group_sync Rebuild a group's Contract Registry and cross-repo links

Per-repo read-only tools take an optional repo parameter. Omit it when only one repo is indexed, an MCP default is configured, or the GitNexus process cwd is inside a registered path without crossing into an unindexed nested Git checkout; otherwise pass it explicitly. Mutating tools require repo when multiple repos are indexed and no MCP default exists. Per-repo tools also take an optional branch for indexes pinned with gitnexus analyze --branch, except read_file and grep, which read the checkout and do not accept branch. Omitting branch queries the workspace index, which follows your checked-out working tree — switching branches and re-running gitnexus analyze updates it incrementally. explain and pdg_query need an index built with gitnexus analyze --pdg.

Resources for instant context

Resource Purpose
gitnexus://repos List all indexed repositories (read this first)
gitnexus://setup Setup and usage guidance for agents
gitnexus://repo/{name}/context Codebase stats, staleness check, and available tools
gitnexus://repo/{name}/clusters All functional clusters with cohesion scores
gitnexus://repo/{name}/cluster/{name} Cluster members and details
gitnexus://repo/{name}/processes All execution flows
gitnexus://repo/{name}/process/{name} Full process trace with steps
gitnexus://repo/{name}/schema Graph schema for Cypher queries
gitnexus://group/{name}/contracts A group's extracted contracts and cross-links
gitnexus://group/{name}/status Staleness of repos in a group

2 MCP prompts for guided workflows

Prompt What It Does
detect_impact Pre-commit change analysis — scope, affected processes, risk level
generate_map Architecture documentation from the knowledge graph with mermaid diagrams

Agent skills installed to .claude/skills/ and .agents/skills/ (if .agents/ exists) automatically

  • Exploring — navigate unfamiliar code using the knowledge graph
  • Debugging — trace bugs through call chains
  • Impact Analysis — analyze blast radius before changes
  • Refactoring — plan safe refactors using dependency mapping
  • Guide — GitNexus tool/resource/schema reference for the agent
  • CLI — run analyze/status/clean/wiki commands on request
  • PDG Query — statement-level control/data dependence queries (--pdg index)
  • Taint Analysis — source→sink data-flow findings (--pdg index)
  • Plan (/gitnexus-plan) — implementation-ready engineering plans backed by the graph and PDG slices
  • Work (/gitnexus-work) — executes a plan as impact-checked, detect_changes-gated atomic commits
  • Review (/gitnexus-review) — graph-backed review of a PR, branch, range, or local diff, with taint pass and per-domain expert lenses
  • LFG (/gitnexus-lfg) — the full pipeline: plan → user gate → work → review

Repo-specific skills — run gitnexus analyze --skills and GitNexus detects the functional areas of your codebase (via Leiden community detection) and generates each one as a direct project skill under .claude/skills/gitnexus-area-<name>/. Each skill describes a module's key files, entry points, execution flows, and cross-area connections, and is regenerated on each --skills run to stay current.

When a repo contains an .agents/ directory, the standard and generated skills are also mirrored to .agents/skills/ (e.g. .agents/skills/gitnexus-cli/, .agents/skills/gitnexus-area-<name>/) so agents that read repo-local .agents/skills/ (like Codex) stay in sync.

Editor Setup

gitnexus setup auto-detects your editors and writes the correct global MCP config. Run it once. To configure only selected integrations, pass --coding-agent/-c with a comma-separated list, e.g. gitnexus setup -c cursor,codex.

Editor MCP Skills Hooks (auto-augment) Support
Claude Code Yes Yes Yes (PreToolUse + PostToolUse) Full
Cursor Yes Yes Yes (postToolUse, manual install) Full
Antigravity (Google) Yes Yes Yes (AfterTool, Gemini CLI hooks schema)¹ Full
Codex Yes Yes Yes (PreToolUse + PostToolUse, Codex hooks) Full
Factory (Droid) Yes Yes Yes (PostToolUse, plugin) Full
OpenCode Yes Yes — MCP + Skills
CodeBuddy (Tencent) Yes Yes — MCP + Skills
Qoder (Alibaba) Yes Yes — MCP + Skills
Windsurf Yes — — MCP

Full means MCP tools + agent skills + hooks that enrich searches with graph context. Claude Code and Codex go deepest: their PreToolUse hooks enrich the search before it runs, and their PostToolUse hooks also detect a stale index after commits and prompt the agent to reindex. Cursor, Antigravity, and Factory augment from a post-tool hook only, so they enrich the result rather than the query and do not carry the stale-index hint.

¹ Antigravity hooks follow the Gemini CLI hooks reference (Antigravity 2.0 is the documented successor to Gemini CLI). Augmentation runs in AfterTool because BeforeTool has no context-injection channel in the Gemini contract — the agent sees graph context appended to the tool result via hookSpecificOutput.additionalContext. Stale-index hints land in the same channel after a successful git commit/merge/rebase/cherry-pick/pull. The schema may evolve if Antigravity-specific hook docs diverge from Gemini CLI's; the implementation will track those changes.

Manual MCP configuration (if you prefer not to run gitnexus setup)

Claude Code (full support — MCP + skills + hooks):

# macOS / Linux
claude mcp add gitnexus -- npx -y gitnexus@latest mcp

# Windows
claude mcp add gitnexus -- cmd /c npx -y gitnexus@latest mcp

Codex (full support — MCP + skills + hooks):

codex mcp add gitnexus -- npx -y gitnexus@latest mcp

Or via ~/.codex/config.toml (system scope) / .codex/config.toml (project scope):

[mcp_servers.gitnexus]
command = "npx"
args = ["-y", "gitnexus@latest", "mcp"]

Codex hooks (PreToolUse graph enrichment + PostToolUse stale-index detection in ~/.codex/hooks.json, same schema as Claude Code) need the bundled adapter script, so they are installed by gitnexus setup -c codex rather than manually.

Alternatively, install everything as a Codex plugin (MCP + skills + hooks in one step):

codex plugin marketplace add abhigyanpatwari/GitNexus
# then inside Codex: /plugins → install "GitNexus"

Codex notes: SessionStart is intentionally not registered — Codex reads AGENTS.md natively, which already carries the GitNexus context block. Newly installed hooks need a one-time approval in Codex via /hooks before they run. Pick one install route (gitnexus setup -c codex or the plugin): plugin hooks load alongside ~/.codex/hooks.json, so installing both can fire duplicate hooks per tool call.

Factory (Droid) — MCP + skills via gitnexus setup -c droid, or add the server manually to ~/.factory/mcp.json (user scope, applies to all projects):

{
  "mcpServers": {
    "gitnexus": {
      "command": "npx",
      "args": ["-y", "gitnexus@latest", "mcp"]
    }
  }
}

gitnexus setup -c droid also installs skills to ~/.factory/skills/. For the PostToolUse search-augment hook, install the bundled gitnexus-factory-plugin/ — from a marketplace that includes this repo, run droid plugin install gitnexus@<marketplace>, or point Droid at it via extraKnownMarketplaces in .factory/settings.json. Factory reads AGENTS.md natively, which already carries the GitNexus context block.

Cursor (~/.cursor/mcp.json — global, works for all projects):

{
  "mcpServers": {
    "gitnexus": {
      "command": "npx",
      "args": ["-y", "gitnexus@latest", "mcp"]
    }
  }
}

Antigravity (Google) — ~/.gemini/antigravity/mcp_config.json:

{
  "mcpServers": {
    "gitnexus": {
      "command": "npx",
      "args": ["-y", "gitnexus@latest", "mcp"]
    }
  }
}

gitnexus setup also merges an AfterTool entry into ~/.gemini/settings.json (under the canonical Gemini CLI hooks schema) and installs skills to ~/.gemini/antigravity/skills/. Existing user hooks are preserved. The hook adapter's path is rewritten at install time, so run gitnexus setup rather than hand-editing.

OpenCode (~/.config/opencode/config.json):

{
  "mcp": {
    "gitnexus": {
      "type": "local",
      "command": ["gitnexus", "mcp"]
    }
  }
}

CodeBuddy (Tencent) — priority chain, edit the first non-empty file that exists: ~/.codebuddy/.mcp.json (recommended) → ~/.codebuddy/mcp.json (deprecated) → ~/.codebuddy.json (legacy). CodeBuddy reads only the first existing file, so adding servers to a higher-priority file than the one currently in use would hide the servers below it. Create ~/.codebuddy/.mcp.json only if none exist:

{
  "mcpServers": {
    "gitnexus": {
      "command": "npx",
      "args": ["-y", "gitnexus@latest", "mcp"]
    }
  }
}

Qoder (Alibaba) — ~/.qoder.json:

{
  "mcpServers": {
    "gitnexus": {
      "command": "npx",
      "args": ["-y", "gitnexus@latest", "mcp"]
    }
  }
}
MCP read-only mode

Set GITNEXUS_MCP_READ_ONLY=1 before starting the MCP server to expose only the proven single-repository read surface. Raw cypher, rename and group tools, group routing, and group resources are omitted from discovery and rejected before backend dispatch. Tool descriptions and generated setup/context resources are scrubbed so they do not recommend unavailable routes.

The default is unchanged when the variable is unset or 0. Any other value fails server startup rather than silently weakening the policy.

MCP repository policy

Set GITNEXUS_MCP_ALLOWED_REPOS to a comma-separated list of canonical registry names or absolute indexed paths. Entries are trimmed, resolved against the registry, and deduplicated at startup. When exactly one repository is allowed it becomes the implicit default; when several are allowed, callers must select one unless GITNEXUS_MCP_DEFAULT_REPO is also set.

The default repository must resolve to an allowed repository. Invalid, ambiguous, blank, or mismatched configuration fails startup before stdio or HTTP begins serving. The allowlist applies to tools, aliases, discovery, resources, templates, implicit resolution, and embedded HTTP; hidden repository details are not included in selection errors. Setting only GITNEXUS_MCP_DEFAULT_REPO chooses a default without restricting explicit repository selections. An allowed repository whose name is duplicated in the registry must be configured by path, and its context resource is only served for the unique name form.

MCP response budgets

The query, context, and impact tools accept an optional positive-integer maxTokens argument. It bounds the complete formatted MCP response, including hints and error text, using a deterministic four-UTF-8-bytes-per-token estimate. When truncation is required, the response ends with … and remains valid UTF-8.

Set GITNEXUS_MCP_DEFAULT_MAX_TOKENS to apply the same guardrail when callers do not send maxTokens. An explicit tool argument takes precedence. Leaving both unset preserves the existing response byte-for-byte; this is a transport guardrail, not semantic pagination or an exact model-specific tokenizer limit.

CLI Reference

Everyday commands:

gitnexus setup                   # Configure MCP for detected editors (one-time; -c to select)
gitnexus analyze [path]          # Index a repository (or update a stale index)
gitnexus analyze [path] --watch  # Watch local files and serialize incremental refreshes
gitnexus mcp                     # Start MCP server (stdio) — serves all indexed repos
gitnexus serve                   # Start local HTTP server (multi-repo) for web UI connection
gitnexus eval-server             # Start lightweight evaluation HTTP tools (loopback by default)
gitnexus list                    # List all indexed repositories
gitnexus status                  # Show index status for current repo
gitnexus clean                   # Delete index for current repo
gitnexus wiki [path]             # Generate repository wiki from knowledge graph
gitnexus uninstall               # Preview removal of GitNexus MCP/skills/hooks (--force to apply)

You can also query the graph directly from the terminal — gitnexus query, context, impact, trace, cypher, detect-changes, and check mirror the MCP tools of the same names, and gitnexus doctor prints runtime platform capabilities.

gitnexus analyze --watch requires a Git repository. It runs one initial analysis, then debounces scanner-admitted working-tree changes for 300 ms by default and applies serialized incremental refreshes. Events arriving during a refresh remain queued, and retryable failures retain the same batch with bounded backoff. Invalid .gitnexusrc or ignore-file reloads pause ordinary refreshes until the control file is fixed. Stop the watcher with Ctrl+C.

Watch mode accepts --debounce, --workers, --worker-timeout, --max-file-size, --max-processes, --max-process-branching, --max-process-trace-depth, --max-entry-point-candidates, --branch, --pdg, --skip-fts, --name, --allow-duplicate-name, and --verbose. Explicit one-shot options such as --force, --repair-fts, embedding flags, --skills, --self-commit, --index-only, and --skip-git are rejected. Unsupported defaults from .gitnexusrc are ignored with a warning rather than making an otherwise valid repository unwatchable.

POSIX requests clone-first copy-and-swap publication when the live index has no orphan sidecars. Windows and sidecar fallback runs update in place: failures known to occur before writes are retried, while a failure that may have mutated the live index stops the watcher. Watch mode does not pull remotes. Running MCP and serve processes reopen a newly published index automatically; MCP observes the replacement on its next tool call, typically within five seconds, so no restart is required.

Authenticated eval-server binding

gitnexus eval-server binds to 127.0.0.1 by default. Loopback bindings do not require authentication. Any non-loopback bind, including 0.0.0.0, a LAN address, or a hostname that resolves to a LAN IPv4 address, requires GITNEXUS_AUTH_TOKEN. Every endpoint then requires an exact Authorization: Bearer <token> header.

GITNEXUS_AUTH_TOKEN='replace-me' gitnexus eval-server --host 0.0.0.0

The token may be set in the shell, .env.local, or .env in the working directory. Precedence is shell > .env.local > .env. Only GITNEXUS_AUTH_TOKEN is read from those files; their other values are not added to the process environment. Keep token files uncommitted.

All analyze flags
gitnexus analyze --force         # Full graph + FTS rebuild (reuses unchanged parser output)
gitnexus analyze --no-parse-cache # Full rebuild that re-parses every source file
gitnexus analyze --repair-fts    # Fast path: rebuild/verify only FTS indexes on existing index data
gitnexus analyze --skip-fts      # Index graph/embeddings without loading FTS or building keyword indexes
gitnexus analyze --skills        # Generate repo-specific skill files from detected communities
gitnexus analyze --skip-embeddings  # Skip embedding generation (faster)
gitnexus analyze --embeddings [limit]  # Enable embedding generation (slower, better search)
gitnexus analyze --skip-agents-md   # Preserve custom AGENTS.md/CLAUDE.md gitnexus section edits
gitnexus analyze --skip-skills      # Skip installing standard skill files under .claude/skills/ and .agents/skills/
gitnexus analyze --skip-git         # Index folders that are not Git repositories
gitnexus analyze --default-branch develop  # Branch used in the generated regression-compare example (base_ref)
gitnexus analyze --verbose       # Log skipped files when parsers are unavailable
gitnexus analyze --worker-timeout 60  # Increase worker idle timeout for slow parses
gitnexus analyze --workers <n>   # Parse worker pool size (>=1; default: cores-1, capped at 16,
                                 # auto-sized to the repo). 0 is rejected — there is no sequential mode.
gitnexus analyze --max-processes <n>  # Process-detection process cap (replaces dynamic max(20, round(symbols/10)))
gitnexus analyze --max-entry-point-candidates <n>  # Ranked entry-point pool (default 200; raise when the warning names it)
gitnexus analyze --spring-actuator ./actuator  # Enrich with local Spring Boot Actuator JSON snapshots
gitnexus analyze --asyncapi-spec ./docs/asyncapi  # Resolve broker addresses from AsyncAPI 3.x documents
gitnexus analyze --memory-budget 3000  # Main-thread V8 heap in MB (>= 200); overrides the auto-sizer and --max-old-space-size
gitnexus analyze --wal-checkpoint-threshold 67108864  # LadybugDB WAL auto-checkpoint threshold in bytes
                                 # (default 67108864 = 64 MiB; -1 keeps Ladybug stock ~16 MiB)

--skip-fts (or GITNEXUS_SKIP_FTS=1) disables FTS extension loading and keyword-index construction for this analysis. Graph queries, communities, processes, and existing embeddings remain available. Status and search report "FTS disabled for this index". Remove both the flag and environment setting and run analyze again to restore keyword search, even at the same commit. Only the exact environment value 1 enables the opt-out; the flag takes precedence. It cannot be combined with --repair-fts. Disabling an existing FTS index may require one graph-store rebuild to avoid unsafe writes through native indexes.

--spring-actuator is explicitly opt-in and accepts either a JSON bundle keyed by mappings, beans, conditions, configprops, and/or env, or a directory containing endpoint-named JSON files. It confirms matching static nodes and adds conservative runtime-only routes, beans, and property keys. The configured input is excluded from source scanning; only normalized repository-relative exclusions are retained for future scans, never absolute paths. Env/configprops values, origins, condition messages, and source names are never persisted or printed. Because snapshots are external runtime state, an enabled run always rebuilds; the first later run without the option rebuilds once to remove runtime evidence. The same path can be set as springActuator in .gitnexusrc.

--asyncapi-spec is explicitly opt-in and accepts a directory of AsyncAPI documents or a single document; the path is resolved against the repository root, so a committed docs/asyncapi and an absolute cache written by something else both work. Each operations[] entry of an AsyncAPI 3.x document can contribute a Destination node keyed by broker and address, with action: send emitting PUBLISHES_TO and action: receive emitting CONSUMES_FROM, so a document and source code that name one address on one broker land on the same node. Edges start at the document, not at a callable — a document states that the service talks to an address, not which method does — and no address a document names is ever attached to an unresolved source site.

An operation must name a protocol, either through its own bindings or through the servers[].protocol of the servers its channel resolves to (a channel that lists no servers resolves to all of them); operations that name none are refused, as are operations whose two readings name different brokers, and channels that inherit a multi-protocol server set without choosing. HTTP and WebSocket documents are refused for destination minting: there the host rather than the address names the place, and an HTTP endpoint is already modelled as a Route. A parameterized address — a channel declaring parameters, or an address containing { — is refused rather than keyed: two services publishing {env}.orders share a pattern, not a queue. AsyncAPI 2.x is refused under its own counted reason and never mapped, because its publish/subscribe are inverted relative to 3.x send/receive and a naive mapping would reverse the async graph while leaving it connected. Every refusal is counted, and a configured path that yields nothing is reported rather than passed over in silence.

Like Actuator snapshots, documents are external to git freshness — replacing one moves no commit and dirties no file — so an enabled run always rebuilds, and the first later run without the option rebuilds once to remove document-derived evidence. There is no glob-based auto-discovery, and the option is unsupported with --watch.

If analyze reports a worker parse timeout on a large or unusual repository, it keeps running and falls back safely. To give slow worker jobs more time, use --worker-timeout 60 or set GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS=60000. For very large files, GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES controls the worker job byte budget.

Embeddings node limit — gitnexus analyze --embeddings generates semantic search vectors with a default 50,000-node safety cap to protect memory on large repositories:

gitnexus analyze --embeddings          # default 50,000 node safety cap
gitnexus analyze --embeddings 0        # disable the cap entirely
gitnexus analyze --embeddings 100000   # custom cap

If embeddings are skipped on a large repository, the indexed graph likely exceeds the default cap — re-run with --embeddings 0 or a higher limit.

Keep remote repositories indexed with gitnexus auto-sync

gitnexus auto-sync clones or pulls configured repositories, analyzes new commits, and optionally syncs their group. It runs once immediately, then repeats on the configured interval. It runs in the foreground; use your process manager if it must survive a shell session. gitnexus watch is reserved and prints this split; it does not start auto-sync or local file watching.

# 1. Create the config once. It never overwrites an existing file.
gitnexus auto-sync init

# 2. Edit $GITNEXUS_HOME/watch_config.yml, then start it.
gitnexus auto-sync start              # `gitnexus auto-sync` is equivalent
gitnexus auto-sync status
gitnexus auto-sync restart            # Required after config changes
gitnexus auto-sync stop
gitnexus auto-sync reset             # Clear failure state; leaves clones and indexes intact

GITNEXUS_HOME defaults to ~/.gitnexus. A minimal configuration:

sync_interval_minutes: 10
analyze_timeout: 5m
# Extra hosts beyond github.com, gitlab.com, and gitee.com. Exact names only.
# allowed_hosts: [gitlab.mycompany.com]
projects:
  - local_path: /absolute/path/to/clones
    branches: [main, master]
    # pdg: omit = preserve live index mode; true = keep PDG current;
    # false = init default (warns, then strips PDG on the next successful rebuild).
    # Do not paste pdg: false onto an existing watch file unless you intend to drop PDG.
    pdg: false
    overwrite_local_changes: false
    remote_urls:
      - git@github.com:owner/repo.git
  • sync_interval_minutes must be at least 5; local_path must be an absolute path. Clones are stored below it as host/namespace/repo.
  • Remote URLs may use SSH SCP or HTTPS. Hosts are github.com, gitlab.com, and gitee.com unless listed in top-level allowed_hosts (exact DNS names, no wildcards). The CLI image includes OpenSSH; mount keys yourself. Invalid watch_config.yml skips auto-sync immediately. Auto-sync honors .gitnexusrc embeddings (HTTP embeddings env still required in the image).
  • branches are tried in order. The legacy branch field is supported, but do not set both.
  • Set per-project pdg: true to keep the full control-flow, control/data-dependence, and taint layers current. Untouched configs that omit pdg preserve an existing index's mode and cannot silently strip PDG data. Do not paste pdg: false from this example onto an existing watch file unless you intend to drop PDG; an explicit false opt-out logs a warning before removing existing PDG data. Auto-sync requests atomic incremental publication where supported, so readers keep using the previous graph until a successful update is ready and a failed staged analysis leaves it intact; unsupported paths retain the analyzer's existing in-place behavior.
  • Analysis runs in an isolated worker; analyze_timeout defaults to half of sync_interval_minutes, but may be longer (for example, a 30m analysis timeout with 5 minute polling) up to Node's timer limit. If a polling tick arrives while analysis is active, it is coalesced into one immediate follow-up run using the newest commit. If the parent times out and leaves that worker running, the follow-up is deferred to the next interval so a leftover lock holder is not counted as a hard analyze failure. Timeout and auto-sync stop request safe cancellation; a worker in native work exits after reaching a JS-visible safe point. Until then, auto-sync reports cancelling or stopping and retains ownership so another auto-sync cannot take over, for up to 5 seconds — after that the parent stops waiting and leaves the worker to exit on its own rather than killing it mid-write. This behavior is the same on macOS and Windows. overwrite_local_changes defaults to false, so a dirty local clone is skipped rather than overwritten; setting it to true also deletes untracked files in the clone, while keeping ignored paths.
  • Add group_name only after creating that group with gitnexus group create <name>. Partial clone output is isolated and removed after 14 days.

See the full auto-sync configuration and runtime reference for concurrency, timeouts, failure thresholds, and runtime files.

Repository groups (multi-repo / monorepo service tracking)
gitnexus group create <name>                           # Create a repository group
gitnexus group add <group> <groupPath> <registryName>  # Add a repo. <groupPath> is a hierarchy path
                                                       # (e.g. hr/hiring/backend); <registryName> is the
                                                       # repo's name from the registry (see `gitnexus list`)
gitnexus group remove <group> <groupPath>              # Remove a repo by its hierarchy path
gitnexus group list [name]                             # List groups, or show one group's config
gitnexus group sync <name>                             # Extract contracts and match across repos/services
gitnexus group contracts <name>                        # Inspect extracted contracts and cross-links
gitnexus group query <name> <q>                        # Search execution flows across all repos in a group
gitnexus group status <name>                           # Check staleness of repos in a group
gitnexus group impact <name> --target <symbol> --repo <groupPath>  # Cross-repo blast radius
Project config (.gitnexusrc)

Commit a .gitnexusrc JSON file at the repo root to preconfigure recurring analyze options per project, instead of re-passing the same flags every run. It is read from the resolved repo root (not .gitnexus/, which is gitignored index storage). CLI flags always override .gitnexusrc.

{
  // Default branch used in the generated regression-compare example (base_ref).
  // Use this so a project on `develop`/`master` doesn't get "main" rewritten
  // over its fix on every analyze. (Alias: "branch".)
  "defaultBranch": "develop",
  "skipContextFiles": true, // alias of skipAgentsMd: keep your own AGENTS.md/CLAUDE.md
  "skipSkills": true, // don't install standard skill files under .claude/skills/ and .agents/skills/
  "embeddings": true, // generate embeddings by default
  "springActuator": "./actuator", // optional local runtime snapshot directory or bundle
  "workerTimeout": 60,
}

A nested analyze block is also accepted (and overrides flat keys for the same option):

{ "analyze": { "defaultBranch": "develop", "skipSkills": true } }

Notes:

  • The default branch is resolved as: --default-branch > .gitnexusrc defaultBranch/branch > auto-detected origin/HEAD > main.
  • skipContextFiles / skipAiContext are aliases for skipAgentsMd — they skip the AGENTS.md / CLAUDE.md block only. They do not imply skipSkills. indexOnly is the stronger option that skips all file injection.
  • Supported keys: defaultBranch (branch), skipAgentsMd (skipContextFiles, skipAiContext), skipSkills, indexOnly, stats/noStats, embeddings, dropEmbeddings, name, allowDuplicateName, maxFileSize, workerTimeout, walCheckpointThreshold, workers, maxProcesses, maxProcessBranching, maxProcessTraceDepth, maxEntryPointCandidates, springActuator, embeddingThreads, embeddingBatchSize, embeddingSubBatchSize, embeddingDevice.
  • The file is JSON only. Unknown keys and wrong JSON types fail fast with an actionable error before analysis starts. Process-detection knobs (maxProcesses, maxProcessBranching, maxProcessTraceDepth, maxEntryPointCandidates) that are not a positive integer warn and fall through to env, then the built-in default.
Environment variables

Most analyze knobs are also CLI flags (--workers, --worker-timeout, --max-file-size, --verbose). Use the env-var form when you'd otherwise repeat the same flag every run, or when invoking GitNexus from a long-running host (MCP server, eval-server, CI shell) that already manages its own environment. CLI flags take precedence over .gitnexusrc, which takes precedence over env vars, which take precedence over built-in defaults.

Variable Default Effect Tune when…
GITNEXUS_WORKER_POOL_SIZE cores - 1, capped at 16 Parse worker pool size (must be ≥ 1). Equivalent to --workers <n>. The worker pool is the sole parse path — there is no sequential parser, so 0 is rejected with an actionable error (the pool self-heals via quarantine + respawn). Constrained containers (cgroup CPU limits) or CI runners with explicit quotas. To narrow down a worker crash set 1 for a single-worker pool — not 0.
GITNEXUS_PARSE_CHUNK_CONCURRENCY 2 Number of chunks whose file contents may be read into memory in parallel while the pool dispatches the current chunk. Worker dispatch itself stays serial. Repos large enough to chunk (multi-MB total source) where disk I/O is a measurable fraction of analyze wall-clock.
GITNEXUS_VERBOSE unset When 1, enables verbose ingestion logs (skipped-file warnings, per-chunk throughput, parse-cache stats). Equivalent to --verbose. Debugging an analyze that "completed" but seems to have missed files; tuning --workers / chunk concurrency against observable throughput.
GITNEXUS_EMBEDDING_RETRY_TIMEOUTS unset When truthy (1/true/yes), per-attempt HTTP embedding timeouts (TimeoutError on fetch or body read) go through the bounded GITNEXUS_EMBEDDING_MAX_ATTEMPTS retry loop instead of failing the job. Any other value leaves it off, so cloud/default timeouts remain terminal. Local accelerators that drop a device lock when the client disconnects and succeed on the next request (observed with FastFlowLM on Ryzen AI).
GITNEXUS_EMBEDDING_SIDECAR_TIMEOUT_MS 180000 (3 minutes) Per-request IPC timeout for local embedding sidecar embed batches. On overrun the parent SIGKILLs the sidecar child and rejects the batch. Init still uses the HF download budget (HF_DOWNLOAD_TIMEOUT_MS × attempts), not this knob. Large embed batches or slow local ONNX inference cause sidecar request timeouts during analyze --embeddings, embeddings sync, serve, or MCP.
GITNEXUS_ANALYZER_IDENTITY_IN_PROCESS_GUARDS unset When truthy (1/true/yes), forces in-process cache-guard validation once a batch has ≥128 requests. In-process mode also auto-selects when packageRoot/buildRoot fail W_OK with EACCES/EROFS. Otherwise those large batches use a Node subprocess probe. Batches under 128 always stay in-process. Trusted or read-only installs where two identity subprocess spawns per analyze dominate wall time; leave unset to keep the default isolation path on writable trees.
GITNEXUS_RESOLVE_DEF_GRAPH_ID_MEMO on (unset) Memoizes resolveDefGraphId per nodeLookup instance (WeakMap). Enabled by default. Set to 0/false/off/no to disable and recompute on every call (debug / bisect memo bugs). Suspecting stale graph-id resolution after a lookup rebuild, or comparing memo vs uncached cost on a large index.
GITNEXUS_AUTH_TOKEN unset Bearer token required when eval-server binds beyond loopback. May also be read from .env.local or .env; shell values take precedence. Exposing the evaluation HTTP tools to a container, VM, or LAN.
GITNEXUS_MCP_AUTH_TOKEN unset Bearer token for the dedicated gitnexus mcp --http server, for a directly reachable gitnexus serve /api/mcp route, and for the docker-server / web proxy in front of one. A non-loopback dedicated MCP bind requires it; serve enables protocol-layer MCP auth when it is set. Behind a proxy, set the same value on both services: the proxy spends the edge GITNEXUS_SERVE_AUTH_TOKEN, then replaces Authorization with this token on /api/mcp only. Dedicated MCP, a serve the client can reach directly, or a proxied deploy (Render Blueprint) where the backend runs protocol-layer MCP auth — configure it on the proxy too.
GITNEXUS_PROFILE_DEFERRED unset When 1, emits [deferred-profile] timing/progress logs for the post-chunk deferred resolution band (imports → heritage → buildHeritageMap → legacy call resolution). Implied by GITNEXUS_VERBOSE. Diagnosing analyze stalls in "Resolving calls (all chunks)" on large Java/Kotlin repos (issue #1741) without the full verbose ingestion noise.
GITNEXUS_PROFILE_DEFERRED_SLOW_MS 3000 (verbose) / 5000 Per-file threshold in ms above which processCallsFromExtracted emits a slow file … log line. Parsed via Number(): accepts integers (5000), scientific notation (2.5e3), decimals (.5), and hex (0x10). Non-finite or non-positive values fall back to the default. Hunting a few outlier files dominating the deferred call-resolution stage; lower to surface more, raise to focus only on the worst.
PROF_LBUG_LOAD unset When 1, emits one [lbug-load prof] summary line per loadGraphToLbug call breaking the graph-DB persistence wall into stages (csv-emit / copy-nodes / copy-rels / fallback / total) plus node & edge counts. Zero-cost when unset. Attributing large-repo analyze wall time across CSV generation vs. LadybugDB COPY (issue #2203) — the analyze "emit" timing is the scope-resolution bucket, not this DB-write path.
GITNEXUS_MAX_FILE_SIZE 512 (KB) Walker skip threshold in KB. Hard cap is 32768 (tree-sitter buffer ceiling). Equivalent to --max-file-size <kb>. Indexing repos with intentionally-large source files (generated parsers, vendored bundles) that should still be parsed.
GITNEXUS_MAX_PROCESSES dynamic (max(20, round(symbols/10))) Analyze-time process-detection process cap. Equivalent to --max-processes <n> / .gitnexusrc maxProcesses. Explicit values replace the dynamic formula (not a multiplier). 0 is invalid, not unlimited. Changing this re-detects flows on the next analyze without --force. Distinct from query-time IMPACT_MAX_CHUNKS. [processes] … whole flows are MISSING names --max-processes after entry points were never traced or flows were dropped. Tracing does not start the next entry once collected traces already reach maxProcesses * 2; a started entry can still emit every trace that entry produces.
GITNEXUS_MAX_PROCESS_BRANCHING 4 Analyze-time per-node branching cap during flow tracing. Equivalent to --max-process-branching <n>. Shape-only: raising it shortens fewer traces; it does not restore whole missing flows. A flow is present but calleesDropped is high at debug.
GITNEXUS_MAX_PROCESS_TRACE_DEPTH 10 Analyze-time DFS depth cap during flow tracing. Equivalent to --max-process-trace-depth <n>. Shape-only. A reported flow is shorter than the code path (tracesDepthCapped at debug).
GITNEXUS_MAX_ENTRY_POINT_CANDIDATES 200 Ranked entry-point candidate pool. Equ

(README truncated)

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

  1. Release Candidate v1.6.13-rc.51v1.6.13-rc.51Sep 28, 2026pre-release

    Automated release candidate build from `main`.\n\n**npm:** `npm install gitnexus@rc`\n**Version:** `1.6.13-rc.51`\n**Target base:** `1.6.13` (rc #51)\n**Source commit (main):** 0ef3f28d0eb3e82007da1933a95677d36ce6c84b\n**Release commit (versioned tree):** 60c272b3991a1989f2843fd7aee19a85580eaff6\n\nRelease candidates are pre-stable builds intended for early testing. Stable releases remain on the `latest` dist-tag. <!-- Release notes generated using configuration in .github/release.yml at v1.6.13-rc.51 --> ## What's Changed ### 🚨 Security * Improve MCP startup compatibility and lazy-load CLI commands by @Shockang in https://github.com/abhigyanpatwari/GitNexus/pull/207 * test: add integration test coverage and fix KuzuDB fork crashes by @magyargergo in https://github.com/abhigyanpatwari/GitNexus/pull/209 ### 🚀 Features * feat(hooks): auto-reindex after git commit with embeddings preservation by @L1nusB in https://github.com/abhigyanpatwari/GitNexus/pull/205 * feat: HTTP embedding backend for self-hosted/remote endpoints by @zm2231 in https://github.com/abhigyanpatwari/GitNexus/pull/395 * feat: complete Swift support — query fix, export detection, implicit imports, constructor res

  2. Release Candidate v1.6.13-rc.50v1.6.13-rc.50Sep 28, 2026pre-release

    Automated release candidate build from `main`.\n\n**npm:** `npm install gitnexus@rc`\n**Version:** `1.6.13-rc.50`\n**Target base:** `1.6.13` (rc #50)\n**Source commit (main):** b20c8b6ef247e331788d84803d5b0e5b2d993a08\n**Release commit (versioned tree):** 1c551e7fd853bfa7dfd9d6e820de4007ea03d965\n\nRelease candidates are pre-stable builds intended for early testing. Stable releases remain on the `latest` dist-tag. <!-- Release notes generated using configuration in .github/release.yml at v1.6.13-rc.50 --> ## What's Changed ### 🚨 Security * Improve MCP startup compatibility and lazy-load CLI commands by @Shockang in https://github.com/abhigyanpatwari/GitNexus/pull/207 * test: add integration test coverage and fix KuzuDB fork crashes by @magyargergo in https://github.com/abhigyanpatwari/GitNexus/pull/209 ### 🚀 Features * feat(hooks): auto-reindex after git commit with embeddings preservation by @L1nusB in https://github.com/abhigyanpatwari/GitNexus/pull/205 * feat: HTTP embedding backend for self-hosted/remote endpoints by @zm2231 in https://github.com/abhigyanpatwari/GitNexus/pull/395 * feat: complete Swift support — query fix, export detection, implicit imports, constructor res

  3. Release Candidate v1.6.13-rc.49v1.6.13-rc.49Sep 28, 2026pre-release

    Automated release candidate build from `main`.\n\n**npm:** `npm install gitnexus@rc`\n**Version:** `1.6.13-rc.49`\n**Target base:** `1.6.13` (rc #49)\n**Source commit (main):** 3d09c85ee330b79a5e117fff5eec229371561b8b\n**Release commit (versioned tree):** dbe3261fd240688a7f504805842ccdea582a5685\n\nRelease candidates are pre-stable builds intended for early testing. Stable releases remain on the `latest` dist-tag. <!-- Release notes generated using configuration in .github/release.yml at v1.6.13-rc.49 --> ## What's Changed ### 🐛 Bug Fixes * fix(rust): respect Cargo target boundaries in name fallback by @Sweetdevil144 in https://github.com/abhigyanpatwari/GitNexus/pull/3294 ### 📝 Other Changes * fix(lbug): ship FTS per-platform and recover in-place native aborts by @magyargergo in https://github.com/abhigyanpatwari/GitNexus/pull/3274 * fix(embeddings): keep ONNX off the install and analyze critical path by @magyargergo in https://github.com/abhigyanpatwari/GitNexus/pull/3287 * fix(mcp): name the indexed ref on hot read tool staleness (#3291) by @magyargergo in https://github.com/abhigyanpatwari/GitNexus/pull/3293 * feat(auto-sync): preserve PDG indexes across updates by @mattpat

  4. Release Candidate v1.6.13-rc.48v1.6.13-rc.48Sep 28, 2026pre-release

    Automated release candidate build from `main`.\n\n**npm:** `npm install gitnexus@rc`\n**Version:** `1.6.13-rc.48`\n**Target base:** `1.6.13` (rc #48)\n**Source commit (main):** 52581cd4e9c425e2cf992d45be91980e554d8874\n**Release commit (versioned tree):** b40afe3e3800ba113ba87f5123d501ddbe81de24\n\nRelease candidates are pre-stable builds intended for early testing. Stable releases remain on the `latest` dist-tag. <!-- Release notes generated using configuration in .github/release.yml at v1.6.13-rc.48 --> ## What's Changed ### 🐛 Bug Fixes * fix(rust): respect Cargo target boundaries in name fallback by @Sweetdevil144 in https://github.com/abhigyanpatwari/GitNexus/pull/3294 ### 📝 Other Changes * fix(lbug): ship FTS per-platform and recover in-place native aborts by @magyargergo in https://github.com/abhigyanpatwari/GitNexus/pull/3274 * fix(embeddings): keep ONNX off the install and analyze critical path by @magyargergo in https://github.com/abhigyanpatwari/GitNexus/pull/3287 * fix(mcp): name the indexed ref on hot read tool staleness (#3291) by @magyargergo in https://github.com/abhigyanpatwari/GitNexus/pull/3293 * feat(auto-sync): preserve PDG indexes across updates by @mattpat

  5. Release Candidate v1.6.13-rc.47v1.6.13-rc.47Sep 28, 2026pre-release

    Automated release candidate build from `main`.\n\n**npm:** `npm install gitnexus@rc`\n**Version:** `1.6.13-rc.47`\n**Target base:** `1.6.13` (rc #47)\n**Source commit (main):** 2925cfc02444753f4f3cace342f8c57a6e8d1f42\n**Release commit (versioned tree):** 02bf919ac3412b77d6b0afc6844e222bbacf3037\n\nRelease candidates are pre-stable builds intended for early testing. Stable releases remain on the `latest` dist-tag. <!-- Release notes generated using configuration in .github/release.yml at v1.6.13-rc.47 --> ## What's Changed ### 🐛 Bug Fixes * fix(rust): respect Cargo target boundaries in name fallback by @Sweetdevil144 in https://github.com/abhigyanpatwari/GitNexus/pull/3294 ### 📝 Other Changes * fix(lbug): ship FTS per-platform and recover in-place native aborts by @magyargergo in https://github.com/abhigyanpatwari/GitNexus/pull/3274 * fix(embeddings): keep ONNX off the install and analyze critical path by @magyargergo in https://github.com/abhigyanpatwari/GitNexus/pull/3287 * fix(mcp): name the indexed ref on hot read tool staleness (#3291) by @magyargergo in https://github.com/abhigyanpatwari/GitNexus/pull/3293 * feat(auto-sync): preserve PDG indexes across updates by @mattpat

Code frequency

additions and deletions
+1.4M-1.4MWeek of 2025-12-28: +10,541 linesWeek of 2025-12-28: -28 linesWeek of 2026-01-04: +14,606 linesWeek of 2026-01-04: -1,563 linesWeek of 2026-01-11: +34,523 linesWeek of 2026-01-11: -28,328 linesWeek of 2026-01-18: +19,487 linesWeek of 2026-01-18: -3,970 linesWeek of 2026-01-25: +5,875 linesWeek of 2026-01-25: -617 linesWeek of 2026-02-01: +74,811 linesWeek of 2026-02-01: -74,958 linesWeek of 2026-02-08: +4,062 linesWeek of 2026-02-08: -1,025 linesWeek of 2026-02-15: +9,355 linesWeek of 2026-02-15: -4,250 linesWeek of 2026-02-22: +9,543 linesWeek of 2026-02-22: -4,086 linesWeek of 2026-03-01: +11,902 linesWeek of 2026-03-01: -871 linesWeek of 2026-03-08: +33,915 linesWeek of 2026-03-08: -4,883 linesWeek of 2026-03-15: +51,058 linesWeek of 2026-03-15: -12,339 linesWeek of 2026-03-22: +81,550 linesWeek of 2026-03-22: -42,711 linesWeek of 2026-03-29: +24,206 linesWeek of 2026-03-29: -2,787 linesWeek of 2026-04-05: +18,945 linesWeek of 2026-04-05: -1,805 linesWeek of 2026-04-12: +58,354 linesWeek of 2026-04-12: -9,563 linesWeek of 2026-04-19: +23,748 linesWeek of 2026-04-19: -3,915 linesWeek of 2026-04-26: +276,660 linesWeek of 2026-04-26: -2,271 linesWeek of 2026-05-03: +28,714 linesWeek of 2026-05-03: -2,925 linesWeek of 2026-05-10: +31,495 linesWeek of 2026-05-10: -2,350 linesWeek of 2026-05-17: +31,902 linesWeek of 2026-05-17: -7,023 linesWeek of 2026-05-24: +40,848 linesWeek of 2026-05-24: -2,736 linesWeek of 2026-05-31: +46,245 linesWeek of 2026-05-31: -30,316 linesWeek of 2026-06-07: +1,407,715 linesWeek of 2026-06-07: -5,665 linesWeek of 2026-06-14: +61,831 linesWeek of 2026-06-14: -2,268 linesWeek of 2026-06-21: +883,544 linesWeek of 2026-06-21: -637,690 linesWeek of 2026-06-28: +14,979 linesWeek of 2026-06-28: -1,858 linesWeek of 2026-07-05: +18,523 linesWeek of 2026-07-05: -1,772 linesWeek of 2026-07-12: +17,858 linesWeek of 2026-07-12: -3,689 linesWeek of 2026-07-19: +77,616 linesWeek of 2026-07-19: -3,602 linesWeek of 2026-07-26: +31,673 linesWeek of 2026-07-26: -2,134 linesWeek of 2026-08-02: +53,571 linesWeek of 2026-08-02: -4,389 linesWeek of 2026-08-09: +47,225 linesWeek of 2026-08-09: -9,189 linesWeek of 2026-08-16: +6,366 linesWeek of 2026-08-16: -1,953 linesWeek of 2026-08-23: +36,804 linesWeek of 2026-08-23: -1,915 linesWeek of 2026-08-30: +278,918 linesWeek of 2026-08-30: -23,858 linesWeek of 2026-09-06: +754,959 linesWeek of 2026-09-06: -2,628 linesWeek of 2026-09-13: +29,482 linesWeek of 2026-09-13: -5,262 linesWeek of 2026-09-20: +3,186 linesWeek of 2026-09-20: -46 linesDec 28, 2025Sep 20, 2026
+4.7M lines added, -953.2K removed over the last year.

Commits per week

last 52 weeks
1150Week of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 2 commitsWeek of 2026-01-04: 25 commitsWeek of 2026-01-11: 23 commitsWeek of 2026-01-18: 14 commitsWeek of 2026-01-25: 10 commitsWeek of 2026-02-01: 21 commitsWeek of 2026-02-08: 5 commitsWeek of 2026-02-15: 17 commitsWeek of 2026-02-22: 90 commitsWeek of 2026-03-01: 23 commitsWeek of 2026-03-08: 15 commitsWeek of 2026-03-15: 105 commitsWeek of 2026-03-22: 91 commitsWeek of 2026-03-29: 29 commitsWeek of 2026-04-05: 44 commitsWeek of 2026-04-12: 89 commitsWeek of 2026-04-19: 57 commitsWeek of 2026-04-26: 60 commitsWeek of 2026-05-03: 82 commitsWeek of 2026-05-10: 65 commitsWeek of 2026-05-17: 67 commitsWeek of 2026-05-24: 67 commitsWeek of 2026-05-31: 68 commitsWeek of 2026-06-07: 68 commitsWeek of 2026-06-14: 37 commitsWeek of 2026-06-21: 29 commitsWeek of 2026-06-28: 39 commitsWeek of 2026-07-05: 31 commitsWeek of 2026-07-12: 82 commitsWeek of 2026-07-19: 115 commitsWeek of 2026-07-26: 59 commitsWeek of 2026-08-02: 53 commitsWeek of 2026-08-09: 34 commitsWeek of 2026-08-16: 8 commitsWeek of 2026-08-23: 41 commitsWeek of 2026-08-30: 88 commitsWeek of 2026-09-06: 58 commitsWeek of 2026-09-13: 35 commitsWeek of 2026-09-20: 30 commitsWeek of 2026-09-27: 12 commitsOct 4, 2025Sep 27, 2026
1.9K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 6 commitsSun 1:00 — 3 commitsSun 2:00 — 2 commitsSun 3:00 — 4 commitsSun 4:00 — 2 commitsSun 5:00 — 5 commitsSun 6:00 — 10 commitsSun 7:00 — 8 commitsSun 8:00 — 3 commitsSun 9:00 — 14 commitsSun 10:00 — 18 commitsSun 11:00 — 7 commitsSun 12:00 — 5 commitsSun 13:00 — 11 commitsSun 14:00 — 4 commitsSun 15:00 — 10 commitsSun 16:00 — 8 commitsSun 17:00 — 7 commitsSun 18:00 — 10 commitsSun 19:00 — 6 commitsSun 20:00 — 10 commitsSun 21:00 — 5 commitsSun 22:00 — 7 commitsSun 23:00 — 5 commitsMon 0:00 — 4 commitsMon 1:00 — 3 commitsMon 2:00 — 8 commitsMon 3:00 — 13 commitsMon 4:00 — 5 commitsMon 5:00 — 4 commitsMon 6:00 — 10 commitsMon 7:00 — 12 commitsMon 8:00 — 18 commitsMon 9:00 — 21 commitsMon 10:00 — 23 commitsMon 11:00 — 13 commitsMon 12:00 — 14 commitsMon 13:00 — 11 commitsMon 14:00 — 11 commitsMon 15:00 — 14 commitsMon 16:00 — 10 commitsMon 17:00 — 10 commitsMon 18:00 — 8 commitsMon 19:00 — 12 commitsMon 20:00 — 10 commitsMon 21:00 — 14 commitsMon 22:00 — 10 commitsMon 23:00 — 9 commitsTue 0:00 — 10 commitsTue 1:00 — 20 commitsTue 2:00 — 5 commitsTue 3:00 — 5 commitsTue 4:00 — 7 commitsTue 5:00 — 18 commitsTue 6:00 — 28 commitsTue 7:00 — 21 commitsTue 8:00 — 20 commitsTue 9:00 — 12 commitsTue 10:00 — 9 commitsTue 11:00 — 7 commitsTue 12:00 — 21 commitsTue 13:00 — 13 commitsTue 14:00 — 13 commitsTue 15:00 — 12 commitsTue 16:00 — 15 commitsTue 17:00 — 12 commitsTue 18:00 — 6 commitsTue 19:00 — 12 commitsTue 20:00 — 6 commitsTue 21:00 — 13 commitsTue 22:00 — 10 commitsTue 23:00 — 8 commitsWed 0:00 — 3 commitsWed 1:00 — 18 commitsWed 2:00 — 5 commitsWed 3:00 — 6 commitsWed 4:00 — 4 commitsWed 5:00 — 2 commitsWed 6:00 — 9 commitsWed 7:00 — 11 commitsWed 8:00 — 12 commitsWed 9:00 — 8 commitsWed 10:00 — 8 commitsWed 11:00 — 14 commitsWed 12:00 — 14 commitsWed 13:00 — 20 commitsWed 14:00 — 11 commitsWed 15:00 — 9 commitsWed 16:00 — 11 commitsWed 17:00 — 14 commitsWed 18:00 — 8 commitsWed 19:00 — 5 commitsWed 20:00 — 18 commitsWed 21:00 — 21 commitsWed 22:00 — 13 commitsWed 23:00 — 8 commitsThu 0:00 — 12 commitsThu 1:00 — 2 commitsThu 2:00 — 4 commitsThu 3:00 — 4 commitsThu 4:00 — 5 commitsThu 5:00 — 26 commitsThu 6:00 — 44 commitsThu 7:00 — 55 commitsThu 8:00 — 31 commitsThu 9:00 — 27 commitsThu 10:00 — 19 commitsThu 11:00 — 19 commitsThu 12:00 — 27 commitsThu 13:00 — 18 commitsThu 14:00 — 13 commitsThu 15:00 — 9 commitsThu 16:00 — 12 commitsThu 17:00 — 19 commitsThu 18:00 — 9 commitsThu 19:00 — 9 commitsThu 20:00 — 11 commitsThu 21:00 — 12 commitsThu 22:00 — 15 commitsThu 23:00 — 6 commitsFri 0:00 — 5 commitsFri 1:00 — 5 commitsFri 2:00 — 2 commitsFri 3:00 — 2 commitsFri 4:00 — 6 commitsFri 5:00 — 12 commitsFri 6:00 — 6 commitsFri 7:00 — 16 commitsFri 8:00 — 9 commitsFri 9:00 — 13 commitsFri 10:00 — 16 commitsFri 11:00 — 16 commitsFri 12:00 — 14 commitsFri 13:00 — 34 commitsFri 14:00 — 10 commitsFri 15:00 — 10 commitsFri 16:00 — 10 commitsFri 17:00 — 8 commitsFri 18:00 — 10 commitsFri 19:00 — 14 commitsFri 20:00 — 9 commitsFri 21:00 — 10 commitsFri 22:00 — 10 commitsFri 23:00 — 0 commitsSat 0:00 — 5 commitsSat 1:00 — 3 commitsSat 2:00 — 1 commitsSat 3:00 — 3 commitsSat 4:00 — 4 commitsSat 5:00 — 4 commitsSat 6:00 — 7 commitsSat 7:00 — 25 commitsSat 8:00 — 15 commitsSat 9:00 — 11 commitsSat 10:00 — 19 commitsSat 11:00 — 14 commitsSat 12:00 — 8 commitsSat 13:00 — 13 commitsSat 14:00 — 11 commitsSat 15:00 — 11 commitsSat 16:00 — 20 commitsSat 17:00 — 13 commitsSat 18:00 — 14 commitsSat 19:00 — 14 commitsSat 20:00 — 14 commitsSat 21:00 — 9 commitsSat 22:00 — 6 commitsSat 23:00 — 11 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits270 (13%)
Community commits1,857 (87%)

2,127 commits in total over the last year.

DateListRankStars gained
May 3, 2026daily#19+131
May 2, 2026daily#24+113
Apr 30, 2026daily#22+41
Apr 29, 2026daily#25+66
Apr 28, 2026daily#13+82
Apr 27, 2026daily#10+124
Apr 26, 2026daily#12+211
Apr 7, 2026daily#15+201
Apr 6, 2026daily#22+173
Apr 5, 2026daily#18+264
Mar 18, 2026daily#25+139
Mar 17, 2026daily#22+149
Mar 16, 2026daily#15+204
Mar 15, 2026daily#14+277
Mar 3, 2026daily#13+222
  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    456.7K stars · TypeScript

  • openclaw/openclaw

    The AI that really does things. Any OS. Any Platform. The lobster way. 🦞

    391.3K stars · TypeScript

  • anomalyco/opencode

    The open source coding agent.

    211.7K stars · TypeScript

  • n8n-io/n8n

    Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

    206.7K stars · TypeScript

  • microsoft/vscode

    Visual Studio Code

    193.5K stars · TypeScript

  • firecrawl/firecrawl

    Supercharge your AI agents with data from the web and beyond. Building the library for superintelligence. 🔥

    188.6K stars · TypeScript