Real Unix commands. Real Windows paths. One ~3 MB executable. No WSL · No Cygwin · No MSYS2 · No path-translation pain v1.0.0 stable is out. 🎉
💾 Install · ⚡ Demo · 🐂 niubash · 📦 WPM · 🆚 Compare · 📚 Docs · 中文
You're on Windows and you need grep -rn, sed -i, find -exec, xargs -0 — and every option so far is a compromise:
- WSL — 1 GB+ install, and a VM filesystem boundary between you and your files
- Cygwin — path-translation gymnastics and a 2–5 s startup
- GnuWin32 — abandoned in 2012, stuck at 60% compatibility
- uutils — a great Rust project, but ~100 commands and ~600 options
WinuxCmd skips the compromise. A single native Win32 executable that speaks GNU syntax on Windows paths: 169 commands, 1,827 options, 98% GNU compatibility — verified command-by-command against GNU Coreutils 9.11.
| 169 | 1,827 | 98% | 2,346 | ~3 MB |
| commands | options | GNU compat¹ | tests · 99.6% pass | zero-dependency binary |
¹ 22 commands / 56 differential test cases against GNU Coreutils 9.11 — full report.
# Every GNU flag you know, on real Windows paths
ls -la
grep -rn "TODO" src/
sed -i 's/http:/https:/g' config.ini
find . -name "*.tmp" -exec rm {} \;
# Full pipelines, zero setup — command links land on your PATH,
# so there are no prefixes and nothing to configure
find . -name "*.cpp" -print0 | xargs -0 wc -l
# And when a tool shouldn't be reimplemented, WPM installs the real thing
wpm install jq| Installer (recommended) | Grab WinuxCmd-<version>-x64-setup.exe (or the ARM64 setup) from GitHub Releases |
| Portable | Unzip WinuxCmd-<version>-win-x64.zip anywhere and add it to your PATH |
| Build from source | VS 2022 + CMake 3.30 + Ninja — see Building from source |
- 🪟 Native, not emulated — talks to Win32 APIs directly. Understands
C:\, UNC paths and NTFS ACLs (withcygpathandgetfaclfor bridging). No VM, no runtime DLLs, instant startup. - 🧠 GNU where it counts —
findalone implements 88 options (full expression parser,-exec/-execdir/-ok,-printf);grepships PCRE2;sedsupports in-place-iediting. - 📦 WPM built in — a package manager for the tools that shouldn't be reimplemented: jq, ripgrep, fd, fzf, bat, make, neovim, curl, wget…
- 🧪 Tested like it matters — 2,346 test cases across 178 test files, 99.6% pass rate, plus differential output testing against GNU Coreutils 9.11.
- ⚡ Small and fast — ~3 MB, zero dependencies, instant startup (Cygwin takes 2–5 s just to boot).
WinuxCmd gives Windows real Unix commands. niubash gives them a real bash language to live in — the same unixwin org, two halves of one workflow:
# In niubash (native bash on Windows — no WSL):
for f in *.log; do
grep -c ERROR "$f" | xargs -I{} echo "$f: {} errors"
done | sort -t: -k2 -rn | head -5- Real bash semantics —
if/for/functions/arrays/pipelines run on the rubash engine, green across the GNU Bash upstream test suite (86/86). - Agent-friendly —
niu -cis quiet and deterministic: no banners, stable stdout/stderr, exact exit codes. The shell your AI tooling already speaks. - Zero glue — niubash injects WinuxCmd's command links onto the
PATHat startup, sogrep,sedandfindabove are the real binaries you're looking at right now.
Ship WinuxCmd alone in a 3 MB exe, or drop in niubash (v1.0.0) and get the whole bash workflow.
wpm install jq # JSON processor
wpm install goawk # awk implementation
wpm install bsdtar # BSD tar
wpm install openssh # SSH client
wpm install make # GNU make
wpm install neovim # text editor
wpm install curl # URL transfer
wpm install wget # network downloader
wpm search json # discover packages
wpm list --all # see what's installedDetails in the WPM User Guide.
| Feature | WinuxCmd | uutils (Rust) | GnuWin32 | Cygwin | busybox |
|---|---|---|---|---|---|
| Commands | 169 | ~100 | ~90 | ~200 | ~300 |
| Options | 1,827 | ~600 | ~200 | Full | ~500 |
| GNU compat | 98% | 95% | 60% | 99% | 70% |
| Native Win32 | ✅ | ❌ | ✅ | ❌ | ❌ |
| Package manager | ✅ WPM | ❌ | ❌ | apt-cyg | ❌ |
| Test cases | 2,346 | ~2,000 | 0 | — | ~100 |
| Binary size | ~3 MB | ~5 MB | — | 1 GB+ | — |
| Startup | Instant | Instant | — | 2–5 s | — |
| Maintained | ✅ 2026 | ✅ | ❌ since 2012 | ✅ | ❌ |
Deep dive: vs uutils / GnuWin32 / Cygwin
| Aspect | WinuxCmd | uutils |
|---|---|---|
| Language | C++23 | Rust |
| Commands | 169 | ~100 |
| Options | 1,827 | ~600 |
| Binary size | ~3 MB | ~5 MB |
| Dependencies | None | Rust runtime |
| Build time | 2 min | 15 min |
| Package manager | WPM built-in | None |
| Aspect | WinuxCmd | GnuWin32 |
|---|---|---|
| Maintenance | Active | Abandoned |
| Last update | 2026 | 2012 |
| Windows support | Win10/11 | WinXP+ |
| Modern toolchain | C++23, CMake | C, autotools |
| Aspect | WinuxCmd | Cygwin |
|---|---|---|
| Install size | ~3 MB | 1 GB+ |
| Startup time | Instant | 2–5 s |
| Path handling | Native Windows | Unix emulation |
| Dependencies | None | MSYS2 runtime |
| Package manager | WPM | apt-cyg |
169 commands — full coverage table (click to expand)
| Category | Commands | Compat |
|---|---|---|
| File Ops | cp, mv, rm, ln, install, mkdir, rmdir, touch, unlink | 100% |
| Text Processing | cat, echo, head, tail, sort, uniq, cut, tr, wc, fold, fmt, join, comm | 100% |
| Directory Listing | ls, dir, vdir | 100% |
| Search | find, xargs | 100% |
| Crypto/Hash | base64, base32, basenc, md5sum, sha1sum, sha256sum, sha384sum, sha512sum, b2sum, cksum, sum | 100% |
| Date/Time | date, touch, time, timeout | 100% |
| System Info | uname, hostname, id, whoami, users, groups, nproc, uptime, arch | 100% |
| Disk | df, du, stat | 100% |
| Env/Expr | env, printenv, expr, seq, yes, true, false | 100% |
| Text Format | pr, nl, expand, unexpand, column, paste, tsort, ptx | 100% |
| File Info | file, stat, readlink, realpath, dirname, basename, pathchk, sync | 100% |
| Process | nice, nohup, stdbuf | 100% |
| Permissions | chmod, chown, chgrp, chroot | 95% |
| Other | shred, factor, kill, truncate, fmt, numfmt, mktemp, dircolors, sum, csplit, split | 100% |
| Command | Options | Features |
|---|---|---|
| find | 88 | Full expression parser, -exec/-execdir/-ok, -printf |
| grep | 49 | PCRE2 support, --color, --exclude patterns |
| sed | 17 | In-place editing, extended regex, --posix |
cal, column, hexdump, logger, tree, less, more, strings, rev, tsort, seq, sleep, nohup, watch, tput
ps, top, kill, killall, pgrep, pkill, pidof, pldd, free, uptime, renice, stdbuf, timeout
cygpath, dos2unix, unix2dos, d2u, u2d
hostname, id, who, pinky, stty, infocmp, tic, toe, locale, tput, getconf, getfacl, ldd, lsof, file, man
wpm (package manager), mpicalc, regtool, mkpasswd, mkgroup, mkfifo, mknod, clear, reset, tzset
| Test | WinuxCmd | uutils | GNU (WSL2) |
|---|---|---|---|
| cat (100 MB) | 0.8 s | 0.9 s | 0.7 s |
| sort (1M lines) | 2.1 s | 2.3 s | 1.9 s |
| grep (100 MB) | 1.2 s | 1.1 s | 1.0 s |
| find (10K files) | 0.3 s | 0.4 s | 0.2 s |
Consistently in the same league as uutils — and within ~10–15% of native GNU running under WSL2, without booting a VM.
Benchmark environment: Windows 11, Intel i7-13700K, 32 GB RAM, NVMe SSD
- 2,346 automated test cases across 178 test files — 99.6% pass rate
- 22 commands / 56 differential test cases executed against GNU Coreutils 9.11 (WSL2) with identical inputs — 98% pass rate (53/54; the only mismatch is
dir, which is Windows-columnar by design) - Automated GNU comparison:
scripts/compare_outputs.shandgnu_comparison_tests.sh
| Category | Passed / Total | Pass rate |
|---|---|---|
| Text Processing | 29 / 29 | 100% |
| Crypto & Hash | 4 / 4 | 100% |
| File Operations | 6 / 7 | 86%¹ |
| System Utilities | 11 / 11 | 100% |
| Overall | 53 / 54 | 98% |
¹ The single mismatch is
dir, which intentionally uses Windows-style columnar output. See the GNU Comparison Report.
| Document | Description |
|---|---|
| Compatibility Matrix | Support status of all 169 commands |
| GNU Comparison Report | Differential testing vs GNU Coreutils 9.11 |
| Windows Features | Windows-specific behavior |
| WPM Guide | Package manager user guide |
| GNU Test Baseline | GNU test framework |
Prerequisites: Visual Studio 2022+ · CMake 3.30+ · Ninja
# Build
./scripts/build-with-vs.ps1
# Run tests
./scripts/build-with-vs.ps1 -Target winuxcmd-tests
build-vs/tests/winuxcmd-tests.exeContributions welcome — see CONTRIBUTING.md.
MIT — see LICENSE.
WinuxCmd — because ls shouldn't require a Linux kernel.
Pair it with niubash — the native bash shell that speaks GNU fluently on Windows.