RepoMicrosoftMicrosoftpublished May 15, 2026seen 5d

microsoft/coreutils

Rust

Open original ↗

Captured source

source ↗
published May 15, 2026seen 5dcaptured 14hhttp 200method plain

microsoft/coreutils

Description: Coreutils for Windows: Installer & Packaging

Language: Rust

License: MIT

Stars: 3854

Forks: 62

Open issues: 54

Created: 2026-05-15T05:42:32Z

Pushed: 2026-06-10T22:19:30Z

Default branch: main

Fork: no

Archived: no

README: Coreutils for Windows

UNIX-style core utilities for Windows. The same commands and pipelines you use on Linux, macOS, and WSL - natively.

Install · Shell conflicts · Windows caveats · Contributing

---

A Microsoft-maintained build of uutils/coreutils, findutils, and grep packaged as a single multi-call binary for Windows. The goal is to make moving between Linux, macOS, WSL, containers, and Windows frictionless: the same commands, flags, and pipelines work the same way, so existing scripts carry over without translation.

Each command supports the standard --help flag for full syntax and options.

This project is in preview.

Install

Install Coreutils for Windows with WinGet:

winget install Microsoft.Coreutils

Or grab the latest build from our Release Page.

Creating custom alias

  • PowerShell: Set-Alias ll 'ls' or a function in your $PROFILE for arguments, e.g. function ll { ls -la --color=auto @args }
  • CMD: doskey ll=ls -la $*

> [!WARNING] > Using PowerShell aliases will cause binary stream compatibility. Some utilities will not work when piped (e.g. xargs, find, ...)

Shell conflicts

> [!NOTE] > Any command not mentioned is included in this suite. The following only lists conflicts.

> [!WARNING] > PowerShell 7.4 or later is required. > PowerShell 7.6 or later is recommended for ~ support.

Several commands share names with built-ins in CMD and PowerShell. Whether the Coreutils version runs depends on the shell, the PATH order, and (for PowerShell) the alias table.

Legend: ✅ ships and works · ⚠️ ships but conflicts with a built-in · 🛑 not shipped

| Command | CMD | PowerShell 7.4+ | Notes | | ---------- | :--: | :-------------: | ----- | | cat | ✅ | ⚠️ | | | cp | ✅ | ⚠️ | | | date | ⚠️ | ⚠️ | | | dir | 🛑 | 🛑 | Conflicts with the built-in DOS command | | echo | ⚠️ | ⚠️ | | | expand | 🛑 | 🛑 | Conflicts with the built-in DOS command | | find | ✅ | ✅ | Integrated port of the original DOS command | | hostname | ✅ | ✅ | Superset of the Windows built-in | | kill | 🛑 | 🛑 | Unavailable due to lack of signals on Windows; Implementing a form of SIGTERM/SIGKILL may be possible in the future however | | ls | ✅ | ⚠️ | | | mkdir | ⚠️ | ⚠️ | | | more | 🛑 | 🛑 | Conflicts with the built-in DOS command (consider edit as an alternative) | | mv | ✅ | ⚠️ | | | pwd | ✅ | ⚠️ | | | rm | ✅ | ⚠️ | | | rmdir | ⚠️ | ⚠️ | | | sleep | ✅ | ⚠️ | | | sort | ✅ | ⚠️ | Integrated port of the original DOS command | | tee | ✅ | ⚠️ | | | timeout | 🛑 | 🛑 | Relies on kill's functionality | | uptime | ✅ | ⚠️ | | | whoami | 🛑 | 🛑 | Conflicts with the built-in Windows command |

Windows caveats

| Difference | Detail | | --------------------- | ------ | | CRLF line endings | Windows text files often use CRLF (\r\n). Most utilities handle this transparently, but byte-oriented behavior can still observe the \r; for example, uniq may treat the final line as different from a preceding duplicate if the input uses CRLF and the final line has no trailing newline. | | No `/dev/null` | Use NUL instead, for example find . -name "*.log" > NUL | | No POSIX signals | Signals such as SIGHUP, SIGPIPE, and SIGUSR aren't available. Ctrl+C (SIGINT) works as expected. | | Path separators | Both / and \ are accepted. Some utilities produce \-separated output, which can affect downstream piping. | | File permissions | Windows uses ACLs, not POSIX permission bits. Permission-based predicates (for example find -perm) may behave differently or be unavailable. | | Symbolic links | Reading existing symbolic links works without elevation. Creating new symbolic links requires Developer Mode (**Settings > System > Advanced**) or an elevated terminal. |

PowerShell Command Parsing

The installer integrates itself with interactive PowerShell sessions via PSReadLine. It ensures that quoted expression behave somewhat like they do under UNIX shells or CMD: echo *.txt will then print a number of file names, while echo '*.txt' will print "*.txt" literally.

There are two shortcomings, however:

  • PowerShell's escape character is still \`, not \\

While you may write find . \( -foo -bar \) with Bash, you still need to write `find . ( -foo -bar )` in PowerShell.

  • Get-Command ls, Get-Help ls, etc., will still show ls, etc., as builtin commands

Due to limitations around PSNativeCommandPreserveBytePipe we cannot integrate ourselves in a more robust way with PowerShell.

Intentionally dropped

Commands that exist upstream but aren't shipped here because they rely on POSIX-only concepts, would break existing Windows scripts, or simply aren't useful on Windows.

  • dd: Perhaps useful in the future.
  • dircolors, shred, sync, uname: Not particularly useful on Windows.
  • chcon, chgrp, chmod, chown, chroot, groups, hostid, id, install,

logname, mkfifo, mknod, nice, nohup, pinky, runcon, stdbuf, stty, tty, users, who: POSIX-only concepts unavailable on Windows.

Contributing

Bug reports and pull requests are welcome. See [CONTRIBUTING.md](./CONTRIBUTING.md) for details on the repo layout and how changes flow between this repo and the upstream uutils projects.

Notability

notability 7.0/10

Major Rust coreutils release, strong HN and GitHub traction