Skip to content

hlship/dexter

Repository files navigation

Dexter — Dependency Explorer

Dexter is an interactive, browser-based tool for visualizing and exploring the artifact dependency graph of JVM projects.

Even trivial projects accumulate dozens—sometimes hundreds—of transitive dependencies, making it impossible to produce a meaningful static graph or to easily diagnose version conflicts buried deep in the tree. Dexter addresses this by letting you navigate the dependency hierarchy interactively: select any artifact to see what depends on it (dependants) and what it depends on (dependencies), with version mismatches highlighted at a glance.

Overview

Mousing over a dependency arrow expands it and, for non-exact matches, displays the requested version.

Features

  • Three-column explorer — select an artifact to see its dependants (left), the artifact itself (center), and its dependencies (right)
  • Multiple tabs — open independent views into different parts of the dependency tree; each tab has its own navigation history
  • Version mismatch detection — arrows and box borders are color-coded by compatibility: black (exact match), green (compatible), red (incompatible), yellow (unknown/git SHA)
  • Properties panel — always-visible sidebar showing artifact details, Maven metadata, and dependency/dependant breakdowns by version compatibility
  • Keyboard navigation⌘F/Ctrl+F to search, ⌘H/Ctrl+H home, ⌘B/Ctrl+B back, ⌘1/⌘2/⌘3 to browse compatible/incompatible/unknown dependencies
  • Animated transitions — boxes animate smoothly when navigating; arrows fade out and redraw
  • Dynamic layout — columns resize automatically to fill the viewport
  • Windowed columns — large dependency lists are windowed with scroll indicators so the display stays readable

Supported Build Tools

Build Tool Status
tools.deps (deps.edn) ✅ Supported
Leiningen (project.clj) ✅ Supported
Maven (pom.xml) ✅ Supported
Gradle (build.gradle) 🔜 Planned

Installation

Homebrew (OS X)

Install with brew install hlship/brew/dexter.

Windows (Scoop)

Install with Scoop:

scoop bucket add java
scoop install java/temurin-lts-jdk
scoop bucket add hlship https://github.com/hlship/scoop-bucket
scoop install dexter

Linux

Download Dexter from GitHub Releases and unpack the distribution, which includes launcher scripts (dexter for macOS/Linux, dexter.cmd for Windows) and the JAR file containing the code.

Copy the files to a directory on your PATH. On macOS/Linux you can alternatively create a symlink for the dexter script (it will follow symlinks to find the JAR).

Usage

The dexter command auto-detects the project type, resolves the full transitive dependency graph, starts a local web server, and opens a browser.

Options

  -p, --port NUMBER   Port for the web server (default: random free port)
  -f, --file PATH     Path to a dependency file (default: current directory)
  -a, --alias NAME    Add a build alias/profile (repeatable)
  --no-open           Don't automatically open a browser

Examples

# Explore the current project
dexter

# Explore a specific project with dev dependencies included
dexter -f /path/to/project -a dev

# Leiningen project with dev and test profiles
dexter -f /path/to/project.clj -a dev -a test

# Maven project with a specific profile
dexter -f /path/to/pom.xml -a development

# Use a specific port, don't open browser
dexter -p 8080 -O

Understanding the Display

Columns

Left Center Right
Dependants — artifacts that depend on the selected artifact Selected — the artifact being examined Dependencies — artifacts the selected artifact depends on

Click any artifact to make it the new selection. The display animates to show its dependants and dependencies.

Properties Panel

The properties panel is always visible on the right side of the display, showing detailed information about the selected artifact: Maven coordinates, version, JAR size, description, licenses, and links. It also breaks down the artifact's dependencies and dependants by version-match category.

The exact information displayed will vary depending on what information is available in the Maven POM file for the dependency (if it even exists).

Search

Tabs

Dexter supports multiple tabs, each providing an independent view into the dependency tree.

Tabs

  • The ROOT tab is always present and cannot be closed; it shows the full project dependency tree
  • Use the button in the property panel to open a new tab rooted in that dependency
  • Each tab maintains its own navigation history — the Home and Back buttons apply to the current tab
  • Tabs that are no longer needed can be closed with the × button; closing a tab switches to the most recently viewed tab
  • When many tabs are open, they scroll horizontally (but the root tab stays pinned to the left side)

Arrow Colors

Arrows represent dependency relationships. Their color indicates whether the version requested by the parent matches the version actually resolved:

Color Meaning
Black Exact match — requested version equals resolved version
Green Compatible — same major version (or same major.minor for 0.x)
Red Incompatible — different major version
Yellow Unparseable version, or a Git coordinate, or a local root

Hover over any arrow to highlight it and see the requested version.

Box Annotations

The right border of each dependency provides information on that artifact's dependencies:

  • Wide colored right border — the artifact has a dependency with a version mismatch (color reflects the worst mismatch)
  • Wide grey right border — the artifact is a leaf node (no further dependencies)

Dependency Status Popups

The footer bar displays summary counts of compatible, incompatible, and unknown dependency relationships. Click any count (or use ⌘1/⌘2/⌘3) to open a popup listing all artifacts in that category:

Deps

  • Filter — type to narrow the list (appears when there are more than eight items)
  • Navigate — click an artifact or press Enter to navigate to it
  • Keyboard/ arrow keys and Tab cycle through the list; Home/End jump to the first/last item; Escape closes the popup

An artifact may appear in more than one category if different dependants request it with different version compatibility outcomes.

Development

Prerequisites

Running in Development

# Terminal 1: Tailwind CSS watcher
bb tailwind

# Terminal 2: Clojure REPL
clojure -M:dev

From the REPL:

;; Load a deps.edn project
(require '[net.lewisship.dex.deps-reader :as deps-reader])
(require '[net.lewisship.dex.deps :as deps])
(def db (-> (deps-reader/read-deps "deps.edn" {:aliases [:dev :test]})
            deps/build-db))

;; Start the server
(require '[net.lewisship.dex.service :as service])
(service/start! {:db db})

;; Stop
(service/stop!)

Tests

bb test

License

Copyright © Howard Lewis Ship

Distributed under the Apache Software License 2.0.

About

Dexter - Graphical Dependency Explorer

Topics

Resources

License

Stars

Watchers

Forks

Contributors