Skip to content
pre-alpha · v0.1 in progress MIT · open source spec-driven · agent-executed

Your codebase,
finally legible.

Dextree turns your repository into a navigable semantic graph — inside VS Code. Click a function, see its callers. Open a PR, see what could break. Ask the graph the questions a README can't answer.

DuckDB + DuckPGQ embedded graph in < 1s nothing leaves your machine by default
0 nodes · 0 edges · idle
DuckDB· embedded OLAP DuckPGQ· SQL/PGQ graph queries Tree-sitter· WASM parsing LSP· semantic enrichment Sigma.js· WebGL render MCP· agent-ready Alfred· BYOK LLM VS Code· native fusion DuckDB· embedded OLAP DuckPGQ· SQL/PGQ graph queries Tree-sitter· WASM parsing LSP· semantic enrichment Sigma.js· WebGL render MCP· agent-ready Alfred· BYOK LLM VS Code· native fusion
01

what you actually get

Four things headless
tools can't do.

Most code intelligence tools index your repo from the outside and hand you a CLI. Dextree lives inside VS Code — fused with diagnostics, git, and tests — so the answers actually mean something. Here's what that buys you.

Ship safer PRs.

⚡ blast radius analysis · v0.2

next

Point at a branch, commit, or PR number. Get a live visualization of every symbol the change touches, how far the impact propagates through the graph, and a scored risk verdict. "Looks fine" stops being a vibe.

commit a3f9d2c · 4 hits, risk: medium

Delete code, safely.

dead code & reachability · v0.1

now

The graph knows which functions nothing calls, which imports nothing uses, and which classes are publicly exported but referenced by zero consumers. Delete with receipts, not anxiety.

reachable dead — safe to delete

Onboard in days, not months.

explorable graph · v0.1

now

New hire spends week one reading docs that lie. With Dextree they spend an hour in the graph: click an endpoint, follow the calls, hover the types, see the tests. The codebase explains itself.

docs.md (4,200 lines)
click. follow. understand.

Feed AI the right context.

MCP server · v0.3

soon

Claude, Cursor, and other MCP-aware agents stop guessing. They query the graph for the exact slice of code they need — callers, dependents, test coverage — instead of grepping the whole repo and burning your token budget.

src/auth/jwt.ts
src/auth/oauth.ts
src/auth/session.ts
src/api/users.ts
src/api/orgs.ts
src/api/billing.ts
src/db/migrations/...
src/db/models/...
tests/...
+ 312 more files
graph query
jwt.sign callers
→ session edges
→ relevant tests
~2k tokens, not 200k
02

how it works · two passes

Fast first.
Smart second.

Most semantic indexers make you wait. Dextree gives you a usable graph in under a second from Tree-sitter alone, then quietly upgrades it in the background as LSP resolves types. The graph never stops getting smarter.

Pass 1 — structural. WASM Tree-sitter parses every file and extracts symbols, calls, imports, classes, methods. No types, no resolution. Just shape. Lands in DuckDB as nodes and edges. The graph is queryable in under a second on most repos.
latency
< 1s
accuracy
~85%
cost
$0
Pass 1 · structural
parse() tokenize() walk() visit() emit() save() read()
03

query playground · simulated

Ask the graph.

DuckPGQ speaks ISO SQL:2023 graph syntax. That means you can ask the questions a flat code search can never answer — and get them back in milliseconds. Click a tab. Hit run. See it work.

DuckPGQ · query

            
results — hit run —
04

how it gets indexed

From source to graph
in < 1 second.

Three stages, two passes, one DuckDB file. The graph is useful the moment Tree-sitter finishes — Pass 2 LSP enrichment upgrades it in place without ever blocking the UI.

01 parallel

Walk the workspace

file discovery · glob filters

Workspace folders, respecting .gitignore and skipping node_modules. Files are queued by language detector and processed concurrently.

< 200ms for a 50k-file repo
02 pass 1 · fast

Tree-sitter pass

structural extraction

Each file is parsed by a Tree-sitter WASM grammar. Symbols, imports, and lexical call edges land in DuckDB. The graph view opens before the file header is read.

< 1s structural graph usable
03 pass 2 · smart

LSP enrichment

semantic upgrade in place

Pass 2 runs in the background, asking VS Code's LSPs for type-accurate references, inheritance edges, and framework annotations. Edges upgrade silently — no re-render, no spinner.

live background enrichment
05

live on your machine

Your code stays
on your machine.

DuckDB embedded. Zero servers. Zero daemons. No telemetry. The graph lives in a single file inside your workspace — you can delete it with one rm.

0 bytes sent to any server during indexing or graph queries
verified · view-source friendly

No code leaves

Indexing runs entirely inside VS Code. Nothing is uploaded. Alfred (LLM reports) is off by default and BYOK when on.

opt-in only

One DuckDB file

The whole graph — symbols, edges, quality signals — lives in .dextree/graph.duckdb. Diff it in git. Delete it to reset.

single artifact

No telemetry

Not anonymized, not aggregated — just none. We don't ship analytics SDKs. Crash reports go to your VS Code output channel.

zero pings

Works offline

First index, every navigation, every export — all local. Marketplace install needs the network once. After that, airplane mode is fine.

first install only
06

roadmap · what ships when

Four versions.
One honest ladder.

Each version unlocks a tier of capability. Each slice underneath is a discrete, mergeable PR that ships from a spec. No vapor. No "AI will figure it out." Just the next rung, then the one after that.

done shipped
v0.1
  • tree-sitter pass-1 indexing
  • schema-versioned DuckDB cache
  • workspace-scale indexing + auto-sync
  • Sigma.js graph view (PageRank-sized nodes)
  • Mermaid export · baseline
now building
v0.2
  • redesigned GraphView · the mockup as spec
  • lenses · god class · god function · most-used · least-used · dead code · entry points · architecture
  • trace route · shortest-path between any two symbols
  • framework + entry-point + layer tagging at index time
  • 15-language pass-1 · one generic tags engine · adding a language is data
  • tiered call resolution · heuristic + LSP-precise on select · 9 edge kinds
  • Mermaid v2 · scoped + classDiagram + sequenceDiagram + preview panel
next queued
v0.3
  • LSP enrichment · whole-graph pass-2 semantic resolution
  • diagnostics + git + test linkage overlays
  • ⚡ blast radius + framework route map
  • MCP server (read-only) · repo-map text snapshot
later queued
v0.4+
  • SCIP · Canvas · PNG · PDF · SVG exporters
  • MCP write tools + auto-config installer
  • Alfred · LLM report runner · BYOK · local models
  • vector search · Vite-embeddable component
  • multi-repo federation

The slice ladder.

Each rung = one PR-sized spec. Climb one at a time. The graph compiles knowledge as we ascend.

shipped climbing on deck queued
S1
v0.1
Monorepo + extension shell
pnpm workspaces · turbo · vitest · CI/CD · VS Code extension activation · webview host
infrastructure
S2
v0.1
Tree-sitter pass-1 + DuckDB storage
WASM grammars · symbol extractor · ExtractorRegistry · naive CALLS edges · idempotent inserts
parser + storage
S3
v0.1
Schema alignment + migrations
Annotation / Module / Test tables · migration runner · _schema_version registry · fan-in recompute
@dextree/core
S4
v0.1
Graph webview · Sigma.js
WebGL render · PageRank node sizing · hover neighborhoods · click-to-jump · edge legend
webview
S5
v0.1
Workspace indexing + cache + watcher
full-workspace index with progress · persistent cache across restarts · auto-sync FS watcher
@dextree/extension
S6
v0.1
Mermaid export · baseline
@dextree/exporters package · deterministic .mmd serializer · Light / Dark / Print themes
shipping now
S7
v0.2
Reach the mockup · GraphView v2
14 sub-slices to the final-state mockup · toolbar · lenses · search · depth · trace · workspace switcher · framework + entry + layer tagging · layout presets · Mermaid v2 (preview panel · classDiagram · sequenceDiagram · clickable export)
on deck
S8
v0.3
LSP enrichment · pass-2
whole-graph executeReferenceProvider · resolve call edges in-place · upgrade the pass-1 graph live (precise-on-select already ships in v0.2)
queued
S9
v0.3
Diagnostics + git + tests fusion
fold getDiagnostics · git recency + blame · TESTED_BY edges from jest / vitest / pytest into node properties
queued
S10
v0.3
⚡ Blast radius + framework route map
diff → impacted symbols → reverse traversal → risk score · ApiEndpoint nodes for Express · NestJS · FastAPI · Flask · Spring
queued
S11
v0.3
MCP server (read-only) + repo-map snapshot
expose graph as MCP tools · same query layer the webview uses · token-budgeted repo-map text for LLM context
queued
S12
v0.4
SCIP · Canvas · PNG / PDF / SVG exporters
SCIP first (interop with Sourcegraph + src CLI) · then share-anywhere artifacts · vector-first · narrative PDF
queued
S13
v0.5+
Alfred · LLM report runner
markdown prompt templates · BYOK · local model support · prompt library · opt-in / preview-first
queued
07

alfred · the opt-in LLM layer

Reports that read
the graph for you.

Alfred isn't a chatbot bolted onto a sidebar. It's a prompt runner that templates over graph queries — every report is just markdown + a SQL/PGQ context block. BYOK, local models welcome, opt-in, nothing leaves your machine by default.

Architecture lens
Architecture overview
High-fan-in nodes → narrative system tour.
Onboarding map
New-hire guide
Entry points + key modules → day-one map.
Risk report
PR risk report
Diff + blast radius → review-ready writeup.
Dead-code lens
Dead code report
Unreachable + uncalled → "safe to delete" list.
Impact narrative
Impact analysis
Pick a symbol → ripple effect explained.
Bring your own
Your prompt here
Drop a markdown file with a graph block. Done.
.dextree/prompts/architecture.md

          
08

the wall of honest

Things that are
broken right now.

Most pre-alpha tools hide their flaws. We put them on the homepage. If you can see the bugs, you know exactly what you're signing up for — and you can decide whether to wait or to help.

Dextree is pre-alpha v0.1. The indexer works, the webview renders, the workspace cache survives restarts, Mermaid export ships. Not on the VS Code Marketplace yet. The numbers below are pulled from the latest CI run + OpenSSF Scorecard. The gap list shifts as slices ship — we refresh it on every roadmap sweep.

test coverage 80.3% statements · core + exporters
threshold 70% · vitest v8
openssf scorecard 5.8/10 live report ↗
Token-Permissions fix queued · next scan Mon 07:00 UTC
openssf best practices OpenSSF Best Practices
slices merged 16/22 Phase 1 done · S7 Hello Mermaid landed
Phase 2 (mockup) next — roadmap ↗
known vulns 2 GHSA-67mh-4wv8-2f99
GHSA-4w7w-66w2-5vf9
critical
OpenSSF Code-Review check: 0/10

0 of 17 changesets had approving review before merge — solo committer, no CODEOWNERS file, no PR-review enforcement. Single largest item dragging the Scorecard from 6→8.

fix · v0.2
in flight
OpenSSF Token-Permissions: 0/10 → fix queued

All top-level write permissions narrowed to job-level with inline justification comments: auto-merge-dependabot, codeql, release, sbom. Remaining job-level writes (osv-scanner SARIF, pre-release draft) are documented as legitimate. Score updates on next scheduled scan.

queued · next scan
high
2 known dependency vulnerabilities

Scorecard flags GHSA-67mh-4wv8-2f99 and GHSA-4w7w-66w2-5vf9. Dependabot is on; tracked for the next batch update.

fix · v0.1.1
high
Exporters package coverage reporter is misleading

The exporters package's own files are at 100%, but vitest's coverage.include scans the whole monorepo, producing a misleading "2.42% statements" headline that fails the per-package --coverage threshold. Headline number is wrong; real coverage is fine.

fix · v0.1.1
high
Branch protection is incomplete

Scorecard 5/10 on Branch-Protection. CODEOWNERS file exists; the remaining gaps are GitHub Settings → Branches toggles: "Require review from Code Owners", "Include administrators", "Require approval of the most recent push", and raising the required-approvers count above 1. Out-of-band fix (UI, not code).

fix · v0.2
partial
Call resolution is tiered — heuristic now, LSP precise on select

Every CALLS edge carries a confidence tier. The always-on heuristic tier resolves by scope + name; clicking a node upgrades its callers/callees to compiler-grade precise edges via your installed language server. Whole-graph precise resolution (overloads, dynamic dispatch) is the remaining S8 work.

expand · v0.3
shipped
Multi-language pass-1 — 15 languages through one engine

A single generic engine reads tree-sitter tags.scm + per-language config — adding a language is data, not code. Ships for TypeScript, JavaScript, TSX, JSX, Python, Go, Java, Ruby, Rust, C, C++, C#, PHP, Elixir, and Scala.

done · v0.3
medium
No graph diff between commits

Would unlock "what changed structurally between v1 and v2." Planned for the git fusion slice (S10) + the blast radius slice (S11).

add · v0.3
medium
No fuzzing, no OpenSSF Best Practices badge, no SAST on every commit

Scorecard: Fuzzing 0/10, CII-Best-Practices 0/10, SAST 7/10 (CodeQL configured but only 0/29 commits scanned). All low-priority gaps the score reflects.

add · later
09

vs. the field

Where we win.
Where we don't.

Every code-graph tool makes trade-offs. Headless engines scale; editor-native tools fuse. Dextree picks editor-native, on purpose. Here's the honest matrix — including the rows where we lose.

capability dextree GitNexus codegraph CodeIndexer Code Pathfinder Aider RepoMap
runs inside VS Code native external CLI webview only CLI CLI / editor agent
graph storage DuckDB + DuckPGQ Neo4j Neo4j in-memory in-memory flat map
graph query language SQL/PGQ (ISO) Cypher Cypher none custom DSL none
LSP fusion (real types) precise-on-select · whole-graph v0.3 no no no no tree-sitter only
live diagnostics overlay planned (v0.3) no no no no no
git history fusion planned (v0.3) commit graph no no no no
⚡ blast radius / PR risk planned (v0.3) manual cypher manual no no no
dead code detection graph-native via query via query no built-in no
WebGL graph render Sigma.js D3 D3 DOM none none
MCP server for agents yes (v0.3) no no no no implicit (Aider)
exports (Mermaid/PDF/SVG/Canvas) all five (v0.3) PNG only PNG only no no no
opt-in LLM reports (BYOK) Alfred (v0.4) no no no no core feature
raw indexing speed (1M LOC) ~slower (pass 1 fast, pass 2 lazy) fast very fast untested fast fast
language coverage 15 languages 20+ languages 15+ JS/TS 10+ 20+
maturity pre-alpha stable stable alpha stable stable

Read the bottom rows. Dextree is slower at raw indexing, supports fewer languages, and is pre-alpha — those losses are real and intentional. The bet is that editor-native + LSP fusion + spec-driven build compounds over time in ways headless tools structurally can't.

built in the open

Star it. Watch it.
Break it with us.

Dextree ships in slices, in public, from specs. The fastest way to shape it is to use it, file the issue you wish you hadn't found, or send the PR you wish someone else had sent.

built by
MIT · pre-alpha · v0.1

— end of page —