f00
f00 — a next-generation, cross-platform coreutils ls clone in Rust, with modern UX and a supertool layer.
Website: https://f00.sh · Binary: f00 · Latest: v0.7.2
Status: v0.7.2 fast
--tree· Latest:v0.7.2· 0.x minors may include breaking changes
Install
|
Installs to ~/.local/bin by default (override with INSTALL_DIR). The installer adds that dir to your shell rc when it is missing from PATH (ADD_PATH=0 to skip).
| F00_VERSION=v0.7.1
| INSTALL_DIR=/bin
We never replace system /bin/ls by default. The primary command is always f00.
Using f00 as ls
Most people should keep typing f00. If you want muscle memory for ls, pick one opt-in path:
1. Shell alias (recommended for interactive use)
# modern product defaults (icons, git, …)
# coreutils-shaped (no icons/git; better for scripts / boring output)
# echo "alias ls='f00 --gnu'" >> ~/.bashrc
# or: export F00_GNU=1
Aliases only affect interactive shells. Non-interactive scripts keep using /bin/ls unless they call your alias-enabled shell.
2. Optional PATH symlink (installer opt-in)
| F00_INSTALL_LS=1
Creates …/bin/ls → f00 next to the binary. Anything that finds ls on your PATH (before /bin) will run f00. Does not overwrite /bin/ls.
3. Soft drop-in when the binary is named ls
If you symlink or rename so argv0 is ls, f00 uses quieter defaults (icons/dirs-first off). Full strict mode still needs --gnu or F00_GNU=1.
More detail: f00.sh#as-ls
Update
Features
| Area | Status | Notes |
|---|---|---|
GNU coreutils ls |
Shipped | Full flag surface + --gnu strict mode |
| Quoting | Shipped | -b -q -Q -N --quoting-style + QUOTING_STYLE |
| LS_COLORS | Shipped | Via lscolors / env |
| Speed | Shipped | Parallel stat (rayon), cheap short path, uid cache, Linux statx + io_uring batch, --threads, --profile |
| Portability | Shipped | Linux, macOS, Windows, FreeBSD |
| Git status | Shipped | Default feature |
| Icons | Shipped | --icons[=auto|always|never] (default: auto on TTY) |
| JSON / CSV / TSV / tree | Shipped | Machine formats |
| TOML config | Shipped | XDG / AppData |
| Shell completions | Shipped | f00 --generate-completions SHELL |
| Man page | Shipped | f00 --generate-man · committed man/f00.1 |
| TUI browser | Shipped | f00 --browse — dual-pane FM, preview, sort, $EDITOR/$PAGER |
| Archives | Shipped | zip / tar / tar.gz as virtual dirs |
| Ignore files | Shipped | --ignore-files → .gitignore / .f00ignore |
| Self-update | Shipped | --update / --check-update via GitHub Releases |
| Plugins | Shipped (opt-in) | Feature plugins · ABI v1 · decorate hooks · #27 |
Usage
# Classic listing
# Drop-in GNU shape (scripts)
F00_GNU=1
# Quoting / NUL / version sort / width
# Time styles / hide / hyperlink
# Machine output (rich metadata: inode, times, owner, permissions, …)
# Archives (auto when path is zip/tar)
# Ignore files
# Interactive browser (dual-pane when wide enough)
# Icons (auto on TTY; force on/off)
# Speed / profiling
Large directories (>32 entries) parallelize metadata collection with rayon. Sort order is unchanged. Benchmark:
Shell completions
# bash
# zsh (ensure fpath includes the directory)
# fish
# powershell / elvish
Man page
# View generated man page
|
# Or install the committed page (packagers)
# man/f00.1 → $(mandir)/man1/f00.1
# Regenerate after CLI changes:
TUI keys (--browse)
| Key | Action |
|---|---|
j/k · arrows |
Move (active pane) |
| Enter | Open dir / print file path & quit |
h/l · Backspace |
Parent / enter |
Tab |
Switch active pane |
\ / | |
Toggle dual-pane layout |
c / m / d |
Copy / move / delete (marked or cursor) → other pane; confirm overlay |
| Space | Mark · y print marks & quit (or confirm when overlay open) |
/ |
Filter · Esc clear / cancel confirm |
s / S |
Cycle sort (name/size/mtime/ext) · reverse |
p |
Toggle preview pane (single-pane only) |
e / v |
Open in $EDITOR · view in $PAGER |
. |
Toggle hidden · r refresh · H help · q quit |
GNU surface (highlights)
-aA -l1Cmx -h --si -Rr -tSXvUf -d -Fp --file-type -BI --hide -LH -goGn -is -uc -vw -Z --zero -D --dired -bQNq --quoting-style --time-style --block-size --author --hyperlink --indicator-style --format --sort --time --group-directories-first --full-time --color --gnu
Strict --gnu / F00_GNU=1: no icons/git decorations, classic sort, script-safe.
Cargo features
| Feature | Default | Description |
|---|---|---|
git |
yes | Git status column |
archives |
yes | zip/tar listing |
tui |
yes | --browse / --tui |
io-uring |
yes | Linux batch metadata via io_uring (no-op off Linux) |
plugins |
no | Dynamic plugin host (--list-plugins) |
Configuration
Unix: ~/.config/f00/config.toml (or $F00_CONFIG / --config)
[]
= false
= false
= true
= "auto" # auto | always | never (bool true/false also accepted)
= "auto"
= true
= true
Crates
| Crate | Role |
|---|---|
f00-core |
readdir, sort, filter, ignore files |
f00-format |
long/columns/tree/json/csv, quoting, colors |
f00-compat |
GNU helpers |
f00-git |
git status |
f00-archive |
zip/tar virtual listing |
f00-tui |
interactive browser |
f00-plugin |
plugin host ABI |
f00-plugin-hello |
example cdylib plugin |
f00 (path crates/f00-cli) |
binary f00 (crates.io) |
Building from source
Comparison
GNU ls |
eza | lsd | f00 | |
|---|---|---|---|---|
| Language | C | Rust | Rust | Rust |
| Full coreutils flags | Native | Partial | Partial | Shipped (+ --gnu) |
| Icons / git | No | Yes | Yes | Yes |
| TUI | No | No | No | Yes |
| Archives | No | No | No | Yes |
| Windows | Weak | Strong | Strong | First-class |
License
MIT OR Apache-2.0
Links
- Issues: https://github.com/theesfeld/f00/issues
- Design:
docs/superpowers/specs/2026-07-16-f00-design.md - Sync:
docs/SYNC.md