WinuxCmd provides Windows-native implementations of Unix commands, with additional Windows-specific features and a package manager (WPM).
The main entry point that dispatches to individual commands. Supports 169 commands across GNU Coreutils, BSD, Cygwin, and custom extensions.
Package manager for installing and managing external tools.
wpm install <pkg>- Install a packagewpm uninstall <pkg>- Uninstall a packagewpm list- List available packageswpm installed- List installed packageswpm search <query>- Search packageswpm info <pkg>- Show package infowpm update- Update package indexwpm outdated- Show outdated packageswpm index- Show/update package index
WPM uses the wpm-source repository as its package index:
- Official: https://github.com/unixwin/wpm-source
- CDN: https://cdn.jsdelivr.net/gh/unixwin/wpm-source@main/index.json
- goawk (awk implementation)
- bsdtar (BSD tar)
- gzip (GNU compression)
- openssh (SSH client)
- make (GNU make)
- neovim (text editor)
- curl (URL transfer)
- wget (network downloader)
- WinuxCmd accepts both / and \ as path separators
- Paths are normalized to Windows format internally
- UNC paths (\server\share) are supported
- Input: Auto-detects CRLF/LF/CR
- Output: Uses system default (CRLF on Windows)
- Use -z/--zero for NUL-separated output
- Windows ACLs mapped to Unix permission model
- Read-only files mapped to -w (not writable)
- Directories always appear executable
- Windows does not have Unix signals
- kill/killall use TerminateProcess API
- Signal names are mapped to Windows equivalents
- .exe, .bat, .cmd, .ps1 are recognized as executable
- -x/--executable checks file extension
- Symlinks use Windows reparse points
- Windows env vars are case-insensitive
- PATH uses ; separator (not :)
- HOME mapped to USERPROFILE
- MSVC (Visual Studio)
- C++23 with modules
- Ninja build system
./scripts/build-with-vs.ps1./scripts/build-with-vs.ps1 -Target winuxcmd-tests
build-vs/tests/winuxcmd-tests.exe- SELinux: Not available on Windows (chcon, runcon are stubs)
- Process groups: killall/pkill use substring match by default
- Terminal features: Some stty/tput options not supported
- File systems: FAT32/exFAT lack Unix permissions
- Hard links: Limited support on some Windows versions
- FIFOs: Named pipes use different Windows API