Hyperspekt
A live, interactive graph that exposes your codebase's architecture. Computed metrics on its topology let you see impact, blast radius, and architectural gaps at a glance.
Built by Ansicht.
Supported Languages
| Language |
File Types |
Tree-sitter Grammar |
LSP Enrichment |
| Move (Sui) |
.move |
Yes |
move-analyzer |
| Rust |
.rs |
Yes |
— |
| TypeScript |
.ts, .tsx |
Yes |
— |
| JavaScript |
.js, .jsx |
Yes |
— |
| Go |
.go |
Yes |
— |
| Solidity |
.sol |
Yes |
— |
Languages are auto-detected from workspace files. Multiple languages can coexist in a single workspace (polyglot support).
Features
Graph Visualization
- Live force-directed dependency graph rendered in a webview panel with Barnes-Hut repulsion, edge attraction, community gravity, and simulated-annealing cooling
- Minimap overview panel for navigating large graphs (toggle with
M)
- Fit-to-screen button to auto-zoom the graph to fit the viewport
- Alt+drag rectangle zoom for zooming into a specific region
- Community and module layout modes with position persistence across sessions (cycle with
Ctrl+L)
- Incremental updates on file save — debounced, content-hashed, with stable definition IDs so the graph does not flicker
Parsing & Resolution
- Tree-sitter parsing of the full definition hierarchy: modules, functions, structs, enums, constants, traits, classes, type aliases, struct fields, and enum variants
- Five-strategy reference resolution applied in order: fully-qualified, alias-resolved, module-qualified, same-module, and name-only (with ambiguity guard)
- Chained field access resolution via
fieldChain on ReferenceIR — resolves a.b.c access patterns across type boundaries
- Resolution rate diagnostics showing internal/external resolution percentages
Architecture Metrics
Three metrics computed on every graph update, displayed in the status bar as [Qdep] X.XX [Qta] X.XX [C] X.XX, color-coded by health:
| Metric |
Measures |
Range |
Healthy |
| Modularity (Q_dep) |
Louvain community detection with provider/consumer edge weighting |
-1 to 1 |
>= 0.5 |
| Circularity (C) |
Johnson's cycle enumeration on strongly connected components |
0 to 1 |
<= 0.1 |
| Type Authority (Q_ta) |
Internal field-access cohesion minus cross-module API coupling |
-1 to 1 |
>= 0.3 |
Git Integration
- Per-definition change detection against HEAD: added, modified, deleted, unchanged
- Ghost nodes for definitions removed from modified files, with stable IDs and
deleted status
- Edge git status propagation from endpoints (deleted > added > modified > unchanged)
Navigation
- Ctrl+Click a node to jump to its source definition
- Ctrl+Shift+Click a node to open a HEAD-vs-working-tree diff
- Ctrl+Click an edge to open the reference site in source
- Shift+E to trace symbol exposure (what does this symbol expose?)
- Shift+U to trace symbol usage (what uses this symbol?)
- P to find the shortest path between two nodes
File-to-Graph Interop
- Focus Current Symbol (
Ctrl+Shift+G) — highlight the definition at the cursor in the graph
- Inspect File (
Ctrl+Shift+I) — filter the graph to show only definitions from the current file
- Available from both the editor context menu and explorer context menu
Getting Started
Prerequisites
- VS Code 1.85 or later
- A workspace containing supported source files (
.move, .rs, .ts, .tsx, .js, .jsx, .go, .sol)
Install
Build from source (see Development) or install the packaged .vsix.
Activate
- Open a workspace with supported source files. The extension activates automatically when a supported file is opened.
- Click the Hyperspekt icon in the activity bar, or run Hyperspekt: Show Dependency Graph from the Command Palette (
Ctrl+Shift+P).
Commands
| Command |
ID |
Key |
Description |
| Show Dependency Graph |
hyperspekt.show |
— |
Open the graph panel and run the full pipeline |
| Focus Current Symbol |
hyperspekt.focusNode |
Ctrl+Shift+G |
Highlight the definition at the cursor in the graph |
| Inspect File in Graph |
hyperspekt.inspectFile |
Ctrl+Shift+I |
Filter graph to the current file's definitions |
| Show All Files |
hyperspekt.clearFileFilter |
Escape |
Clear the file filter and show all definitions |
| Show Diagnostics |
hyperspekt.showDiagnostics |
Ctrl+G D |
Log node/edge counts and resolution stats |
| Refresh Graph |
hyperspekt.refresh |
Ctrl+G R |
Trigger a full pipeline re-run |
| Cycle Layout |
hyperspekt.cycleLayout |
Ctrl+G L |
Switch between Community and Module layout |
| Find Path |
hyperspekt.findPath |
Ctrl+G / |
Find shortest path between two nodes |
| Toggle Kind Filter |
hyperspekt.toggleKind |
Ctrl+K F/S/E/C/T/L/A |
Toggle visibility of functions/structs/enums/constants/traits/classes/type aliases |
Webview Controls
A floating control bar at the bottom center provides quick access to filters and layout. Active toggles are highlighted in green.
| Control |
Key |
Description |
| Functions |
Ctrl+K F |
Show/hide functions |
| Structs |
Ctrl+K S |
Show/hide structs |
| Enums |
Ctrl+K E |
Show/hide enums |
| Constants |
Ctrl+K C |
Show/hide constants (off by default) |
| Traits |
Ctrl+K T |
Show/hide traits |
| Classes |
Ctrl+K L |
Show/hide classes |
| Type Aliases |
Ctrl+K A |
Show/hide type aliases |
| Layout |
Ctrl+G L |
Cycle layout algorithm |
| Refresh |
Ctrl+G R |
Full pipeline re-run |
| Minimap |
Ctrl+G M |
Toggle minimap overlay |
Tooltips: Hover over a node to see its kind, canonical path, git status, and provider/consumer scores. Hover over an edge to see its kind, source text, and weight. Hold Alt to suppress tooltips.
Configuration
| Setting |
Type |
Default |
Description |
hyperspekt.debounceMs |
number |
300 |
Delay in ms before re-parsing a changed file. Lower values give faster feedback but use more CPU. |
hyperspekt.showMinimap |
boolean |
false |
Show the minimap overview panel in the graph view. |
Architecture
src/
providers/
move/ Move (Sui) language provider + LSP client
rust/ Rust language provider
typescript/ TypeScript/JavaScript language provider
go/ Go language provider
solidity/ Solidity language provider
shared/ Shared provider utilities
AbstractLanguageProvider.ts
CompositeLanguageProvider.ts
analysis/ Tree-sitter parsing, IR builder, IR resolver, reference resolution
git/ Git change detection, ghost node synthesis, HEAD baseline
graph/
metrics/ Modularity, circularity, type authority computations
differ.ts Graph diffing for incremental updates
incremental.ts File-save watcher, debounced re-parse, delta emission
state.ts Core graph state (nodes, edges, full rebuild)
types/ Shared type definitions (DefId, NodeData, EdgeData, etc.)
util/ Logging, ID allocation, tracing
webview/ Panel manager, webview HTML/resource serving
extension.ts Activation, command registration, pipeline orchestration
webview/
graph/
forceLayout.ts Custom force-directed layout (Barnes-Hut, cooling schedule)
renderer.ts Cytoscape graph rendering, interaction handlers
ui/
toolbar.ts Control bar state and types
tooltip.ts Hover tooltips with viewport clamping
main.ts Webview entry point, VS Code API message bridge
Development
npm install
npm run build # esbuild bundle
npm test # vitest
npx tsc --noEmit # type-check without emitting
npm run watch # rebuild on file changes
To package as a .vsix:
npm run package
License
See the bundled LICENSE.txt, or our license terms for the full EULA.
| |