exa

exa v0.1.0

Additions? Changes? Fixes?

exa 0.1 didn’t have any additions or changes because it was the first version. And it didn’t have any fixes because it was perfect!

Alright, it wasn’t perfect. But it’s interesting to look back on early versions of software, to see how bare-bones and featureless they all start out.

Proto-exa

exa’s first commit happened on the . It did not have many features. The code was written for pre-alpha Rust, and no longer compiles, but here’s an artist’s impression:

exa
.rw-rw-rw- colours.rs
.rw-rw-rw- colours.rs~
.rwxr-xr-x exa
.rw-rw-rw- exa.rs
.rw-rw-rw- exa.rs~

That’s right: there was no grid, the only column was the permissions column, and you got that column whether you liked it or not!

Other milestones

688e41e: Add file size column ()

The file size column landed a few commits later. It actually had support for binary prefixes, but there was no option to switch it on.

e0fc84e: Add --all command-line option ()

The first option came the day after.

87f0bde: Print numeric UIDs and GIDs if they don't map to anything ()

exa’s first bug! It used to assume that a file’s user or group would always map to an actual user on the system.

a8465fe: Move to Cargo ()

Cargo has been a fantastic build system and exa has stuck with it ever since.

728f9f1: Add grid view by default ()

This finally landed. You know you’re writing quality software when the commit message mentions two bugs it’s just introduced.

2784bae: Switch to Crates dependencies format ()

Crates.io became the crate host two months earlier.

90d4684: Preliminary Git support! ()

Using crates.io made it a lot easier to include third-party dependencies like libgit2.

5099b3f: Initial tree implementation ()

exa was pretty strict back then, and you had to use --recurse --tree to get it to work.

363d52d: Code cleanups in filetype detection ()

This relatively mundane commit is the commit tagged as the v0.1.0 release, because it happened to be the last commit before I put it on /r/rust.