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-coreutils can 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 a uu-prefix (e.g. uuls, uucat) to avoid conflicts with the BSD system utilities; you opt in by adjusting your PATH (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:

  1. Improve safety — Rust's ownership model eliminates buffer overflows and use-after-free bugs
  2. Improve portability — a single codebase works identically on Linux, macOS, and Windows
  3. 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.