A CLI that visualizes a project's dependency tree straight from its lockfile.

Supported lockfiles

  • mix.lock (Elixir/Hex)
  • Cargo.lock (Rust/Cargo)
  • poetry.lock (Python/Poetry)
  • uv.lock (Python/uv)

Install

Download a prebuilt standalone binary (no Erlang/Elixir required) from the latest release for macOS (Intel/Apple Silicon), Linux, or Windows.

Build from source

mix escript.build

This produces a clairvoyant executable in the project root. Requires Erlang/Elixir to be installed on the machine running it.

Usage

clairvoyant <lockfile> [options]

Options:

  • --depth N — limit tree depth
  • --only PACKAGE — show only the subtree rooted at PACKAGE
  • --reverse PACKAGE — show what depends on PACKAGE (walks ancestors)
  • --help, -h — show usage

Examples:

clairvoyant mix.lock
clairvoyant Cargo.lock --depth 2
clairvoyant poetry.lock --only requests
clairvoyant mix.lock --reverse jason

Development

mix deps.get
mix test

Releasing standalone binaries

Pushing a tag matching v*.*.* triggers .github/workflows/release.yml, which uses Burrito to build self-contained binaries (bundled Erlang runtime, no local install needed) for macOS (Intel + Apple Silicon), Linux, and Windows, and attaches them to a GitHub Release:

git tag v0.1.0
git push origin v0.1.0

To build these locally, you need zig (0.16.x), xz, and 7z on your PATH, then run MIX_ENV=prod mix release. Binaries land in burrito_out/.