CLI tool
elio-fm/elio avatar
elio-fm/elio

elio: a Rust terminal file manager with inline previews and image support

Snappy, batteries-included terminal file manager.

901 stars31 forksRustMIT

At a glance

What is it?
elio is a Rust terminal file manager that puts a places pane, a files pane and a preview pane side by side, renders images inline in terminals that speak the Kitty or Sixel protocols, and installs from crates.io or most Linux package managers. It works over SSH, can act as your desktop file chooser, and can leave your shell in the directory you were browsing.
Who is it for?
elio fits someone who works in a terminal on a remote host and wants a file browser with real previews, archive handling and trash semantics rather than a bare directory listing, and who is willing to install optional tools such as poppler and ffmpeg for richer previews. It does not fit a workflow that depends on desktop applications opening the file you selected, since over SSH those apps may open the file on the remote host or do nothing useful.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Three panes, and a grid view inside the file list

The interface is built from three columns: places, files and preview, side by side. The places pane holds pinned folders plus auto-detected drives and mounts, so a laptop with several volumes does not require repeated navigation to reach them. The files pane can be displayed as a grid or as a list, switched with the v key, and the grid can be zoomed with Ctrl++ and Ctrl+-. Navigation works with the keyboard and with the mouse. The project describes itself as a snappy, batteries-included terminal file manager, and the feature list reads like a desktop file manager's feature list translated into terminal keys: quick actions including go-to, open with and copy to clipboard, trash management with restore and permanent delete, a duplicate finder for files with identical contents, and archive management for extracting and creating common formats. The implementation is Rust, and the terminal interface is built on ratatui with crossterm, which is the usual pairing for a TUI of this kind.

Installing from crates.io is one command

Cargo is the shortest route if you already have a Rust toolchain, and the project also publishes packages for the major Linux distributions, Homebrew, FreeBSD and Nix:

bash
cargo install elio

The distribution routes are documented separately. Arch Linux goes through the AUR, Fedora through a COPR repository, and Debian and Ubuntu through an official apt repository with a shell installer that adds it. The apt repository publishes amd64 and arm64 packages, and if you would rather not add a repository at all, the project points at the .deb package on the latest release page. Homebrew and FreeBSD each have a single command, and Nix has two, one to run from main through a flake and one to add to a profile:

bash
nix profile add github:elio-fm/elio/main

Whichever route you take, elio starts in your current working directory, and passing a file or directory path opens that instead. The manifest sets the crate version to 1.14.0, the Rust edition to 2024, and a minimum Rust version of 1.98, which is a recent toolchain floor and worth checking before you build from source. The project also ships a rust-toolchain file at the root, a Nix flake, and packaging directories for the various repositories, so the packaging is part of the repository rather than a side project.

Inline images depend on which terminal you are in

Rendering a picture inside a terminal is a protocol negotiation problem, and elio publishes the matrix. The Kitty graphics protocol is used by Kitty, Ghostty and Rio, and the Kitty direct-placement protocol by Warp and Konsole. The iTerm2 Inline Protocol covers WezTerm and iTerm2, and Sixel covers foot and Windows Terminal. Every one of those is marked as auto-detected. Alacritty is listed as not supported, and the fallback row says other terminals can use the Kitty Graphics Protocol if you set the environment variable ELIO_IMAGE_PREVIEWS to 1. The distinction between direct placement and the general Kitty graphics protocol matters because direct placement lets the terminal position the image itself, which is what makes a preview behave like a preview rather than a chunk of scrollback. If your terminal is not in the table, the environment variable is the documented way to try anyway, and a Nerd Font is recommended so that the file type icons render correctly.

Previews lean on external tools for the hard formats

The preview coverage is broad, and the categories tell you what to expect. Text, source code, Markdown, logs and structured data such as JSON, YAML, TOML, CSV and TSV are covered, along with SQLite files. Documents include PDFs, ebooks, Office files, OpenDocument files and Apple Pages. Images, audio and video metadata are supported, with inline images, covers and thumbnails where the terminal allows. There are previews for folders, archives, comic archives, torrents and ISO images, plus fonts and binary files for metadata only. The implementation explains the coverage, since the dependency list is mostly a list of parsers: a Markdown renderer built on pulldown-cmark, syntect for syntax highlighting, rusqlite for SQLite, low-level readers for audio metadata, image decoding for the common raster formats, and a set of archive libraries covering tar, zip with AES crypto, sevenz-rust2 for 7z, xz2, bzip2 and zstd. Some of the richer previews need tools on the machine: poppler for PDFs, ffmpeg and ffprobe for media, resvg for SVG, and 7-Zip for extra archive types and RAR.

Shell integration that leaves you in the last directory

The feature that turns a file browser into a navigation tool is leaving your shell where you ended up. elio can install cd-on-exit wrappers for bash, zsh, fish, Nushell and PowerShell 7.4 or newer:

bash
elio shell install

You restart the shell, run elio as usual, and then press q to quit and move your shell into the directory elio was showing, or Q to quit without changing directories. The distinction between the two keys is what makes the feature safe to use casually, because the accidental quit does not move you. Uninstall steps, the list of supported shells and manual setup are all in the shell integration documentation, which matters if you have a shell the installer does not cover. The same idea shows up in the zoxide integration, which lets you jump to directories you visit often using your zoxide history, and in the fuzzy finder for locating a folder or file by partial name.

Acting as the desktop file chooser

On Linux and FreeBSD, elio can register itself as the file chooser for your desktop environment or window manager:

bash
elio portal enable

This uses the desktop portal mechanism rather than trying to talk to each desktop's private API, and the documentation points at a file chooser page for the setup details and the supported behaviour. There is a matching disable command to restore whatever was there before, and a status command to check the current configuration, which is the one to run first if you are unsure whether it is already enabled on your machine. The scope is deliberately narrow. The feature is listed for Linux and FreeBSD, and the description of using elio over SSH explains the limitation that matters in practice: opening files with terminal applications works normally inside an SSH session, but desktop applications may open files on the remote host or do nothing useful at all. That is a general property of remote sessions rather than a fault in elio, but it is the reason to think carefully before making elio the chooser for a workflow that ends in an editor on your laptop.

Configuration and themes are TOML files you can point elsewhere

elio reads configuration from a config.toml whose location follows the platform conventions: on Linux and BSD it is under .config/elio in the home directory or under XDG_CONFIG_HOME, on macOS it is the same path or under Library/Application Support, and on Windows it is under the APPDATA directory. Themes live in a theme.toml with the same layout. Both can be redirected from the command line, which is the detail that makes them usable in scripts and in tests:

bash
elio --config FILE

The same applies to themes, through a --theme option. The theme file is described as overriding elio's defaults, so you only set what you want to change, and the feature list says the theming covers the full palette and file-class control, which is the part that matters for a file manager where the colour of an entry carries information about the type of the entry. An annotated example configuration is kept at examples/config.toml in the repository, and the example themes directory is referenced for the shipped ones. The repository also keeps a CHANGELOG, a SECURITY file and a CODE_OF_CONDUCT, and the MIT licence file sits at the root as LICENSE-MIT, matching the MIT licence declared in the manifest.

Trash, duplicates and archives are the desktop features you actually miss

Three of the listed capabilities are what separate this from a directory listing with a preview column. Trash management covers trashing, restoring and permanently deleting, and the dependency list shows a dedicated trash crate doing that work rather than a hand-rolled move to a dot-directory, so the semantics match what a desktop environment expects. The duplicate finder looks for files with identical contents, and the manifest includes blake3, a fast hash, which is how a content comparison at scale is done rather than by comparing sizes and timestamps. Archive management is the third, and it is the widest part of the dependency list, with readers and writers for tar, zip including AES encryption, 7z, xz, bzip2 and zstd, plus the compound file format library for legacy Office documents. The Kitty drag and drop feature, listed for Kitty 0.47 and newer, works in the opposite direction too, so files can be dragged out of elio into a terminal window, which is a small thing that makes the tool feel native to a graphical terminal.

Editorial conclusion

elio fits someone who works in a terminal on a remote host and wants a file browser with real previews, archive handling and trash semantics rather than a bare directory listing, and who is willing to install optional tools such as poppler and ffmpeg for richer previews. It does not fit a workflow that depends on desktop applications opening the file you selected, since over SSH those apps may open the file on the remote host or do nothing useful. Before adopting it, check your terminal against the image preview table, because Alacritty is listed as not supported, and install the optional preview tools on the remote host if you plan to use it over SSH.

Frequently asked questions

How do I install elio on my system?

Run cargo install elio for the crates.io build, or use the package route for your platform: an AUR helper on Arch Linux, dnf after enabling the COPR repository on Fedora, the apt repository on Debian and Ubuntu, brew install elio on macOS, pkg install elio on FreeBSD, or a Nix flake. The project also publishes a .deb package on its latest release page.

Does elio show images inline in my terminal?

It does in terminals that support it. The compatibility table lists the Kitty graphics protocol for Kitty, Ghostty and Rio, the Kitty direct-placement protocol for Warp and Konsole, the iTerm2 Inline Protocol for WezTerm and iTerm2, and Sixel for foot and Windows Terminal, all auto-detected. Alacritty is listed as not supported.

How do I make elio leave my shell in the directory I was browsing?

Run elio shell install, then restart your shell. Press q to quit and move your shell to elio's final directory, or Q to quit without changing directories. Wrappers are available for bash, zsh, fish, Nushell and PowerShell 7.4 or newer.

What extra tools does elio need for previews?

elio works out of the box, and optional tools give richer previews: poppler for PDFs, ffmpeg and ffprobe for media metadata and thumbnails, resvg for SVG, and 7-Zip for more archive types, comic archives and RAR support.

Official sources

  1. elio-fm/elio on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/elio-fm-elio.svg)](https://hysenlabs.com/projects/elio-fm-elio)

Was this useful?