Coreutils ships as a single multi-call binary that exposes each utility under its standard name (cat.exe, grep.exe, find.exe, and so on), giving you the everyday tools developers already use on other platforms to script, automate, and process text. For the full list, see Commands.
The goal is to remove friction when moving between Linux, macOS, WSL, containers, and Windows. The same commands, flags, and pipelines work the same way, so existing scripts and habits carry over without translation. Each command supports the standard --help flag for full syntax and options.
How it works
The utilities are implemented in Rust on top of the uutils/coreutils project – the same cross-platform reimplementation of GNU coreutils that ships in modern Linux distributions. Microsoft maintains a Windows-focused build that bundles coreutils, findutils (find, xargs), and a GNU-compatible grep together as a single package. It also includes integrated ports of the original DOS sort and find, so existing CMD scripts that rely on /switch-style syntax keep working alongside the UNIX-style versions. For details, see Shell conflicts.
For anyone looking to use familiar *nix tools on Windows, we've created an installer for you. It includes:
- The Rust rewrite of GNU Coreutils, uutils/coreutils
- Their accompanying FindUtils implementation, uutils/findutils
- As well as our newly written Grep implementation, uutils/grep
- A shim to ensure your existing DOS sort & find invocations continue to work
- And finally, a PowerShell wrapper allowing you to use glob patterns the way you do on other OS
- Our installer will give you various options. If you just want to try it out, please feel free to use winget: winget install Microsoft.Coreutils
What's New
Changes
- Updated coreutils, findutils, and grep
- Our coreutils fork also includes the following improvements (thanks to Alvaro Figueroa (@fede2cr)!):
- A fix for error messages in our fork
- A fix to avoid panics on non-UTF-8 inputs
- Hardlink detection for cp
- Support for PATHEXT
- Support for link and allocation counts for ls
- We hope to upstream these and all previous changes in the near term. (This has not happened earlier due to lack of time on my part.)
- Updated Inno Setup from 6.7.1 to 7.1.0
Bug Fixes
- Standard output is now flushed before exit (#162)
- Previously if you ran printf foo for instance, you could not see "foo", because it wasn't flushed.
- find / is no longer mistaken for the DOS variant of find (#150) (thanks arookieofc (@a-rookie-of-C-language)!)
- Uninstallation will no longer fail just because PowerShell profiles couldn't be updated (#74) (thanks arookieofc (@a-rookie-of-C-language)!)
- PowerShell profile symlinks are now preserved by the installer (#111) (thanks arookieofc (@a-rookie-of-C-language)!)
- Signed PowerShell profiles will now be left untouched (#171) (thanks Lili离 (@Uarz)!)

