Feature matrix
What DIXY does today — and what it doesn't yet.
Each item links to the code that proves it. Nothing on this site is claimed without a source.
Available
13Native JVMTI agent (monitor contention events)
AvailableC++ agent subscribes to MonitorContendedEnter / Entered and bridges events to Java.
JFR event streaming
AvailableStreams ThreadStart/End, JavaMonitorEnter/Wait, ThreadPark and VirtualThreadPinned.
Thread-state polling
AvailablePeriodic poller that complements JVMTI and JFR for live wait edges.
Wait-for graph + cycle detection
AvailableOwner/waiter registries feed a WaitForGraph; DFS detection returns DeadlockCycle objects.
Virtual-thread pinning detection
AvailableFilters cycles that contain a PINS edge. Covered by end-to-end tests.
Standalone -javaagent
AvailableAttach to any Java 21 app; pushes detected cycles to the backend.
dixy launcher + interactive shell
Available`dixy` opens the dixy> shell (Spring Shell) with tab completion and help.
dixy detect (live scan)
Available--pid, --jar, --json; exit codes 0 / 1 / 2.
REST API (web mode, port 8081)
AvailableDeadlocks, threads, locks, status, telemetry. X-API-Key required.
PostgreSQL persistence (Flyway) + Redis
AvailableThreads, locks, wait edges and deadlock reports are stored.
Prometheus metrics
Available/actuator/prometheus. The bundled scrape config needs its API key set by hand.
Docker Compose + Kubernetes manifests
AvailableFull stack via Compose; manifests under k8s/.
One-line installer (Linux/macOS, Windows)
AvailableDownloads release assets from DIXY-CLI into ~/.dixy.
In progress
2Grafana dashboards
In progressGrafana ships in Compose, but no data source or dashboard is provisioned.
Deadlock prediction
In progressOnly feature extraction exists; nothing consumes it yet.
Coming soon
2macOS and ARM native library
Coming soonBundled JVMTI library exists for Linux x86-64 and Windows x86-64 only.
Browser dashboard
Coming soonREADME: the project does not include a browser dashboard application.
| Command | Run in | Behavior | Status | Defined in |
|---|---|---|---|---|
dixy | terminal | Open the interactive dixy> shell. | Available | dixy.sh (opens source on GitHub) |
dixy detect --pid <pid> | terminal | Attach the agent to a running JVM and scan every second. | Available | DetectApplicationRunner.java (opens source on GitHub) |
dixy detect --jar <path> | terminal | Launch a jar with the agent attached and scan it. | Available | DetectApplicationRunner.java (opens source on GitHub) |
dixy detect --jar <path> --json | terminal | Same scan, machine-readable {"cycles":[...]} snapshots. | Available | DetectApplicationRunner.java (opens source on GitHub) |
dixy <app-directory> | terminal | Pick a runnable jar in the folder, start it with the agent, open the shell. | Available | dixy.sh (opens source on GitHub) |
dixy --version | terminal | Print the installed version. | Available | dixy.sh (opens source on GitHub) |
detect | dixy> shell | Continuously scan live telemetry (supports --pid, --jar, --json). | Available | DeadlockCommands.java (opens source on GitHub) |
status | dixy> shell | Diagnostic status: HEALTHY / WARNING / CRITICAL. | Available | DeadlockCommands.java (opens source on GitHub) |
deadlocks detect | dixy> shell | Run detection once on the current wait-for graph. | Available | DeadlockCommands.java (opens source on GitHub) |
deadlocks list | dixy> shell | List the latest stored deadlock reports. | Available | DeadlockCommands.java (opens source on GitHub) |
deadlocks clear | dixy> shell | Clear all stored DIXY telemetry data. | Available | DeadlockCommands.java (opens source on GitHub) |
threads list | dixy> shell | List registered threads. | Available | ThreadCommands.java (opens source on GitHub) |
threads get --thread-id <id> | dixy> shell | Get a thread by JVM thread id. | Available | ThreadCommands.java (opens source on GitHub) |
threads delete --id <id> | dixy> shell | Delete a thread by database id. | Available | ThreadCommands.java (opens source on GitHub) |
locks list | dixy> shell | List locks. | Available | LockCommands.java (opens source on GitHub) |
locks get --lock-id <id> | dixy> shell | Get a lock by its lock-id string. | Available | LockCommands.java (opens source on GitHub) |
locks delete --id <id> | dixy> shell | Delete a lock by database id. | Available | LockCommands.java (opens source on GitHub) |
events list | dixy> shell | Recent raw JVMTI events (LockOwned / LockReleased). | Available | EventCommands.java (opens source on GitHub) |
help | dixy> shell | List every command and its options. | Available | Spring Shell built-in |