Managing dependencies in a large Maven project usually means staring at walls of text: mvn dependency:tree dumps hundreds of lines, update checks produce tables you have to squint at, and any POM edit risks reformatting the entire file. Pilot is a new Maven plugin that replaces all of that with interactive, keyboard-driven terminal UIs.
Today we released Pilot 0.1.0.
How it started
Pilot grew out of work on the Maven Dependency Plugin. Bruno Borges opened PR #1599 adding dependency:add, dependency:remove, and dependency:search goals – bringing Maven closer to the npm install / cargo add experience other ecosystems take for granted. I followed up with PR #1600, rewriting the implementation on top of DomTrip for lossless POM editing. The dependency:search goal included a simple interactive UI for browsing Maven Central results, and that prototype made one thing clear: dependency management in the terminal doesn’t have to be a wall of text.
That realization led to Pilot: a full rewrite as a dedicated plugin, built on TamboUI for proper terminal UIs, and expanded from search to cover the entire dependency workflow – trees, updates, conflicts, audits, and POM editing.
Pilot was entirely vibecoded – built from idea to release using AI agents, following the workflow described in From Coder to Coach.
What Pilot does
Pilot provides nine goals, each launching a focused TUI for a specific task. You can run them individually or use the pilot:pilot launcher to pick a tool interactively.
Search Maven Central (pilot:search)
Search Maven Central with live, async results. Arrow keys cycle through versions; enter shows POM metadata, licensing, and coordinates ready to copy.
Dependency tree (pilot:tree)
An expand/collapse tree view with conflict highlighting, scope filtering (compile, runtime, test), and reverse path lookup – find why a transitive dependency is pulled in.
POM viewer (pilot:pom)
View both the raw and effective POM with syntax highlighting. The effective mode shows origin annotations: where each inherited value comes from in the parent chain.
Declared vs. used dependencies (pilot:dependencies)
Uses ASM bytecode analysis to determine which declared dependencies are actually referenced in your code – down to individual method calls and field accesses. Includes SPI/ServiceLoader detection. One keypress to fix your POM.
Update checker (pilot:updates)
Color-coded update reports: green for patches, yellow for minor versions, red for major. Select updates in batch and apply them directly to your POM.
Conflict detection (pilot:conflicts)
Groups dependencies by groupId:artifactId and surfaces version conflicts across the dependency graph. Pin a version to dependencyManagement with a single keypress.
Security and license audit (pilot:audit)
Shows licenses for all transitive dependencies and queries OSV.dev for known CVEs. One screen to answer “are we shipping anything vulnerable or incompatibly licensed?”
Convention alignment (pilot:align)
Detects how your project manages dependency versions (properties, BOMs, direct versions) and lets you choose a target convention. Reactor-aware: align all modules in a single batch.
Multi-module support
Pilot detects Maven reactor builds automatically and presents an interactive module picker mirroring the project hierarchy. Some tools (updates, conflicts, audit) analyze the entire reactor; others (tree, dependencies, pom) work per-module. Selecting a parent module scopes the operation to its children.
Lossless POM editing
Every POM modification in Pilot goes through DomTrip, a lossless XML editing library. Your formatting, comments, whitespace, and element ordering are preserved exactly. Diffs stay clean and reviewable – no phantom reformatting noise in your commits.
Built on TamboUI
The terminal UIs are powered by TamboUI, a Java TUI framework inspired by Rust’s ratatui. It provides responsive layouts, CSS-based styling, and keyboard-driven navigation – no mouse required. Context-sensitive help is available on every screen with h.
Getting started
Requirements: Maven 3.6.3+, Java 17+, and an ANSI-capable terminal.
Run the interactive launcher on any Maven project:
mvn eu.maveniverse.maven.plugins:pilot:pilot
To use the short pilot: prefix, add the plugin group to ~/.m2/settings.xml:
<settings>
<pluginGroups>
<pluginGroup>eu.maveniverse.maven.plugins</pluginGroup>
</pluginGroups>
</settings>
Then:
mvn pilot:pilot # interactive launcher
mvn pilot:tree # jump straight to the dependency tree
mvn pilot:updates # check for updates
mvn compile pilot:dependencies # bytecode analysis (needs compiled classes)
Feedback welcome
This is the very first release of Pilot. There are rough edges, missing features, and things that could work differently. If you try it out, please open an issue on GitHub – bug reports, feature requests, and general impressions are all valuable at this stage.
Links
- GitHub: maveniverse/pilot
- Release: 0.1.0
- DomTrip: maveniverse/domtrip – lossless XML editing
- TamboUI: tamboui.dev – Java TUI framework