Tools

eza: a modern ls with git status, icons and tree view

TL;DR

eza is a community-maintained modern ls (a fork of exa): colours by file type, a git status column, tree view with -T and icons with a Nerd Font. Use it via aliases for interactive shells, not in scripts.

ls dates from the black-and-white terminal era: limited colours, hard-to-read sizes if you forget -h, no idea which files changed in git, and you need a separate tree to see a directory tree. eza is a modern replacement for ls: colours by file type, icons, a git status column, tree view, and readable defaults. eza is the community-maintained fork of exa, whose original project is no longer developed.

GitHub page of eza-community/eza
GitHub page of eza-community/eza (screenshot, November 2026)

GitHub: https://github.com/eza-community/eza · about 24k stars · Rust · EUPL-1.2

Installation

brew install eza           # macOS
cargo install eza          # with Rust
# Ubuntu/Debian: add eza's apt repository as described in INSTALL.md, then
sudo apt install -y eza
# Windows: a winget package exists, see INSTALL.md

Icons need a Nerd Font in your terminal.

Common commands

eza                                  # list with colours
eza -la                              # long view, including hidden files
eza -l --git                         # add a git status column
eza -l --icons --group-directories-first
eza -T -L 2                          # tree, 2 levels deep
eza -T -L 3 --git-ignore             # tree, skipping .gitignored files
eza -l -s modified -r                # sort by modification time, newest first
eza -l --header --total-size         # column headers, total directory sizes

Key options

OptionEffect
-l, -aLong table view; include hidden files
-T, -L NTree view; limit depth
--gitGit status column per file (new, modified, staged…)
--git-ignoreHide files excluded by .gitignore
--iconsFile-type icons (needs a Nerd Font)
-s + name/size/modified/extensionSort by field; add -r to reverse
-D / -fDirectories only / files only

Replacing ls with aliases

# ~/.zshrc
alias ls='eza --group-directories-first'
alias ll='eza -l --git --icons --group-directories-first'
alias la='eza -la --git --icons'
alias lt='eza -T -L 2 --git-ignore --icons'

You keep typing ls but get nicer output. Scripts still call the real ls because aliases only apply in interactive shells.

Caveats

  • eza isn't 100% flag-compatible with ls (some sorting flags differ); don't use eza in scripts written for ls.
  • The git column can be slow in very large repos; only enable --git in the detailed alias.
  • The EUPL-1.2 licence differs from MIT; it doesn't matter for personal use, but check it if you repackage and redistribute.

How to apply it

  • Dev: Use lt to grasp an unfamiliar project's structure quickly, and ll to see which files changed but aren't committed.
  • Tech Lead: When writing architecture docs, eza -T -L 2 --git-ignore produces a clean tree to paste into the README.
  • PM: One of many small tools that make the terminal friendlier for newcomers and shorten ramp-up time.

Sources & references

  1. eza-community/eza — eza-community (GitHub)