uutils coreutils
A cross-platform Rust reimplementation of the GNU coreutils — ls, cat, cp, mv, rm, and over 100 more, all in a single project.
uutils coreutils is a cross-platform reimplementation of the GNU coreutils
suite in Rust. It provides over 100 standard Unix utilities — ls, cat, cp,
mv, rm, wc, sort, head, tail, chmod, chown, and many more — all
written in safe Rust, with the goal of being a drop-in replacement for the GNU
versions while also running natively on Windows.
Features
- Over 100 utilities — covers virtually the entire GNU coreutils suite, plus some extras
- Cross-platform — works on Linux, macOS, and Windows without a POSIX compatibility layer
- Drop-in compatible — behaves like the GNU versions and passes the vast majority of the GNU test suite
- Single binary option — can be compiled as one multicall binary (like BusyBox) to reduce installation footprint
- Safety — written in safe Rust, eliminating entire classes of memory bugs present in the C originals
- Actively tested — the project runs the upstream GNU coreutils test suite and tracks compatibility regressions
Installation
Install all utilities at once via Cargo:
cargo install coreutils
Or install individual utilities:
cargo install coreutils --features feat_require_unix_ls
Via package managers:
# Debian / Ubuntu (Debian 13+)
apt install uutils-coreutils
# Fedora
dnf install uutils-coreutils
# macOS (replaces macOS BSD coreutils with GNU-compatible versions)
brew install uutils-coreutils
# Arch Linux (AUR)
paru -S uutils-coreutils
# Nix
nix-env -iA nixpkgs.uutils-coreutils-noprefix
Linux note: On Linux,
uutils-coreutilscan be used as a direct replacement for the system GNU coreutils — the binaries are installed without a prefix and can shadow the system tools. On macOS, Homebrew installs them with auu-prefix (e.g.uuls,uucat) to avoid conflicts with the BSD system utilities; you opt in by adjusting yourPATH(see below).
Usage
When installed as a multicall binary, use it just like any standard Unix tool:
# Use as individual commands (if installed with no prefix)
ls -lah
cat file.txt
wc -l src/*.rs
# Or via the multicall binary explicitly
coreutils ls -lah
coreutils wc -l src/*.rs
On macOS, where the built-in tools are BSD variants with different flags from
GNU, replacing them with uutils gives you GNU-compatible behaviour everywhere:
# Add to your shell config
export PATH="$(brew --prefix)/opt/uutils-coreutils/libexec/uubin:$PATH"Why it matters
The GNU coreutils are written in C and have accumulated decades of platform-specific workarounds, subtle memory management issues, and inconsistent behaviour across operating systems. The uutils project aims to:
- Improve safety — Rust's ownership model eliminates buffer overflows and use-after-free bugs
- Improve portability — a single codebase works identically on Linux, macOS, and Windows
- Modernise the codebase — clean, readable Rust code that is easier to audit and contribute to
For most day-to-day usage, uutils coreutils is a transparent replacement. For
scripting and CI environments, it offers a reliable, consistent baseline across
all platforms.