Modern Replacements for ls
Replace ls with eza, lsd, or exa for colors, Git status, tree view and richer long listings. Also covers broot, an interactive tree navigator.
Updated
short verdict
Pick eza if you want a maintained ls replacement with Git status, tree view and YAML-configurable colors. Pick lsd if you want icons and documented ls-style aliases, and have a patched font. Use broot when you want to browse and act on a directory tree interactively rather than print a listing.
ls prints names with few defaults for color, Git state or metadata. The tools here add color-coded file types, long views with more columns, and tree output. eza, exa and lsd are direct listing commands you can alias over ls. exa is no longer maintained and points to eza as its fork. broot is a different kind of tool: an interactive tree browser with fuzzy search and file operations.
this page is for
- Developers who want Git status next to file listings
- Users who want to alias ls to a colored, icon-aware listing
- Anyone who runs ls and tree together and wants one interactive view
A Rust listing command with grid, tree and long views, Git status and extended attributes, and the one to pick for a maintained ls replacement.
best for
- Default ls replacement with Git status
- Users moving over from exa
strengths
- Shows Git status indicators in the listing, plus SELinux contexts and mount point details
- Sorts by size, date or extension, with directory-first grouping and glob-based exclusion
- Colors are configurable through YAML theme files; relative dates and binary size prefixes are supported
- Supports terminal hyperlinks and icon display, and recursive listing with depth limiting
weaknesses
- Icon display depends on a terminal font that includes the glyphs
- Compatibility is described as covering most ls workflows, not all, so some ls flags may behave differently
A Rust rewrite of GNU ls with icons, tree view and YAML config files, with documented aliases for ls, tree and ls -la.
best for
- Users who want file type icons in listings
- Users who want a ready-made alias set
strengths
- Documents aliases: alias ls='lsd', alias lt='lsd --tree' and alias lla='lsd -la'
- Configured through config.yaml, colors.yaml and icons.yaml in the XDG config directory
- Icons can be overridden by name, by extension or by filetype (directories, executables, symlinks)
- Available through Homebrew, Cargo and APT
weaknesses
- Icons need a patched font such as Nerd Font or Font Awesome, or they render wrongly
- Git status columns are not documented, unlike in eza and exa
The original ls replacement that eza forked from; it still installs from Homebrew, APT and Cargo, but the project is no longer maintained.
best for
- Systems where exa is already installed and scripted against
strengths
- Long view shows modified, accessed and created times, octal permissions, inode numbers and extended attributes
- Git-aware filtering respects .gitignore; grid, tree and long formats are available
- Single binary; Git support is optional via libgit2
weaknesses
- No longer maintained; the project recommends eza instead
- Lacks the YAML theme files and hyperlink support listed for eza
An interactive tree browser with fuzzy search, Git views and file operations; it replaces ls and tree for navigation, not for printing a listing.
best for
- Exploring large directories without printing them
- Moving, copying and deleting files while keeping the tree in view
strengths
- Fuzzy search, regex search with /pattern and content search with c/pattern
- Respects .gitignore; :gf shows Git file statuses and :gs shows only Git changes
- Sorts with --sort-by-size and --sort-by-date; multiple panels allow side-by-side directories
- Previews files, including images in compatible terminals
weaknesses
- Interactive program, so it does not fit an alias over ls for piping output
- Its verbs and search prefixes are a larger vocabulary to learn than ls flags
What changes compared to ls
These differences are documented by the projects.
- Output is color-coded by file type in eza, exa and lsd; lsd and eza can also show icons
- eza and exa show Git status in the listing; broot uses :gf and :gs commands for the same
- eza, exa and lsd (--tree) have a tree view; broot shows a navigable tree as its main view
- exa's long view adds created and accessed times, octal permissions, inode numbers and extended attributes
- broot is interactive with fuzzy search and file operations, where ls just prints names
Switching from ls
lsd documents shell aliases you can copy into your shell config. eza is described as compatible with most existing ls workflows.
- alias ls='lsd' replaces ls with lsd for basic listings
- alias lt='lsd --tree' adds a tree shortcut
- alias lla='lsd -la' gives a detailed listing including hidden files
- Install eza with nix run github:eza-community/eza, or exa with Homebrew, APT or Cargo
When not to use these
- You need identical ls output in portable scripts across machines: none of these projects document full ls output compatibility.
- You work on servers where you cannot install binaries; plain ls is already there.
FAQ
- Can I use these as drop-in replacements for ls in scripts?
- Not documented. lsd says it keeps compatibility with standard ls command patterns and eza says it keeps compatibility with most existing ls workflows, but neither documents identical output for scripts. exa does not document it, and broot is interactive, so it is not a drop-in.
- Should I use exa or eza?
- Use eza. exa is no longer maintained, and its own project recommends the eza fork. eza lists features exa does not, such as YAML color themes and terminal hyperlinks.
- Do I need a special font for icons?
- For lsd, yes: it needs a patched font such as Nerd Font or Font Awesome for icons, and it also supports Unicode emojis. eza can display icons too, though its font requirements are not documented.
- Does broot replace ls?
- It replaces ls and tree for exploring directories, with a tree view, fuzzy search and file operations. It is an interactive program, so it does not replace ls in pipelines.