exa is a modern replacement for ls.



exa is a modern replacement for ls.

README Sections: OptionsInstallationDevelopment

Build status Say thanks!

Screenshots of exa

exa is a modern replacement for the venerable file-listing command-line program ls that ships with Unix and Linux operating systems, giving it more features and better defaults. It uses colours to distinguish file types and metadata. It knows about symlinks, extended attributes, and Git. And it’s small, fast, and just one single binary.

By deliberately making some decisions differently, exa attempts to be a more featureful, more user-friendly version of ls. For more information, see exa’s website.

Command-line options

exa’s options are almost, but not quite, entirely unlike ls’s.

Display options

  • -1, --oneline: display one entry per line
  • -G, --grid: display entries as a grid (default)
  • -l, --long: display extended details and attributes
  • -R, --recurse: recurse into directories
  • -T, --tree: recurse into directories as a tree
  • -x, --across: sort the grid across, rather than downwards
  • -F, --classify: display type indicator by file names
  • --colo[u]r: when to use terminal colours
  • --colo[u]r-scale: highlight levels of file sizes distinctly
  • --icons: display icons
  • --no-icons: don't display icons (always overrides --icons)

Filtering options

  • -a, --all: show hidden and 'dot' files
  • -d, --list-dirs: list directories like regular files
  • -L, --level=(depth): limit the depth of recursion
  • -r, --reverse: reverse the sort order
  • -s, --sort=(field): which field to sort by
  • --group-directories-first: list directories before other files
  • -D, --only-dirs: list only directories
  • --git-ignore: ignore files mentioned in .gitignore
  • -I, --ignore-glob=(globs): glob patterns (pipe-separated) of files to ignore

Pass the --all option twice to also show the . and .. directories.

Long view options

These options are available when running with --long (-l):

  • -b, --binary: list file sizes with binary prefixes
  • -B, --bytes: list file sizes in bytes, without any prefixes
  • -g, --group: list each file’s group
  • -h, --header: add a header row to each column
  • -H, --links: list each file’s number of hard links
  • -i, --inode: list each file’s inode number
  • -m, --modified: use the modified timestamp field
  • -S, --blocks: list each file’s number of file system blocks
  • -t, --time=(field): which timestamp field to use
  • -u, --accessed: use the accessed timestamp field
  • -U, --created: use the created timestamp field
  • -@, --extended: list each file’s extended attributes and sizes
  • --changed: use the changed timestamp field
  • --git: list each file’s Git status, if tracked or ignored
  • --time-style: how to format timestamps
  • --no-permissions: suppress the permissions field
  • --octal-permissions: list each file's permission in octal format
  • --no-filesize: suppress the filesize field
  • --no-user: suppress the user field
  • --no-time: suppress the time field

Some of the options accept parameters:

  • Valid --color options are always, automatic, and never.
  • Valid sort fields are accessed, changed, created, extension, Extension, inode, modified, name, Name, size, type, and none. Fields starting with a capital letter sort uppercase before lowercase. The modified field has the aliases date, time, and newest, while its reverse has the aliases age and oldest.
  • Valid time fields are modified, changed, accessed, and created.
  • Valid time styles are default, iso, long-iso, and full-iso.


exa is available for macOS and Linux. More information on how to install exa is available on the Installation page.

Alpine Linux

On Alpine Linux, enable community repository and install the exa package.

$ apk add exa

Arch Linux

On Arch, install the exa package.

$ pacman -S exa

Android / Termux

On Android / Termux, install the exa package.

$ pkg install exa


On Debian, install the exa package. For now, exa is in the unstable repository.

$ apt install exa


On Fedora, install the exa package.

$ dnf install exa


On Gentoo, install the sys-apps/exa package.

$ emerge sys-apps/exa


If you’re using Homebrew on macOS, install the exa formula.

$ brew install exa


If you're using MacPorts on macOS, install the exa port.

$ port install exa


On nixOS, install the exa package.

$ nix-env -i exa


On openSUSE, install the exa package.

$ zypper install exa


On Ubuntu 20.10 (Groovy Gorilla) and later, install the exa package.

$ sudo apt install exa

Void Linux

On Void Linux, install the exa package.

$ xbps-install -S exa

Manual installation from GitHub

Compiled binary versions of exa are uploaded to GitHub when a release is made. You can install exa manually by downloading a release, extracting it, and copying the binary to a directory in your $PATH, such as /usr/local/bin.

For more information, see the Manual Installation page.


If you already have a Rust environment set up, you can use the cargo install command:

$ cargo install exa

Cargo will build the exa binary and place it in $HOME/.cargo.

To build without Git support, run cargo install --no-default-features exa is also available, if the requisite dependencies are not installed.

Development Rust 1.45.2+ MIT Licence

exa is written in Rust. You will need rustc version 1.45.2 or higher. The recommended way to install Rust for development is from the official download page, using rustup.

Once Rust is installed, you can compile exa with Cargo:

$ cargo build
$ cargo test
  • The just command runner can be used to run some helpful development commands, in a manner similar to make. Run just --tasks to get an overview of what’s available.

  • If you are compiling a copy for yourself, be sure to run cargo build --release or just build-release to benefit from release-mode optimisations. Copy the resulting binary, which will be in the target/release directory, into a folder in your $PATH. /usr/local/bin is usually a good choice.

  • To compile and install the manual pages, you will need pandoc. The just man command will compile the Markdown into manual pages, which it will place in the target/man directory. To use them, copy them into a directory that man will read. /usr/local/share/man is usually a good choice.

  • exa depends on libgit2 for certain features. If you’re unable to compile libgit2, you can opt out of Git support by running cargo build --no-default-features.

  • If you intend to compile for musl, you will need to use the flag vendored-openssl if you want to get the Git feature working. The full command is cargo build --release --target=x86_64-unknown-linux-musl --features vendored-openssl,git.

For more information, see the Building from Source page.

Testing with Vagrant

exa uses Vagrant to configure virtual machines for testing.

Programs such as exa that are basically interfaces to the system are notoriously difficult to test. Although the internal components have unit tests, it’s impossible to do a complete end-to-end test without mandating the current user’s name, the time zone, the locale, and directory structure to test. (And yes, these tests are worth doing. I have missed an edge case on many an occasion.)

The initial attempt to solve the problem was just to create a directory of “awkward” test cases, run exa on it, and make sure it produced the correct output. But even this output would change if, say, the user’s locale formats dates in a different way. These can be mocked inside the code, but at the cost of making that code more complicated to read and understand.

An alternative solution is to fake everything: create a virtual machine with a known state and run the tests on that. This is what Vagrant does. Although it takes a while to download and set up, it gives everyone the same development environment to test for any obvious regressions.

First, initialise the VM:

host$ vagrant up

The first command downloads the virtual machine image, and then runs our provisioning script, which installs Rust and exa’s build-time dependencies, configures the environment, and generates some awkward files and folders to use as test cases. Once this is done, you can SSH in, and build and test:

host$ vagrant ssh
vm$ cd /vagrant
vm$ cargo build
vm$ ./xtests/run
All the tests passed!

Of course, the drawback of having a standard development environment is that you stop noticing bugs that occur outside of it. For this reason, Vagrant isn’t a necessary development step — it’s there if you’d like to use it, but exa still gets used and tested on other platforms. It can still be built and compiled on any target triple that it supports, VM or no VM, with cargo build and cargo test.

  • Panic when `--long` is used

    Panic when `--long` is used

    # exa v0.8.0
    $ RUST_BACKTRACE=1 exa -l
    thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', /build/rust/src/rustc-1.33.0-src/src/libcore/slice/mod.rs:2455:10
    stack backtrace:
       0: <unknown>
       1: <unknown>
       2: <unknown>
       3: <unknown>
       4: <unknown>
       5: <unknown>
       6: <unknown>
       7: <unknown>
       8: <unknown>
       9: <unknown>
      10: <unknown>
      11: <unknown>
      12: <unknown>
      13: __libc_start_main
      14: <unknown>
    Aborted (core dumped)
    errors › runtime error 
    opened by pangteypiyush 27
  • Static binary downloaded from release not working, lacking libhttp_parser

    Static binary downloaded from release not working, lacking libhttp_parser

    I've downloaded the static binary of version v0.7.0 ( https://github.com/ogham/exa/releases/download/v0.7.0/exa-linux-x86_64-0.7.0.zip )

    I try to run the binary exa-linux-x86_64, and get the error: ./exa-linux-x86_64: error while loading shared libraries: libhttp_parser.so.2.1: cannot open shared object file: No such file or directory

    If I build exa myself with make, in the same system, the binary I've compiled works fine.

    opened by gabrielmagno 26
  • Git ignore filter

    Git ignore filter

    Exa already has some options for filtering files. I think filtering out files ignored in .gitignore files, as well as global exclude files, would be a great addition. Output from exa can become littered by uninteresting files like build directory contents or node_modules/. This is especially true when using the --tree option, which can have hundreds of lines of output.

    Here is a draft of the help text for the option I'm proposing:

    -g, --git-ignore   don't list files ignored by git

    Libgit2, which is already used by Exa, has a function for determining whether a files should be excluded or not. See the documentation for status_should_ignore.

    What do you think?

    features › git 
    opened by jacwah 26
  • Error on macOS Sierra Beta: malloc_zone_unregister

    Error on macOS Sierra Beta: malloc_zone_unregister

    For any directory with or without any options at all, exa reports this error:

    <br />exa(5617,0x7fff97ab33c0) malloc: *** malloc_zone_unregister() failed for 0x7fff97aa9000 <br />

    After which it doesn't exit until you press ^C. I have macOS v 10.12 Beta (16A285a), which is the Sierra Public Beta that came out very recently, so it may be related to that (especially because it worked in El Capitan before). I also use the fish shell, v 2.3.1. Any help would be greatly appreciated, and feel free to ask me for any other details.

    Thanks in advance, and exa is awesome!

    opened by ghost 24
  • Panicked at called Result::unwrap()

    Panicked at called Result::unwrap()

    I am using the exa version v0.9.0 on a MacOS Catalina 10.15.7

    Into a GIT project I am running into the following error, launching the command:


    thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/libcore/result.rs:1084:5
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
    • Removing .git folder, the issue disappears
    • Launching exa -la, the issue disappears

    Thank you

    opened by davideprevosto 21
  • Cannot compile with latest Rust due to struct shorthand error

    Cannot compile with latest Rust due to struct shorthand error

    error: struct field shorthands are unstable (see issue #37340)
      --> /exa-d551ef44a896dca9/f54bc41/src/fs/dir.rs:45:18
    45 |         Ok(Dir { contents, path, git })
       |                  ^^^^^^^^
    errors › build error 
    opened by evanworley 19
  • On the -T option

    On the -T option

    Playing with the (amazing) tree view, I've noticed a couple of places for improvement:

    • There is no Git information in this view.
    • It says Option --tree is useless without option --recurse. I think we could imply --recurse then.
    • It may be useful to pass an argument to -T limiting the nesting level, similarly to tree -L 2.
    feature request features › git 
    opened by vlad-shatskyi 16
  • Compilation errors on Ubuntu 12.04

    Compilation errors on Ubuntu 12.04

    $ rustc --version
    rustc 1.3.0-nightly (16f64c388 2015-07-09)
    $ git clone https://github.com/ogham/exa.git
    $ cd exa
    $ sudo make --install
    cargo build --release
       Compiling exa v0.3.0 (file:///home/alanb/src/git/hub/exa)
    src/feature/xattr_linux.rs:4:5: 4:22 warning: unused import, #[warn(unused_imports)] on by default
    src/feature/xattr_linux.rs:4 use std::ffi::CString;
    error: linking with `cc` failed: exit code: 1
    note: "cc" "-Wl,--as-needed" "-m64" "-L" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/home/alanb/src/git/hub/exa/target/release/exa.0.o" "-o" "/home/alanb/src/git/hub/exa/target/release/exa" "-Wl,--whole-archive" "-l" "morestack" "-Wl,--no-whole-archive" "-Wl,--gc-sections" "-pie" "-Wl,-O1" "-nodefaultlibs" "-Wl,--whole-archive" "/tmp/rustc.O8V1ruSOlYpv/liblibgit2_sys-ee62f8ed694e2d9b.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustc.O8V1ruSOlYpv/liblibssh2_sys-197403f26ef746c2.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustc.O8V1ruSOlYpv/libopenssl_sys-f1940735b7e345d7.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustc.O8V1ruSOlYpv/libstd-74fa456f.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustc.O8V1ruSOlYpv/liballoc-74fa456f.rlib" "-Wl,--no-whole-archive" "-L" "/home/alanb/src/git/hub/exa/target/release" "-L" "/home/alanb/src/git/hub/exa/target/release/deps" "-L" "/home/alanb/src/git/hub/exa/target/release/build/libgit2-sys-ee62f8ed694e2d9b/out/lib" "-L" "/home/alanb/src/git/hub/exa/target/release/build/libssh2-sys-197403f26ef746c2/out/lib" "-L" "/usr/lib/x86_64-linux-gnu" "-L" "/home/alanb/src/git/hub/exa/target/release/build/libssh2-sys-197403f26ef746c2/out/lib" "-L" "/usr/lib/x86_64-linux-gnu" "-L" "/usr/lib/x86_64-linux-gnu" "-L" "/home/alanb/src/git/hub/exa/target/release/build/openssl-sys-f1940735b7e345d7/out" "-L" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-L" "/home/alanb/src/git/hub/exa/.rust/lib/x86_64-unknown-linux-gnu" "-L" "/home/alanb/src/git/hub/exa/lib/x86_64-unknown-linux-gnu" "-Wl,-Bstatic" "-Wl,-Bdynamic" "-l" "rt" "-l" "ssl" "-l" "crypto" "-l" "dl" "-l" "z" "-l" "z" "-l" "ssl" "-l" "crypto" "-l" "c" "-l" "m" "-l" "dl" "-l" "pthread" "-l" "rt" "-l" "gcc_s" "-l" "pthread" "-l" "c" "-l" "m" "-l" "compiler-rt"
    note: /tmp/rustc.O8V1ruSOlYpv/liblibssh2_sys-197403f26ef746c2.rlib(lldb-fix-r-ssh2-channel.o): In function `_libssh2_channel_nextid':
    channel.c:(.text._libssh2_channel_nextid+0x0): multiple definition of `_libssh2_channel_nextid'
    # many more warnings of multiple definitions
    error: aborting due to previous error
    Could not compile `exa`.
    To learn more, run the command again with --verbose.
    make: *** [target/release/exa] Error 101
    $ sudo make install --verbose
    make: unrecognized option '--verbose'
    Usage: make [options] [target] ...
    os › linux errors › build error 
    opened by jalanb 15
  • Grid view doesn't work

    Grid view doesn't work

    Grid view doesn't seem to work in 0.10.1 - it just displays a downward list. Even if I explicitly tell Exa to use e.g. 8 columns, it keeps displaying a downward list.

    -Exa version: 0.10.1 -OS: Deepin 20.2 (based on Debian 10) -Terminal Emulator: Deepin Terminal

    Could you please look into this? If you need more information, please let me know.

    opened by Vistaus 13
  • Release?


    @ogham ogham released this on 15 Jul 2019 · 6 commits to master since this release
    exa release v0.9.0
    I will release more than one version of exa this year, mark my words.


    opened by Narven 13
  • Should respect terminfo.

    Should respect terminfo.

    Currently, for example, set_a_foreground is always an ASCI sequence appropriate for xterm-color, even if my terminfo entry has a different one.

    To verify:

    # Create a terminal info copy. 
    infocmp -L xterm-256color > my-term.ti
    # Change its name and color attribute.
    sed -i.bak 's/xterm-256color|xterm with 256 colors/my-term|My Terminal/' my-term.ti
    sed -i.bak -E 's/([[:space:]]+set_a_foreground=).*/\1smth/' my-term.ti
    # Compile it
    tic my-term.ti
    # Set the current terminal emulator to use the newly compiled terminfo.
    export TERM=my-term

    It must print smth instead of colors. If you replace exa in the last command with, say, vim, you'll see the difference. I'd recommend you to take a look at the tput command.

    os › macos os › linux features › ui 
    opened by vlad-shatskyi 13
  • Feature Request: Highlight recent modified files

    Feature Request: Highlight recent modified files

    I'm not sure why this features hasn't been submitted yet in exa, it would be great to highlight files / folders that had been recently modified in the last 24-48hours.

    opened by M1ndo 0
  • Created colors explanation file based on @ogham's text

    Created colors explanation file based on @ogham's text

    As stated in this and this issues, a lot of people don't understand which colors are used for the different file types.

    @ogham has provided an explanation but never merged it back to the main documentation.

    I used his notes and put them into proper markdown and linked all the "manual" files together. I did not include any links on the main readme because I didn't know where to properly put it.

    TLDR: One new readme file to help people understand the colors better.

    opened by vii33 0
  • Natural sort i.e. ls -v

    Natural sort i.e. ls -v

    Hello there,

    Following are outputs from windows command prompt dir, ls and exa. Ideally, I would like to get the order from dir in this scenario. However, the ls -v output is also acceptable.

    Is this possible with exa? If so, how do I do it?


    Windows command prompt dir output:

    12/14/2022  23:35    <DIR>          .
    12/14/2022  23:30    <DIR>          (12)
    12/14/2022  23:30    <DIR>          aa

    ls -lFa --group-directories-first -v output:

    drwxr-xr-x 1 user 4096 Dec 14 23:35  ./
    drwxrwxrwx 1 root  4096 Dec 13 21:22  ../
    drwxr-xr-x 1 user 4096 Dec 14 23:30  aa/
    drwxr-xr-x 1 user 4096 Dec 14 23:30 '(12)'/

    exa --version output: v0.10.1 [+git]

    exa -lF -a -a --group-directories-first output:

    drwxr-xr-x - user 14 Dec 23:30 (12)/
    drwxr-xr-x - user 14 Dec 23:35 ./
    drwxrwxrwx - root  13 Dec 21:22 ../
    drwxr-xr-x - user 14 Dec 23:30 aa/
    opened by lxg208 0
  • Makefiles spelled with a lowercase

    Makefiles spelled with a lowercase "m" do not receive a special color

    Makefile spelled with a lowercase "m" don't get a special highlight and color like makefiles with a capital "M". See screenshots below, with problem encircled. The tarball in the circle is the source code of unrar 6.2.2, found here. I wasn't sure if it was just GNU make that responds to uncapitalized makefiles, however apparently all of GNU make, bmake, and kati work for these. I'm not sure if they're standard.

    Expected behavior (for comparison)


    Problematic behavior


    $ exa --version
    exa - list files on the command-line
    v0.10.1 [+git]

    Operating system: Arch Linux rolling Architecture: x86_64

    opened by saltedcoffii 0
  • v0.10.1(Apr 12, 2021)

    A small patch release (exa's first!) to fix a couple of issues (and to demonstrate a quicker release pace).


    (No new features)


    • Change the way the "ignored" status is aggregated for directories, so directories containing ignored files no longer look like the directory itself is ignored (bd4f144)
    • Change the icon for TeX files to a "T" (e3e776a)
    • Display the classification character (such as / for directories) at the end of symlink targets (dbd11d3)
    • Display more helpful error messages when a number in a command-line option or environment variable fails to be parsed (550f2d2)


    • Fix thousand separators not being displayed in file sizes (7a4cde7)
    • Fix $EXA_GRID_ROWS displaying the wrong size table in certain situations (c729e22)
    • Fix month name not following locale when a file's date is in the current year (3a8005c)


    Thanks again to ariasuni.

    Source code(tar.gz)
    Source code(zip)
    exa-accoutrements-v0.10.1.zip(9.12 KB)
    exa-linux-armv7-v0.10.1.zip(631.70 KB)
    exa-linux-x86_64-musl-v0.10.1.zip(879.10 KB)
    exa-linux-x86_64-v0.10.1.zip(709.40 KB)
    exa-macos-x86_64-v0.10.1.zip(612.77 KB)
    exa-vendored-source-v0.10.1.zip(20.88 MB)
  • v0.10.0(Apr 4, 2021)

    exa release v0.10.0

    Sorry about the delay, everyone. My aim is still to follow the Rust project itself, and make smaller releases more often. Gonna keep trying until I get there.

    There will be four new types of archive available from now on! An armv7 Linux build, a musl Linux build, an archive containing only the compiled man page and completions, and an archive containing the complete vendored source code.

    This version should be the last version without Windows support.


    • The --time flag now defaults to modified without an argument (36cf5df)
    • Add options to hide table columns (925f517)
    • Add customisation settings to change the size colour scale (3ef6195)
    • Add flag for octal permissions (16046d5)
    • Add environment variable for icon spacing (51be9f4)
    • Add --numeric flag to display UIDs and GIDs (4ea79ee)


    • Make single-digit hour times zero-padded (1bf9e39)
    • Include symlinks to directories when grouping directories first (69a7e53)
    • Do not sort command-line arguments when --sort=none (bbd6db3)
    • Warn when trying to use the Git feature when it’s disabled (a740512)
    • Sort the command-line arguments (a740512)
    • Allow absolute paths in $TZ environment variable (57cf0f1)
    • Escape the delete character in filenames (b5b7310)
    • Symlinks to directory now use the ‘directory’ icon (0a7ffcd)


    • Fix bug where icons weren’t displayed when file grid wraps (dd9dfff)
    • Fix bug where the wrong file timestamp was being used (215b779)
    • Fix crash on broken symlink in Git repository (a7a8e99)
    • Fix bug where long grid view didn’t turn into long view when piping (6010ed5)
    • Fix handling of potentially-unsupported time metadata. (a636d08)
    • Fix .gitignore parsing by using libgit2 instead of doing it ourselves. (046af5c)
    • Fix crash on encountering a pre-Unix-epoch timestamp. (bc830b9)
    • Fix display of August in timestamps. (3fe35b5)
    • Fix inverted space colour of icons when selecting them. (79bac41)
    • Fix extra column in long grid mode. (0f414cf)
    • Fix rounding of human-readable filesizes. (74ecf6d)


    Thanks to 0rvar, 0x3333, b05902132, BrennanMcDonald, de-vri-es, emgelb, FliegendeWurst, Freaky, imsofi, j-tai, LarsHaalck, mqudsi, msehnout, PatriotRossii, VichoReyes, whonore, and many others for contributing.

    Special thanks to ariasuni.

    Source code(tar.gz)
    Source code(zip)
    exa-accoutrements-v0.10.0.zip(8.91 KB)
    exa-linux-armv7-v0.10.0.zip(622.04 KB)
    exa-linux-x86_64-musl-v0.10.0.zip(873.90 KB)
    exa-linux-x86_64-v0.10.0.zip(701.14 KB)
    exa-macos-x86_64-v0.10.0.zip(605.39 KB)
    exa-vendored-source-v0.10.0.zip(21.32 MB)
  • v0.9.0(Jul 15, 2019)

    exa release v0.9.0

    I will release more than one version of exa this year, mark my words.


    • Icon support with --icons (9497b30)
    • New sort options .name and .Name which ignore a leading dot (a156d96)
    • Support TIME_STYLE environment variable (9917810)
    • New option to only display directories, --only-dirs (054cac6)
    • Support 24-bit colours (dc2009a)
    • Display if a file is ignored by Git (80b0d9d)


    • Replace the mi colour with bO overlay colour (59d9e90)
    • Pre-release versions have their build number shown (c7497f3)
    • Add --classify to man page (9c77a95)
    • Highlighting for file types .zst (5fae489), Bazel and Ant (c635031), .ts (e711dbc), .m4v (9b446c0), and .jpf (9916742)
    • Create worker threads only once for performance (8cbde76)


    • Allow zero-padded numbers in $LS_COLORS (afc9657, ce3f05c)
    • Make non-uppercase README files immediate (d9c9dbe)
    • Highlight README~ as temporary, not immediate (57e4c08)
    • Use more accurate time to fix inconsistent sorting (649744d)
    • Prevent infinite loop with -aaR (e936d7e)
    • Fix panic in certain timezones (9f76f94 and this fix)
    • Fix sorting by created time (faed8f9)
    • Fix Git status not working for paths containing ../ (f1a5b64)


    Thanks to alexmaco, ariasuni, asoderman, benmezger, BenWhitehead, cecton, chetgurevitch, dguo, Don42, Fierthraix, golem131, ignatenkobrain, jcrd, joshleeb, joshuarli, kornelski, LlinksRechts, lovesegfault, martinlindhe, mfarrugi, mgkurtz, mgttlinger, mopp, nasyxx, ne-sted, Offpics, Paradiesstaub, polyzen, rleungx, semarie, sergeysova, spk, and teresy for contributing!

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64-0.9.0.zip(659.82 KB)
    exa-macos-x86_64-0.9.0.zip(588.39 KB)
    MD5SUMS(102 bytes)
    SHA1SUMS(118 bytes)
  • v0.8.0(Sep 30, 2017)

    This release provides both bug fixes and new features. I've written a post that outlines what's new, as well as some remarks on how I'd like to handle getting me to do releases more often in the future: bsago.me/blog/exa/v0.8.0


    • Use completely new, less strict, more friendly options parser (b5bcf22)
    • Add a strict mode, for when you want to check your options (97d1472)
    • Add EXA_GRID_ROWS that makes --long --grid a bit more palatable (e933fa6)
    • Add EXA_DEBUG for logging information (e0727a1)
    • Add LS_COLORS parsing and colouring (adfee28, aa2e3a5)
    • Add EXA_COLORS parsing and colouring, which overrides the above (075fe80, aa2e3a5)
    • Initial support for a --git-ignore flag (827aa8b)


    • Default to sorting case-insensitively (57c647f)
    • Hide xattr errors unless xattrs were explicitly asked for (5189d66)
    • Add orf and nef file types (40ce7ba)
    • Add bk file type (eda3e56)
    • Only check the terminal width of stdout, not stdin and stderr (4289f4d)
    • Sorting by date now has new and old convenience aliases (f55bd6d)
    • Use only verified published crates, so exa can be on crates.io (1efb8a5)


    • Use a patched version of libgit2 to prevent that libhttp_parser error (3405db1)
    • Fix bug where --tree --all didn't work (a2cd39e)
    • Fix bug where ISO dates were long when they should be short and vice versa (fca5b6b)
    • Fix bug where month name padding made the whole table look weird (999c9d5)
    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64-0.8.0.zip(601.93 KB)
    exa-macos-x86_64-0.8.0.zip(534.58 KB)
    MD5SUMS(102 bytes)
    SHA1SUMS(118 bytes)
  • v0.7.0(Jul 7, 2017)


    • Display device IDs when listing block or character devices (ef5fa90660412c1d95a3237be1f4e278a38105e1)
    • Display the sticky/setuid/setgid bits in permissions (110613bf95c25c8258a35bc2217c7a956c94bbec)
    • Allow --all --all to display the . and .. directory entries (5cd7609034da592a7c96c6ef4cdf93fe5a0ebfea)
    • Allow --sort=type to sort by file type: file, directory, link, pipe, device (f750536420b6c7ca8d21f83a10c3a9fdae3cbca1)
    • Add the --time-style option to use the ISO format for timestamps (690aa21ac8bff02ca08323825822c9c663bd4cef)


    • Don’t look up things like time zones or locale information when those columns won’t be displayed (97236128ea28093aee95f6536598bbaf48a3263e)
    • Similarly, don’t buffer the entire table before printing it out when not in grid-details view (fc60838ff3021ce913b21516c8db0f8879f8644e)
    • Make the help text like 1% faster to display (763e833b6f3be5a0e4b9cf9f807a4b3874435c7e)


    • Actually display the error when recursing into a directory fails in tree view (f4ddbf384990b3d132833e89662f1aab712da866)
    • Fix crash when given invalid UTF-8 arguments (de60b95850951ec5c71712a82a736e8518cc7bf6)
    • Fix bug where files’ accessed times (atime) were actually modified times (mtime)! (5bdf6304bb9e4bc55e510594f8bbe2c0fe96c9d2)
    • Fix bug where the presence of the COLUMNS environment variable made exa always use colours (84b01f206412d0ee005bb3542b036b0b10091b71)


    Thanks to kballard and gyscos for contributing!

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64-0.7.0.zip(1.11 MB)
    exa-macos-x86_64-0.7.0.zip(527.49 KB)
  • v0.6.0(May 17, 2017)


    • Add the --classify option (e81b83b4acf364ecc65206c9be9d7535e1f6c901)
    • Add .cr2 as image type (8ac68f99643bd98ca853d8f90fe454e6c6fbb1f4)
    • Non-printable characters in file names are now escaped (3ebc22580a283b7b79c8808a95caeadc976b49c3, 609bafef49a93d306bf9c210a36fda329387ec00)
    • Add completions for bash, zsh, and fish (897d6ffa563cc15e5628d391e94cafdb282253b1)


    • Don’t prepend symlink paths to link targets (f8624ed30896de91820d27091692ce3ecd4b60f3)
    • Turn off the Git networking features, meaning exa does not require OpenSSL, making it smaller and easier to compile (08bc2e3e39025b922d61405c840ae71c97d6b316)
    • Change --help and --version to return exit code 0 (510d2f7a7656aba040816bf379eebbd4e4a6c4ed)
    • Lots and lots of Makefile changes
    • The usual amount of internal restructuring


    • Fix bugs where files with two components, and . and .., were not displayed (a28bd8fa64631bf43bd0fdf2fa0cf56a8a4ad09f, dd63774e37691badb446cb71950ba0d2d18146a3)
    • Handle locales with 4-character-wide short month names (ce8a2e7ce9a447d25f57632e77966248a1130fc4)
    • Fix bug where cell width wasn’t being calculated (08281333002079ee65af35bf3f61abf7f81f7cc2)


    Thanks to maandree, neosilky, MakeNowJust, raphink, kballard many times over, and quininer for contributing!

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64-0.6.0.zip(1.11 MB)
    exa-macos-x86_64-0.6.0.zip(511.93 KB)
  • v0.5.0(Apr 11, 2017)

    Now, where was I?


    • Add --colo[u]r option to toggle colours on and off (f92459d95779eef257292234a15e6b4345511830)
    • Add case-insensitive sorting with --Name and --Ext (note the caps) (8805ce9e3bcd4b56f8811a686dd56c47202cdbab, 3e9616cffababc491b1fa587e008a0bdb385901c)
    • Recognise pipes, devices, and sockets on systems where they’re avaliable (a9bb275250e1d2eb3d3e1b2855afee6a0c560903)
    • Add ability to ignore globs (95596297a910455171647dce00781563e4a19d8a)
    • Add option to colour file sizes on a scale (0ffb331976e8563c063d12b476c0b82d76747d1f, 86065f832d5b82320022807bfb02a48f43bc1930)


    • Improved help text (edeec0f6f27304dca1fa4e6c3d2b2355a72ffbb6, b35927f24779a4d2ea9212c3c3000daf50027d63, 7e15e0dd491b60fa99f5bd61056e9876eefdaaf6)
    • Use the time zone data present on the system, rather than the perpetually-outdated versions compiled with exa (ee4c09dd30075117473baa4ad2cf108e512fe05c)
    • Print files’ paths if they had paths when passed in as arguments (9b87ef1da2231acef985bb08f7bd4a557167b652)
    • Highlight cryptographic file types (45c93b1b63f2ee17ea15448c048f16dc9a646706)
    • Error messages now go to stderr (8d25719b6bb33ad0e539fb4d7e00e2eb111320ac)
    • Stop printing a header for zero files (a7e3456b0d3b25bb8ed1708935f3ebb571f4fdba)
    • The usual amount of internal restructuring.
    • Lots and lots of upgrades to newer Rust versions.


    • Allow Details view to be used, even if the terminal has no width (1756a0a84157b17676268d730f2faa3151d7cd4a)
    • Compilation fixes for ARM (734c5084ba90c93459eee65fa09da46d583a92b7)
    • Compilation fixes for FreeBSD (b9eb364823d0d4f9085eb220233c704a13d0f611)
    • Fix bug where files were shown to not have extended attributes (4c3266310d04d5a5047a6a740280af62afacbf4f)
    • Fix bug where files weren’t being sorted correctly in Details view (f6c5c89f55c694f04f9f0a1269f5c4945450d78b)
    • Fix bug where the directory name above a list of files was not printed (f35d28d1b8e85b37f5dbca17014f4c0f62fa5c30)


    Thanks to skade, petevine, jbeich, tomassedovic, hoodie, lindenk, gemmarx, spk, Stebalien, and neosilky for contributing!

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64.zip(1.16 MB)
    exa-macos-x86_64.zip(1.13 MB)
  • v0.4.1(Mar 29, 2017)

    This is a snapshot of exa’s current code, which has been cleaned up a bit and at the very least been run through untry (which managed to pick apart all try!s but one). It’s being released to work around a bug in macOS Sierra.

    Usually when I do a release I go through the commit history, pick out anything that looks like it could be a bullet point in the release notes, look at the contributors and see who’s there, then edit the website and upload — there are more features in here than just the openssl upgrade, and the work done so far is really deserving of a “proper” release, rather than just a beta.

    But I don’t even want to learn how little work I’ve done on it in the past twelve months.

    I think I need to be honest with everyone here. My interest in exa is still there, and the list of features I’d still like to add is as long as it’s ever been, but my motivation is completely shot. Compared to even a year ago it’s plummeted. Every day I go to work, bang out code on whatever it is I’m doing, leave, arrive home, then do my best to not do anything, on the computer or off it. My life’s going alright, I can still do things, I’m able to do things, but I just... don’t, and I wish I could give you a better reason than that. GitHub notifications were something I’d deal with later that day, then next week, then whenever I’d get around to it, and then routed into a folder in my inbox that I never actually checked, and then every day I’d see that number and hope it didn’t increase, and then I noticed that whenever it did increase I wouldn’t be able to concentrate on anything for another hour, so I just hid it, which hurt at first but at least gave me some time back. I’d still commit from time to time, but not mention any of this because I didn’t want to call attention to it, as though in time everyone would just forget. Whenever I saw a reply to the Sierra bug thread, I’d log in, read it, start to worry that if I replied now then I’d be admitting to everyone that I was still around and hadn’t died or something and was instead just ignoring their comments, and then what would people think of me? I even got as far as navigating to “Delete this repository” before I had to push the computer away.

    That’s one push that went correctly. It’s obvious to say, but it’s stupid to delete code that people are using, just because you didn’t want to deal with the fact that you made a mistake.

    I’m going to try something new: switching exa to a routine 6-week release schedule. The Rust has a release train that works over the same duration using multiple versions. I think exa (a hundredth its size) can do without that part, but the rest of it is good advice. Having an actual date for each one means I don’t get a choice in releasing anything or not, which is an incredible motivator for actually doing it! I still have to put 0.5.0 out properly, but with luck, the second release (0.6.0, which would come out halfway through May) would be a lot less daunting than the first, the third less than the second, and it would plateau from there.

    The root advice here is “if you’re having difficulty doing something, then do it more often, because it gets easier”. I found actually releasing my software hard. I want it to be easier.

    I hope you all find this acceptable, and I apologise again for the massive commit lacuna.

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Oct 18, 2015)

    So a while back I decided to add lots more info to exa's site, and unknowingly described a bunch of features that were in the development version but not the release version! So this is a kind-of emergency release to allow everybody to use those features, even those using the released versions.

    The downside of this is that I did mark some features as ones I wanted to complete before the v0.4.0 milestone. All that's happened is the version that they'll show up in has been renamed, but they're all still on my radar.


    • Add --grid --long view, which splits the details into multiple columns (090cebe)
    • Allow --tree without --long, which displays a tree view without any details (e1f4ea9)


    • DragonFlyBSD support (9601884, 6317417)
    • Change symlink arrow to -> from => (ebbac61)
    • Extended attributes are now displayed as child nodes (eee49ec)
    • Individual files are now queried in parallel (fa51a87)


    • Fix bug where Git repos were always queried, making exa very slow (d547c3f)
    • Fix bug where an extra newline was printed (6cf9274)


    Thanks to mgee, mneumann, kbknapp, lilydjwg, petevine, rhysd, hoodie, and DavidJFelix for contributing!

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64.zip(601.79 KB)
    exa-osx-x86_64.zip(489.33 KB)
  • v0.3.0(Jun 5, 2015)

    It's been exactly 100 commits and just over three months since version 0.2, so it's about time I did another binary release. This one fixes a few bugs, but most of the code changes have been maintenance: upgrading to the new standard filesystem library was a big step, and having dates in the right time zone is something I'm glad to have finally landed.

    By the way, I've decided to hold off on version 1.0 until exa can compile with Rust Stable. There aren't many feature flags left, and most of the ones that are pertain to the new std::fs library that we need to use. So exa will continue to require the nightly version for the foreseeable future.


    None in this build.


    • Make the Git column optional, to improve performance on large repositories (7dc3a02)
    • Stat files in parallel, for a nice speed boost! (d2df70e)
    • Use the new Rust fs and io libraries (ffcc6fa)
    • ANSI codes are now not displayed when output is not to a terminal (36116a1)


    • More options now require --long (5d152db and a4459da)
    • Timestamps are now in the user's correct time zone, rather than UTC (cc1d6aa)
    • Executable files are now highlighted in green (b452967)
    • Allow compilation without Git support (5caa6dd)


    Thanks to byteprelude, killercup, e12e, tsurai, and mgee for contributing! And thanks to everyone who's given feedback, reported bugs, and just plain used the thing.

    (Please let me know if I've missed you out.)

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64.zip(615.96 KB)
    exa-osx-x86-64.zip(488.82 KB)
  • v0.2.0(Mar 2, 2015)

    This is the first proper 'release' of exa. A number of people have been clamouring for these because Rust isn't fully stable yet, and there have been days when it's failed to build because of upstream failures. And if you're the sort of person (like me) who just aliases ls to the in-development version of exa, your ls will fail half the time.

    Unfortunately, I have no idea whether these releases will work or not. I just built them with Cargo. If they don't work, please tell me!


    • Add missing sort-by-date options. You can now also sort by 'modified', 'created', and 'accessed'. (a4e1719)
    • Add extended attribute support. (ce23c63)
    • Add --level option to limit depth of recursion and tree view. (f505bdc)
    • Add --group-directories-first option. (ff1f6d0)
    • Add --version command. (67f60e6)


    • Change date format to mimic ls. (0082563)
    • Numerous small optimisations and fixes.


    • Use the width of the file name in the grid view, instead of its length. The width handles multibyte UTF-8 characters and filenames with combining diacritics correctly. (43e8061)
    • Fix getting Git status while in a subdirectory. (6e19563)
    • Fix displaying UIDs and GIDs that are over 231. (38a7854)
    • Fix panic when previewing symlink to . or .. or /. (1da1142)
    • Fix missing /s in symlink targets. (ef58c30)

    Major stuff not done yet

    • Git is still slow when working with large repositories (#28)
    • No Windows support! (#32)


    Thanks to nwin, Stebalien, tuftedocelot, coyotebush, davidcelis, ebfe, mikefaille, and jgilchrist for contributing!

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64.zip(535.40 KB)
    exa-osx-x86_64.zip(406.49 KB)
  • v0.1.0(Feb 21, 2015)

zoxide is a blazing fast replacement for your cd command

zoxide A smarter cd command for your terminal zoxide is a blazing fast replacement for your cd command, inspired by z and z.lua. It keeps track of the

Ajeet D'Souza 8.7k Dec 31, 2022
procs is a replacement for ps written in Rust.

procs is a replacement for ps written in Rust. Documentation quick links Features Platform Installation Usage Configuration Features Output by t

null 3.6k Dec 30, 2022
fastmod is a fast partial replacement for the codemod tool

fastmod is a fast partial replacement for codemod. Like codemod, it is a tool to assist you with large-scale codebase refactors, and it supports most of codemod's options.

Facebook Incubator 1.4k Dec 29, 2022
A drop-in replacement for `dapp` and `seth` in Rust

dapptools.rs Rust port of DappTools dapp example Usage Run Solidity tests Any contract that contains a function starting with test is being tested. Th

Georgios Konstantopoulos 5k Jan 1, 2023
A readline replacement written in Rust

A readline replacement written in Rust Basic example // Create a default reedline object to handle user input use reedline::{DefaultPrompt, Reedline,

JT 292 Jan 9, 2023
Fls - Ferris-LS, a very bad LS replacement. Besides that, proves that I suck at clean & good code.

FLS A handy ls remake, purely for learning. Why FLS? There's no reason, at all, don't use it. I just want to learn Rust :D Usage Flags: -i = Use icons

florida 6 Jan 24, 2022
🦀️atos for linux by rust - A partial replacement for Apple's atos tool for converting addresses within a binary file to symbols.

atosl-rs ??️ atos for linux by rust - A partial replacement for Apple's atos tool for converting addresses within a binary file to symbols. tested on

everettjf 60 Dec 29, 2022
xcp is a (partial) clone of the Unix cp command. It is not intended as a full replacement

xcp is a (partial) clone of the Unix cp command. It is not intended as a full replacement, but as a companion utility with some more user-friendly feedback and some optimisations that make sense under certain tasks (see below).

Steve Smith 310 Jan 5, 2023
drop-in replacement for libfuzzer

Fazi A reimplementation of libfuzzer in Rust with some improvements Supported Features libFuzzer's mutations SanCov feedback Building without a main()

Lander Brandt 56 Nov 2, 2022
Xcode Neovim Replacement-ish.

An XCode replacement-ish development environment that aims to be your reliable XCode alternative to develop exciting new [apple] software products ??

null 272 Dec 30, 2022
A more convenient `#[target_feature]` replacement

A more convenient #[target_feature] replacement To get good performance out of SIMD everything on the SIMD codepath must be inlined. With how SIMD is

Koute 3 Apr 10, 2023
Simpler and more powerful replacement for `find`

FindFile (FF) An simple, ergonomic, and powerful replacement for find. Note: this repo is under active development The syntax is (mostly) figured out,

Sam Westerman 4 Jun 20, 2023
A lightweight, no-fuss, drop-in replacement for Rudderstack

Welcome to Stilgar! Stilgar is a lightweight, no-fuss, drop-in replacement for Rudderstack. Key features: Seamlessly compatible with all Rudderstack c

Withings 4 Jul 21, 2023
Drop-in replacement for the Actix Web HTTP Logger middleware

actix-contrib-logger Logger middleware for the Actix Web framework. Actually it's a copy & paste from the official Logger middleware (original source

Mariano Ruiz 5 Aug 28, 2023
Patch binary file using IDA signatures and defined replacement bytes in YAML.

fabricbin Patch binary file using IDA signatures and defined replacement bytes in YAML. Install: cargo install --git https://github.com/makindotcc/fab

makin 3 Oct 24, 2023
mdBook is a utility to create modern online books from Markdown files.

Create book from markdown files. Like Gitbook but implemented in Rust

The Rust Programming Language 11.6k Jan 4, 2023
Cold Clear 2 is a modern Tetris versus bot and a complete rewrite and evolution of Cold Clear.

Cold Clear 2 Cold Clear 2 is a modern Tetris versus bot and a complete rewrite and evolution of Cold Clear. It implements the Tetris Bot Protocol for

Mark Carlson 27 Dec 28, 2022
Modern file system navigation tool on Unix

monat -- Modern file system Navigator 简体中文 Introduction monat is a Unix shell auxiliary command focusing on the navigation of the file system, especia

Pavinberg 8 May 10, 2022
An open source artifact manager. Written in Rust back end and an Vue front end to create a fast and modern experience

nitro_repo Nitro Repo is an open source free artifact manager. Written with a Rust back end and a Vue front end to create a fast and modern experience

Wyatt Jacob Herkamp 30 Dec 14, 2022