coreutils

uutils·uutils.coreutils

Cross-platform Rust rewrite of the GNU coreutils

winget install --id uutils.coreutils --exact --source winget

Latest 0.11.0·August 30, 2026

Release Notes

Rust Coreutils 0.11.0 Release: We are happy to announce the release of Rust Coreutils 0.11.0 - a release focused on error messages, performance and GNU compatibility. The big change is a new diagnostic engine built on ariadne. When a chmod mode, a cut list, a sort key or a tr set fails to parse, we now echo the arguments back with a caret under the character at fault, like a compiler does. See our blog post for more information: https://uutils.org/blog/2026-08-error-diagnostics/ Example with cut: or test: PGO release builds are enabled for Linux, macOS and Windows (up to 31% faster), and a lot of per-utility optimization work landed on top of that. We also now treat a utility being significantly slower than GNU as a bug. We continued to improve the GNU compatibility and we are now at 653 passing, 22 failing, 0 errors.

GNU Test Suite Compatibility: ──────┬──────┬──────┬───────────────────────┬──────────────┬──────────────┬───────────────────────── Result│0.10.0│0.11.0│Change 0.10.0 to 0.11.0│% Total 0.10.0│% Total 0.11.0│% Change 0.10.0 to 0.11.0 ──────┼──────┼──────┼───────────────────────┼──────────────┼──────────────┼───────────────────────── Pass │645 │653 │+8 │94.44% │95.33% │+0.89% ──────┼──────┼──────┼───────────────────────┼──────────────┼──────────────┼───────────────────────── Skip │9 │10 │+1 │1.32% │1.46% │+0.14% ──────┼──────┼──────┼───────────────────────┼──────────────┼──────────────┼───────────────────────── Fail │28 │22 │-6 │4.10% │3.21% │-0.89% ──────┼──────┼──────┼───────────────────────┼──────────────┼──────────────┼───────────────────────── Error │1 │0 │-1 │0.15% │0% │-0.15% ──────┼──────┼──────┼───────────────────────┼──────────────┼──────────────┼───────────────────────── Total │683 │685 │+2 (new tests) │ │ │ ──────┴──────┴──────┴───────────────────────┴──────────────┴──────────────┴─────────────────────────

Note: 653 passing and 23 failing are both records for us, and this is the first release with no erroring test. Note that the suite grew by 2 tests this cycle (local backport). We also list the tests excluded from the pass/fail percentages now.

Highlights:

  • Modern Error Diagnostics (new)
    • A new diagnostic engine based on ariadne. When stderr is a terminal, a parse error is printed as a report: the arguments are echoed back as a source line, a caret marks the culprit and a help line explains the syntax. See the blog post for before/after examples
    • Carets landed in chmod, mkdir, mkfifo, mknod, install, tr, expr, sort, numfmt, cut, env, head, tail, truncate, split, shred, stdbuf, od, seq, dd, stat, join, csplit, ls, df and du
    • A caret can point inside a quoted argument and at a single character. The reports are localized (format, checksum and advice strings) and still print the usual Try '... --help' hint. A label is only added when it says something useful
    • UUTILS_DIAG controls the behavior, and the caret rendering can be compiled out for size-constrained builds
    • Diagnostics are written in a single stderr call, so concurrent writers cannot interleave them
  • Performance
    • PGO (profile-guided optimization) release builds: up to 31% faster - now enabled for the published Linux, macOS and Windows artifacts too.
    • cp: opens the file only once (+32.93%) and reuses the already-open destination fd when a reflink clone falls back
    • join: 1.37x faster on paired input, 2.5x faster than GNU, by skipping the locale comparison when it cannot change the result
    • od --skip-bytes uses splice(2) on non-seekable input; tac uses fast_copy; dd no longer faults in the whole copy buffer before reading and page-aligns its read buffer
    • Fewer allocations and syscalls in ptx (+4% via fxhash, plus fewer per-word allocations), nl (hoisted per-line prefix), tail (no double allocation per reverse chunk, no stat), expand/unexpand (no stat/is_dir), numfmt and sort
    • New benchmarks for ptx, basenc and the numfmt stdin path
    • A utility being significantly slower than GNU is now considered a bug - please report it as one
  • GNU Compatibility
    • 653 passing GNU tests (+8), 23 failures (-6) and no erroring test
    • New GNU-matching options: uname -A/--all-labeled, cut -F and --whitespace-delimited, pr --columns/--join-lines/-f alias and an optional argument for -n
    • Behavior fixes in pr (page length of exactly 10, columns that do not divide evenly, -e at the end of a cluster), numfmt (leading +, scientific notation), uniq/truncate/paste (a repeated option overrides the earlier one), join -o accumulating fields, id group ordering, unexpand/expand tab-list separators, mkdir EEXIST, more -f/-l, fold widths, sort -t=, stat nanosecond timestamps and Block size, od 16 significant digits, date trailing timezones
    • A new gnu/usage_vs_refs.sh check verifies that every option we document also appears in GNU's texi docs
    • More error messages carry the real OS text instead of a stripped or made up one (rm, env, od, chroot, stdbuf, tee, cut, date, tsort, pathchk, sort)
  • Security Hardening
    • mv/cp: xattr TOCTOU fixed by moving to file-descriptor-based operations
    • rm: no longer follows a symlink swapped in at the -r operand
    • chmod: uses fchmodat for recursive mode changes and no longer follows in-tree symlinks with -R --reference
    • cp: does not chmod through the destination symlink; mv does not put a symlink in its target's hardlink group
    • stdbuf: fixed a temporary-directory leak
  • Robustness: Anti-Panic & Anti-Hang
    • Hangs fixed: split endless loop, yes deadlock, sort Lines fuse when a chunk boundary lands exactly at EOF
    • Panics and aborts fixed in stat and csplit on /dev/full, ls with an invalid QUOTING_STYLE on unwritable stderr, od on large ASCII dump widths, printf on large numeric and %s/%c field widths, nl with -w i32::MAX (rejection plus a 32-bit OOM fix), pr and csplit integer overflow, dd u64 wraparound, touch leap-second year overflow, tail -c +N past the seek limit, tac SIGBUS on a truncated mmap, who -q stdout write errors
    • uucore::parse_size no longer overflows on a large % size
  • Cross-platform Reach
    • Windows: kill and uptime implementations, and test -ef, -t, -h/-L, -r, -w, -x
    • WASI: touch timestamps, cp symlinks, expr, cleaned-up core platform abstractions and cat integration coverage
    • df got a fallback statfs path using the mount table; uptime dropped its /proc dependency on more targets; stty and chgrp are now gated by target support; better iOS and Fuchsia handling
  • Dependency Diet
    • Dropped byteorder, same-file, filetime, winapi-util, file_diff, mockstream, binary-heap-plus, compare, arrayref, exacl and dns-lookup in favor of std, rustix and windows-sys
  • Internationalization
    • Symbolic mode parsing errors, the chmod --verbose messages and the new diagnostic strings are now translatable
    • ls sorts names using locale-aware collation, comm compares lines with the locale collation, nl supports multibyte one-character section delimiters and cut handles multibyte fields, bytes and delimiters correctly
    • uucore rebuilds its embedded locales when the consumer's dependencies change
  • Contributions: This release landed 358 pull requests from 26 new contributors. We also passed 1000 people having contributed to uutils coreutils. Per our activity tracking, August 2026 was our busiest month so far, with 476 commits from 57 authors

Call to Action: Try it in your browser - Online Playground powered by WebAssembly Help us translate - Contribute to Rust Coreutils on Weblate Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils

What's Changed

base32

  • base32: simplify loop by @oech3 in #13915

basename

  • basename: simplify handling missing operand by @oech3 in #14202

basenc

  • basenc: add benchmark by @myunbin in #14022

cat

  • cat: remove unnecessary impl by @oech3 in #13819
  • cat: reduce nest & avoid accessing by index by @oech3 in #13820
  • cat: catch 2nd+ splice's error by @oech3 in #13847
  • cat: always exit with 1 on error by @mtvb in #14216

chmod

  • chmod: only report umask-curtailed modes for option-like operands by @dhruv-15-03 in #13731
  • chmod: don't follow in-tree symlinks with -R --reference by @Angadi56 in #13842
  • chmod: translate chmod-verbose-neither-changed much more by @oech3 in #13872
  • chmod: use the libc fchmodat symbol for recursive mode changes by @sylvestre in #14121
  • chmod: remove duplicate code handling symlinks by @cakebaker in #13873
  • chmod: simplify a nested match by @Devel08 in #14234

chroot

  • chroot: strip errno by @oech3 in #14114
  • chroot: extract proper error message from OS by @oech3 in #13884

cksum

  • cksum: do not guard openssl by unix for MinGW by @oech3 in #13821
  • cksum: fix typo in comment by @cakebaker in #13871

comm

  • test(comm): enable --check-order/--nocheck-order order-checking tests by @AH64-dll in #13969
  • comm: add missing error-write locale by @Devel08 in #14140
  • comm: compare lines with the locale collation by @luantaraschi in #14047

cp

  • cp: don't chmod through the destination symlink by @Angadi56 in #13443
  • cp: support symlinks on WASI by @DePasqualeOrg in #13804
  • cp: reject --attributes-only self-copies (#13161) by @alexchen-sys in #13894
  • cp: use default suffix when backup suffix is empty by @TheAdamWarlock in #13966
  • cp: honor --reflink=never on macOS by @nagendramohan in #14076
  • tests_cp.rs: replace filetime by std by @oech3 in #14174
  • cp: label the destination of -Z when it is named relatively by @sylvestre in #14161
  • cp: reuse the open dest fd when a reflink clone falls back by @sylvestre in #14136
  • tests_cp.rs: ensure error of ioctl is catched when --reflink=always by @oech3 in #14270
  • test_cp.rs: fix error message of ficlone on musl by @oech3 in #14273
  • cp: open file only once (+32.93%) + add tests for mv & cp by @sylvestre in #14272

csplit

Installer type: zip

x86—3AA0D2DC2AED0D487424B16239ECD12624C0C73AECBFBE9F3A9FE040BBB9277F
x64—622E4A764332EDBE8B4F6D9500938E649857A20A9A7F7D4FEA0487D479EB9B9E
arm64—6441A8326C8C210ACFFA23231B5B61C65A0F3BFE4D9EC45009C21CBA6689AB31

Details

Homepage
https://github.com/uutils/coreutils
License
MIT
Publisher
uutils
Support
https://github.com/uutils/coreutils/issues
Copyright
Copyright (c) uutils developers

Tags

busyboxcommand-line-toolcoreutilscross-platformgnu-coreutilsrust

Older versions (15)

0.10.0
x86—300CF7BF25E8EA16EDD0CAAE1CD04430F33451F69764960792491D624C24B52A
x64—0510B85218E416E249C3DAF6EBDC2C177F4AF114A9DC4A3752CEAF35BD2DC567
arm64—F23CD19A54A3E0114ADD0E46E3518C4F526CC0445D2556366F0BF16CEE759CDE
0.9.0
x86—8EA2031E7314E9CF917A000ECC7F9E3AE73BB2CE653218C3FDE0C30BDD61B658
x64—77B4CAD20258B654A75C4CDE7F4F7033EA896A71A700F68072EE44599C1D76D4
arm64—C792E3949A6A3D91F944B765AAB6F0B62CF213E886B347DBB81C66D7E0499D04
0.8.0
x86—2FFE88B9D81FAB6A1625A5F02737C8AB164741447403B92CB84377AC37E1BB39
x64—DB464CF2A6ECBFD42C85F46ED2D749BE574DF4DF47FECA1F08988FD760F324F3
arm64—1DFA62F18B64C70B664936B06FB1BE20F0F6AFA9FF041DD95DDA629E987435A9
0.7.0
x86—1D0ACE9CE2FF51E2BB611F543EC6A4C887FB35B167B725815EDD0068711589F5
x64—DF878E29FC738BC4273E85C9D2C35AB898E31568021E6BAF1C330C7961943C8F
arm64—372323492402F3249876599F1FF99AAD9BD2AECAA217B1CB146608EF58D3ED4B
0.6.0
x86—4B95738775DE79250AF2CE4F1CA2ED88A31B37910B87B2B6F9F317755C9C1240
x64—F223058A51E8A2A4B92D9F1A1B2954F7A02B6D0F42E4A7E0413FCDB93BE2E287
arm64—7183BD5AFF648B76517182E50D94819EFDAEDE637650F5B9AD9117C171C4EEBF
0.5.0
x86—99C60F408F9B2BA243A6AE31E635CBC62A319573A103D56C154AE038479BA7E2
x64—BA0A319A2ACF0AB2C1786FB75A246090D905F49762638E903B4F8FF3195B72BE
arm64—96538E06F0092B23CB0F368426FC2B1132F494CE7195CCC53E0FC8071436F73C
0.4.0
x86—52FDA51612B67DA59B3D3E55988D38B8A7E3468950538AF410AAA2662AFF5DDF
x64—3D22D9371118F3F6B2DBBC98D21CBFEE5D3A752732AF5B1EFB456C6410095CDA
arm64—82B22FE1CA187D9AA136937AA52F2A485E40A98816F6FBECC6655199BF783198
0.3.0
x86—ADB01EA026C46FC1E2D6D998047D980B63ABF49B54F34DE7C5FC94FC7611DFEE
x64—BCB447C03BC8E15AE78A749586EDDF238F4C6D9576C1B4DE6B6077FA3BCE2A4F
arm64—E3DADC0AF59461B2DA53A7D9B70C930009183963CFBF34B0D3B9F5C5451F7F0A
0.2.2
x86—A68867D6E21BB6212C544797C1E268AF8C40D5DD1BC03DFD8DBA6D70868F8F9E
x64—45922F4F43A7B4CC1191D52548201B244343CFB3C27E7761F34CE654E4CFB1B1
arm64—C248AC5C0F0DCA0971DFDA1042C3DB6B9E0D498D0666192922C51F358CCBFF4A
0.2.0
x86—814234E3129A68532BC94249744EC4FBDA50E00FC9B47AE00CCF77D5BF2E4C5B
x64—5B1B8D6E88B3ED8D3AF1CA7B180B3D99674751286E797F9735C367D680CFC634
arm64—ED282FBB5A500574050E2A0C9E668D8EA13A7BE4968625D2BB0E5A5758DCB08C
0.1.0
x86—36EFC2D9295FFF72BAB4F8B87963A4EE8C0D83D008F145A273FAB967AA6D6AAE
x64—4FF3C7E5149ADE20A342487D1C09CC6CC63599AF6DFB28D2558B925780A72D82
arm64—9FAA0EC0F3DF47CAFA0A09FCEAD46DA28E2640B5FE1316AD9CB7E11F19050BD4
0.0.30
x86—8CFE11CD0CD043099AB4598D943F786A0B5727677D5F418F8525481EA3D26F10
x64—3931F570FF2665DB09B30614521712CC1D31426793E189A5DB704D2C40599BA9
arm64—30FE9A3363F86EF43F286E2A403DBB5CEDBBDAF9FEB9946CF74DD14A5656AABB
0.0.28
arm64—457BA14493BC2F843029B2A52CA7EA893DAD0A8A7F7359EF48329DFBE4057D6A
x86—A3ACE2B9111F7C6ADD567A251F772D181EADC95830AAD3BAB566BED48C3723C1
x64—34FAF03E8550B523AC74668AD65FB12730930C636370F828580309A426BA93E2
0.0.27
x86—EE79D64937BEE34265D36DE7EE06A51FE8BC98AF635726A291310FD45F73B297
x64—0C2E07FA1417E75687A05B9D577F67EEEDB5ECD0DC34BF40886E28E1E75BA15D
0.0.23
x86—81A05CD58BBB7301B6F331AF0416173424533C97665671C2951124512A2145A8
x64—6A09488F926F1462E6D80070473580B194534C3DD7E38E15DC6C4733DA46252E