HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
uutils
coreutils
Rust2013–2026
uutils / coreutils

coreutils

Cross-platform Rust rewrite of the GNU coreutils

138Distinct people
162Mentions
1Explicit recommenders
24.4KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Cross-platform Rust rewrite of the GNU coreutils

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

Link to the actual implementation: https://github.com/uutils/coreutils I love these re-implementations of things. Technology advances by the continued reinvention of the wheel,…

enriquto used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 6:01:08 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year162 dated mentions

Observed mentions: 2013-11-29 22:30:28 UTC to 2026-10-04 10:18:24 UTC.

01020302013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments20132014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 6 mentions; 1 submissions, 5 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 7 mentions; 0 submissions, 7 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 8 mentions; 1 submissions, 7 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 12 mentions; 0 submissions, 12 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 17 mentions; 1 submissions, 16 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 23 mentions; 6 submissions, 17 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 10 mentions; 1 submissions, 9 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 9 mentions; 1 submissions, 8 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 10 mentions; 1 submissions, 9 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 28 mentions; 4 submissions, 24 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 26 mentions; 5 submissions, 21 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC110
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC615
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC707
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC817
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC12012
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC303
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC202
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC17116
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC23617
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC1019
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC918
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC1019
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC28424
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC26521

From the project README

An excerpt from the repository, fetched Nov 12, 2026.

Read the project’s introduction
uutils coreutils uutils coreutils is a cross-platform reimplementation of the GNU coreutils in Rust. While all programs have been implemented, some options might be missing or different behavior might be experienced. We provide prebuilt binaries, manpages, and shell completions from main branch at https://github.com/uutils/coreutils/releases/tag/latest-commit . The latest stable tag https://github.com/uutils/coreutils/releases/latest also exists for reproducible products and packagers. Bug reporters should use binary from latest commit. Minimal compatible glibc version is same with ubuntu-latest runner. Use coreutils-*-musl if coreutils-*-gnu is not compatible with your system. Goals uutils coreutils aims to be a drop-in replacement for the GNU utils. Differences with GNU are treated as bugs. Our key objectives include: Matching GNU's output (stdout and error code) exactly Better error messages: at a terminal, a parse error is shown as a compiler-style report with a caret under the argument at fault, where GNU prints a single line (see error diagnostics); scripts and pipes still get the plain GNU message Providing comprehensive internationalization support (UTF-8) Continuously improving performance; significant slowdowns relative to other coreutils implementations are treated as bugs Extensions when relevant (example: --progress) uutils aims to work on as many platforms as possible, to be able to use the same utils on Linux, macOS, *BSD, Windows, WASI and other platforms. This ensures, for example, that scripts can be easily transferred between platforms. uutils coreutils ships by default on Ubuntu since version 25.10. Documentation uutils has both user and developer documentation available: User Manual Developer Documentation Both can also be generated locally, the instructions for that can be found in the coreutils docs repository. Use weblate/rust-coreutils to translate the Rust coreutils into your language. You can try the utilities in your browser through the WebAssembly playground, without installing anything. Requirements Rust (cargo, rustc) GNU Make (optional) Rust Version uutils follows Rust's release channels and is tested against stable, beta and nightly. Building There are currently two methods to build the uutils binaries: either Cargo or GNU Make. Building the full package, including all documentation, requires both Cargo and GNU Make on a Unix platform. For either method, we first need to fetch the repository: git clone https://github.com/uutils/coreutils cd coreutils Cargo Building uutils using Cargo is easy because the process is the same as for every other Rust program: cargo build --release Replace --release with --profile=release-small to optimize binary size. This command builds the most portable common core set of uutils into a multicall (BusyBox-type) binary, named 'coreutils', on most Rust-supported platforms. Additional platform-specific uutils are often available. Building these expanded sets of uutils for a platform (on that platform) is as simple as specifying it as a feature: cargo build --release --features windows # or ... cargo build --release --features unix # or ... cargo build --release --target wasm32-wasip1 --no-default-features --features feat_wasm To build SELinux-specific features, including chcon and runcon, ensure that libselinux and libclang are installed on your system. Then, run the following command: cargo build --release --features unix,feat_selinux To speed up the checksum utilities (md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, and cksum) by using OpenSSL's libcrypto instead of the pure-Rust digest crates, enable the openssl feature: cargo build --release --features openssl By default OpenSSL is built from source and statically linked into the binary, so no runtime dependency on system libcrypto/libssl is added. To link dynamically against the system libcrypto instead, set OPENSSL_NO_VENDOR=1 at build time. MinGW (Windows) needs OPENSSL_STATIC=0 too for dynamic linkage. The speedup is largest on CPUs without SHA-NI hardware acceleration. aws-lc backend is used on MSVC. Setting AWS_LC_SYS_NO_JITTER_ENTROPY=1 at build time is recommended to reduce size of binary. If you don't want to build every utility available on your platform into the final binary, you can also specify which ones you want to build manually. For example: cargo build --features "base32 cat echo rm" --no-default-features If you want to build the utilities as individual binaries, that is also possible: cargo build --release --bins --workspace --exclude coreutils --exclude uu_runcon --exclude uu_chcon Each utility is contained in its own package within the main repository, named "uu_UTILNAME". To build selected individual utilities, use the --package [aka -p] option. For example: cargo build -p uu_base32 -p uu_cat -p uu_echo -p uu_rm GNU Make Building using make is a simple process as well. To simply build all available utilities (with debug profile): make In release mode: make PROFILE=release To build all but a few of the available utilities: make SKIP_UTILS='UTILITY_1 UTILITY_2' To build only a few of the available utilities: make UTILS='UTILITY_1 UTILITY_2' Installation Install with Cargo Likewise, installing can simply be done using: cargo install --path . --locked This command will install uutils into Cargo's bin folder (e.g. $HOME/.cargo/bin). This does not install files necessary for shell completion or manpages. For manpages or shell completion to work, use GNU Make or see Manually install shell completions/Manually install manpages. Install with GNU Make To install all available utilities (PROFILE=release by default): make install To install using sudo switch -E must be used: sudo -E make install To install all but a few of the available utilities: make SKIP_UTILS='UTILITY_1 UTILITY_2' install To install only a few of the available utilities: make UTILS='UTILITY_1 UTILITY_2' install To install every program with a prefix (e.g. u
Read the full README on GitHub

What Hacker News says

9 sources
I thought this was an interesting question, so I just compared GNU coreutils [1] and the uutils/coreutils Rust implementation [2]. I've never built either of these projects before, but I was able to easily build them both within a few minutes. I think they're of comparable size: uutils/coreutils has 102 coreutils programs, whereas GNU coreutils has 109 programs. And I liked your phrasing of testing the "same programming tasks": I'm sure that these projects have different implementation styles and philosophies, but at the end of the day they're both trying to implement a similar set of utilities. My hardware is an 11th gen Intel i7 (4-core, 8-thread) laptop. I included time to build but did excluded time to fetch dependencies. I measured real (wall) time and user time with time(1). I compiled clean release builds in both cases (I think). H
Read the rest
ere's what I found: uutils/coreutils: I fetched dependencies (`cargo fetch`) ahead of time, then just ran `time cargo build --release` to build everything. This took 1m37s wall time, 4m19s user time. It looked like about half of that time was spent compiling the `coreutils` multicall (Busybox-style) binary itself, after compiling all the individual `uu_*` utilities (`uu_cat`, etc.). GNU coreutils: I fetched dependencies (`git submodule update --init --recursive`) ahead of time, then read `README-hacking`, which indicates a three-step build process: time ./bootstrap: 2m42s wall time, 4m32s user time time ./configure: 0m36s wall time, 0m21s user time time make -j8: 0m21s wall time, 2m24s user time I don't know exactly what ./bootstrap is doing? It's a 1500-line shell script. It does seem to download pofiles at the start, so knock 10s off its runtime. A lot of its time seems to be spent in gnulib-tool(1); it runs aclocal(1) and m4(1) near the end, but I didn't notice it running cc(1). (I'm just watching top.) Maybe someone who knows this codebase better can comment how to fairly compare these. So, if we're measuring "time for clean release build on a new dev's machine (not including network fetches)", we're looking at ~200s for GNU coreutils and 97s for uutils/coreutils. If we discount ./bootstrap for whatever reason, that goes down to 57s vs. 97s. Either way, it seems within a factor of roughly 2, with the winner going one way or another depending on how you count. Methodology comments welcome. [1]: https://www.gnu.org/software/coreutils/#source [2]: https://github.com/uutils/coreutils
In Committing to Rust for Kernel Code
I think you’re conflating different projects. There are projects that aim for a better user experience, with better command line interface, defaults, performance and UI. These are of course breaking changes and the programs can’t be used as drop in replacements. Some examples are - ls => exa (https://github.com/ogham/exa) - grep => ripgrep (https://github.com/BurntSushi/ripgrep) - cat => bat (https://github.com/sharkdp/bat) - tree => broot (https://github.com/Canop/broot) The person you’re replying to was speaking of a different project - uutils (https://github.com/uutils/coreutils). These are drop in replacements with identical interfaces (modulo bugs).
In Bsdutils: Alternative to GNU coreutils using software from FreeBSD
> It's that those devs get to dictate which platforms are even capable of making use of the software written in those languages. Adding other tiers is welcomed. Take a look at the supported platforms (https://doc.rust-lang.org/nightly/rustc/platform-support.htm...) and see if there's a platform you'd like to target that isn't a tier 3 target at least. There's HaikuOS, PlayStation1 etc. I'm on a Tier 2 platform myself and I'm really happy. If you'd like even more platforms, there's an ongoing project to add a GCC backend to rustc (https://blog.antoyo.xyz/rustc_codegen_gcc-progress-report-20). > if it can make all the existing code written in that language suddenly available for the new platform, that platform instantly becomes orders of magnitude more useful and powerful. I agree with this, but creating a front end that can actually compi
Read the rest
le all existing code correctly is a massive task. If the compiler is modular enough, you should be able to contribute just a backend, rather than reimplementing a frontend. I'm strongly against only the frontend reimplementation, because it's no longer clear what "valid" Rust code is. In summary - I completely agree with the importance of targeting niche platforms. I think supporting multiple backends (LLVM now, libgccjit and Cranelift in future) gets us there without fracturing the ecosystem. > but easier than having to reimplement a whole userland from scratch. Probably. But once it's reimplemented (https://github.com/uutils/coreutils) I think it's really cool you can run get binaries for Linux, macOS and Windows with one build command.
In Curl audit: How a joke led to significant findings
> Looking at the source code, it is impressive that this re-implementation is essentially complete! Look at this: https://github.com/uutils/coreutils/tree/main/src/uu It's only missing some obscure and fringe things. It's not just a matter of having all the individual tools, it's a matter of having them be functionally complete and behaving either the same as GNU or POSIX - note the graph part way down the readme that talks about having only slightly better than half of the tests passing. And the tests probably aren't truly comprehensive, especially for things that people didn't realize were implementation specific or non-guaranteed behaviors. It's good to see them making progress, I just want to someone temper the idea that they're close to done.
In Reimplementing the Coreutils in a modern language (Rust)
enriquto·Feb 13, 2023Recommendation phrase
Link to the actual implementation: https://github.com/uutils/coreutils I love these re-implementations of things. Technology advances by the continued reinvention of the wheel, and even if some efforts end up being of merely didactic interest, it is still important to make them. Coreutils is one of the pillars of our civilization, and thus it should be re-implemented several times on many programming languages. Looking at the source code, it is impressive that this re-implementation is essentially complete! Look at this: https://github.com/uutils/coreutils/tree/main/src/uu It's only missing some obscure and fringe things. An important feature of GNU coreutils is, somewhat sadly, not reproduced by this re-implementation: the copyleft license of the original implementation. This takes out some freedom of the users. For example, when I
Read the rest
use GNU "ls", I know that I can always look at its source code and change it to my whim (or hire a programmer to change it for me). However, if I use uutils "ls", this is not necessarily the case, for it may be a re-distribution by some middle-men that has modified it slightly and does not provide the source code. I suppose that the removal of this freedom is accidental, because it was a nice thing.
In Reimplementing the Coreutils in a modern language (Rust)

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.