A blazing fast layer inspector for OCI-compliant images!
Xray helps developers understand and optimize container images by visualizing layers and their contents using a minimalistic but powerful UI with performance in mind.

xray values your CPU cycles.This is essentially a beta release at this point, so don't hesitate to open an issue if you find any bugs while using it π
β οΈ Requires the nightly compiler
# If Rust nightly wasn't installed before
$ rustup toolchain install nightly
$ cargo +nightly install --locked xray-tui
paru -Sy xray-oci-git
Everyone who had to work with container images before knows about the dive tool. It's a great tool, but it doesn't work that well for bigger images, especially the ones that are 5 GB or more in size.
Xray fixes this problem by carefully managing available resources and applying a set of small but important optimizations. All these things make Xray far more responsive when used with large images, while still providing the core functionality and being easy to use.
$ xray --help
Usage: xray [OPTIONS] <IMAGE>
Arguments:
<IMAGE>
Options:
-p, --config-path <CONFIG_PATH>
Override the config directory location.
Default: $XDG_CONFIG_HOME/xray or $HOME/.config/xray
-d, --docker
Force image resolution using Docker
-f, --fs
Force image resolution using a tarred image
--podman
Force image resolution using Podman
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
To inspect an image use:
xray <IMAGE>[:tag]
xray will try to resolve the provided image using the default resolution order:
π‘ Please refer to
xray --helpif you want to force a specific image resolver.
π‘ You can always use the help popup available by pressing
/to get the contextualized help for the currently active pane.
| Key Sequence | Action |
|---|---|
1 | select the "Image Information" pane |
2 | select the "Layer Information" pane |
3 | select the "Layers" pane |
4 | select the "Layer Changes" pane |
Left, h | scroll the current entry left (if supported by pane) |
Down, j | select the next entry in the current pane |
Up, k | select the previous entry in the current pane |
Right, l | scroll the current entry right (if supported by pane) |
Tab | cycle through the panes: next pane |
Shift-Tab | cycle through the panes: previous pane |
q | exit the app |
| Key Sequence | Action |
|---|---|
Enter, Space | toggle the selected directory (inside the "Layer Changes" pane) |
Ctrl-f | open the filter popup (inside the "Layer Changes" pane) |
y | copy the currently selected value to the clipboard (if supported by pane) |
/ | open/close the help popup |
c | toggle "show only changed files" filter (inside the "Layer Changes" pane) |
All keybindings mentioned above are fully customizable.
When run for the first time, xray creates a file named $CONFIG_DIR/keybinds.toml, which contains all default keybindings and their description.
π‘Default
$CONFIG_DIRis$XDG_CONFIG_HOME/xrayor$HOME/.config/xray.
Runtime state such as xray.log is stored in $XDG_STATE_HOME/xray or $HOME/.local/state/xray.
You can then update the default keybindings to your liking -- xray will start using your new bindings automatically after a restart!
For example, if you want to open the filter popup on ALT+p, then you can change toggle_filter_popup to look like:
# Toggle the filtering popup.
toggle_filter_popup = ["Alt+p"]
Please refer to crossterm-keybind documentation if you are unsure how to map a specific key sequence.
This section contains additional good-to-have things that I plan to add besides fixing everything in the Limitations section.
Xray is distributed under the GNU General Public License version 3. See COPYING for full details.
Rust
99.3%
A blazing fast layer inspector for OCI-compliant images!
Xray helps developers understand and optimize container images by visualizing layers and their contents using a minimalistic but powerful UI with performance in mind.

xray values your CPU cycles.This is essentially a beta release at this point, so don't hesitate to open an issue if you find any bugs while using it π
β οΈ Requires the nightly compiler
# If Rust nightly wasn't installed before
$ rustup toolchain install nightly
$ cargo +nightly install --locked xray-tui
paru -Sy xray-oci-git
Everyone who had to work with container images before knows about the dive tool. It's a great tool, but it doesn't work that well for bigger images, especially the ones that are 5 GB or more in size.
Xray fixes this problem by carefully managing available resources and applying a set of small but important optimizations. All these things make Xray far more responsive when used with large images, while still providing the core functionality and being easy to use.
$ xray --help
Usage: xray [OPTIONS] <IMAGE>
Arguments:
<IMAGE>
Options:
-p, --config-path <CONFIG_PATH>
Override the config directory location.
Default: $XDG_CONFIG_HOME/xray or $HOME/.config/xray
-d, --docker
Force image resolution using Docker
-f, --fs
Force image resolution using a tarred image
--podman
Force image resolution using Podman
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
To inspect an image use:
xray <IMAGE>[:tag]
xray will try to resolve the provided image using the default resolution order:
π‘ Please refer to
xray --helpif you want to force a specific image resolver.
π‘ You can always use the help popup available by pressing
/to get the contextualized help for the currently active pane.
| Key Sequence | Action |
|---|---|
1 | select the "Image Information" pane |
2 | select the "Layer Information" pane |
3 | select the "Layers" pane |
4 | select the "Layer Changes" pane |
Left, h | scroll the current entry left (if supported by pane) |
Down, j | select the next entry in the current pane |
Up, k | select the previous entry in the current pane |
Right, l | scroll the current entry right (if supported by pane) |
Tab | cycle through the panes: next pane |
Shift-Tab | cycle through the panes: previous pane |
q | exit the app |
| Key Sequence | Action |
|---|---|
Enter, Space | toggle the selected directory (inside the "Layer Changes" pane) |
Ctrl-f | open the filter popup (inside the "Layer Changes" pane) |
y | copy the currently selected value to the clipboard (if supported by pane) |
/ | open/close the help popup |
c | toggle "show only changed files" filter (inside the "Layer Changes" pane) |
All keybindings mentioned above are fully customizable.
When run for the first time, xray creates a file named $CONFIG_DIR/keybinds.toml, which contains all default keybindings and their description.
π‘Default
$CONFIG_DIRis$XDG_CONFIG_HOME/xrayor$HOME/.config/xray.
Runtime state such as xray.log is stored in $XDG_STATE_HOME/xray or $HOME/.local/state/xray.
You can then update the default keybindings to your liking -- xray will start using your new bindings automatically after a restart!
For example, if you want to open the filter popup on ALT+p, then you can change toggle_filter_popup to look like:
# Toggle the filtering popup.
toggle_filter_popup = ["Alt+p"]
Please refer to crossterm-keybind documentation if you are unsure how to map a specific key sequence.
This section contains additional good-to-have things that I plan to add besides fixing everything in the Limitations section.
Xray is distributed under the GNU General Public License version 3. See COPYING for full details.
Rust
99.3%