Skip to content

Latest commit

Β 

History

633 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

WinuxCmd β€” Unix commands, native on Windows. 169 commands, 1855 options, 81% differential pass rate (43 cases / 8 known gaps tracked).

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. πŸŽ‰

GitHub release GitHub downloads Stars License Platform

πŸ’Ύ Install Β· ⚑ Demo Β· πŸ‚ niubash Β· πŸ“¦ WPM Β· πŸ†š Compare Β· πŸ“š Docs Β· δΈ­ζ–‡


The problem, in one sentence

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,855 options β€” with ongoing differential testing against GNU Coreutils 9.11 (43 cases, 35 pass, 8 known gaps tracked in issue-140).

169 1,855 43 cases 2,346 ~3 MB
commands optionsΒΉ GNU diff tests Β· 81% pass tests Β· 99.6% pass zero-dependency binary

ΒΉ 1,855 = OPTION( macro count in src/commands/. Differential corpus: 43 cases across ~35 commands, 35 pass / 8 known gaps (issue-140). See the GNU comparison report.


⚑ Unix muscle memory on Windows

# 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

πŸ’Ύ Install

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

πŸš€ Why WinuxCmd

  • πŸͺŸ Native, not emulated β€” talks to Win32 APIs directly. Understands C:\, UNC paths and NTFS ACLs (with cygpath and getfacl for bridging). No VM, no runtime DLLs, instant startup.
  • 🧠 GNU where it counts β€” find alone implements 88 options (full expression parser, -exec/-execdir/-ok, -printf); grep ships PCRE2; sed supports in-place -i editing.
  • πŸ“¦ 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 unit tests across 178 test files (99.6% pass), plus differential output testing against GNU Coreutils 9.11 (43 cases, 81% pass, 8 known gaps tracked in issue-140).
  • ⚑ Small and fast β€” ~3 MB, zero dependencies, instant startup (Cygwin takes 2–5 s just to boot).

πŸ‚ Better together: the niubash shell

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 niubash, powered by its rubash engine, green across the GNU Bash upstream test suite (86/86).
  • Agent-friendly β€” niu -c is 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 PATH at startup, so grep, sed and find above 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 package manager

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 installed

Details in the WPM User Guide.

πŸ†š How it compares

Feature WinuxCmd uutils (Rust) GnuWin32 Cygwin busybox
Commands 169 ~100 ~90 ~200 ~300
Options 1,855 ~600 ~200 Full ~500
GNU compat 81% diff pass 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

vs uutils/coreutils (Rust)

Aspect WinuxCmd uutils
Language C++23 Rust
Commands 169 ~100
Options 1,855 ~600
Binary size ~3 MB ~5 MB
Dependencies None Rust runtime
Build time 2 min 15 min
Package manager WPM built-in None

vs GnuWin32

Aspect WinuxCmd GnuWin32
Maintenance Active Abandoned
Last update 2026 2012
Windows support Win10/11 WinXP+
Modern toolchain C++23, CMake C, autotools

vs Cygwin

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

🧰 Command coverage

169 commands β€” full coverage table (click to expand)

GNU Coreutils (83 commands)

Category Commands Differential status
File Ops cp, mv, rm, ln, install, mkdir, rmdir, touch, unlink βœ… mostly verified; cp has 9+ options rejected on Windows (issue-140)
Text Processing cat, echo, head, tail, sort, uniq, cut, tr, wc, fold, fmt, join, comm βœ… diff PASS except fmt (OUT_DIFF, issue-140)
Directory Listing ls, dir, vdir βœ… ls PASS; dir Windows-columnar by design
Search find, xargs βœ…
Crypto/Hash base64, base32, basenc, md5sum, sha1sum, sha256sum, sha384sum, sha512sum, b2sum, cksum, sum βœ…
Date/Time date, touch, time, timeout βœ…
System Info uname, hostname, id, whoami, users, groups, nproc, uptime, arch ⚠️ whoami/users/groups thin stubs (≀1 declared option each)
Disk df, du, stat ⚠️ stat deep-path gap (OUT_DIFF, issue-140)
Env/Expr env, printenv, expr, seq, yes, true, false βœ…
Text Format pr, nl, expand, unexpand, column, paste, tsort, ptx ⚠️ tsort and ptx output-format gaps (OUT_DIFF, issue-140)
File Info file, stat, readlink, realpath, dirname, basename, pathchk, sync ⚠️ stat deep-path; file no-magic stub
Process nice, nohup, stdbuf ⚠️ nice thin (1 option); stdbuf EXIT_DIFF (issue-140)
Permissions chmod, chown, chgrp, chroot ⚠️ Linux ownership/SELinux options rejected on Windows
Other shred, factor, kill, truncate, fmt, numfmt, mktemp, dircolors, sum, csplit, split ⚠️ fmt OUT_DIFF gap

GNU findutils/grep/sed (3 commands)

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

BSD tools (15 commands)

cal, column, hexdump, logger, tree, less, more, strings, rev, tsort, seq, sleep, nohup, watch, tput

Process management (13 commands)

ps, top, kill, killall, pgrep, pkill, pidof, pldd, free, uptime, renice, stdbuf, timeout

Cygwin/MSYS2 (14 commands)

cygpath, dos2unix, unix2dos, d2u, u2d

System info (16 commands)

hostname, id, who, pinky, stty, infocmp, tic, toe, locale, tput, getconf, getfacl, ldd, lsof, file, man

Custom extensions (10+ commands)

wpm (package manager), mpicalc, regtool, mkpasswd, mkgroup, mkfifo, mknod, clear, reset, tzset

πŸƒ Benchmarks

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

πŸ§ͺ Testing and GNU verification

  • 2,346 automated test cases across 178 test files β€” 99.6% pass rate
  • Differential corpus: 99 test cases (3 corpus + 43 regressions + 53 expansion cases, covering 71 commands), executed against GNU Coreutils 9.4 (WSL2) with identical inputs β€” 95 pass / 4 whitelisted platform-environment differences, verified on the current build (2026-09)
  • Automated GNU comparison: scripts/compare_outputs.sh and gnu_comparison_tests.sh; per-case runner: tests/differential/runner.sh
Whitelisted Command Reason
21 id -g platform: Windows has no POSIX gid; prints primary-group RID (197121)
23 cp -l environment: hardlinks across \\wsl.localhost 9p unsupported in the WSL-side runner; verified on native NTFS
35 ln -hard environment: same 9p hardlink limitation as cp -l
30 mkdir exists format: GNU uses locale-dependent curly quotes (U+2018/2019); winuxcmd uses ASCII '

The eight former issue-140 gaps (dd, diff -u, tsort, fmt, stat, sdiff, ptx, stdbuf) all pass; normal-format diff hunk-header, hash-family separator, cksum line-ending, realpath forward-slash, and od -c octal-escaping gaps were all found and fixed in 2026-09.

See the GNU Comparison Report.

πŸ“š Documentation

Document Description
Compatibility Matrix Support status of all 169 commands
GNU Comparison Report Differential testing vs GNU Coreutils 9.4
Windows Features Windows-specific behavior
WPM Guide Package manager user guide
GNU Test Baseline GNU test framework

πŸ› οΈ Building from source

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.exe

🀝 Contributing

Contributions welcome β€” see CONTRIBUTING.md.

License

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.

⬆ Back to top

About

Lightweight, native Windows implementation of Linux commands | 3.0MB only | AI-friendly

Topics

Resources

Contributing

Stars

264 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages