Small, native, cross-platform CLI tools — the same behaviour everywhere.
Winix is a suite of focused command-line tools compiled to native binaries via .NET AOT. One .exe per tool: no runtime to install, no POSIX emulation layer, no shell dependency. Each tool works identically in cmd.exe, PowerShell, bash, zsh, CI agents, File Explorer "Open with", and scheduled tasks, on Windows, Linux, and macOS — same flags, same output, same exit codes. Scripts and muscle memory transfer across platforms without adaptation.
On Windows, many of these tools simply don't exist natively — there's no built-in find, xargs, watch, man, less, or netcat. On Unix, Winix papers over BSD-vs-GNU flag differences, adds structured output to tools that were never designed to be parsed, and provides the same interface that's available on Windows. Output is colourful and readable for humans in the terminal by default; every tool also has a --json mode for scripts and agents.
| Tool | What it does |
|---|---|
| timeit | Time a command — wall clock, CPU time, peak memory, exit code |
| squeeze | Compress and decompress files (gzip, brotli, zstd) |
| peep | Watch a command on interval + re-run on file changes |
| wargs | Build and execute commands from stdin (sane-default xargs) |
| files | Find files by name, size, date, type, and content |
| less | Terminal pager with ANSI colour, search, and follow mode |
| man | Man page viewer with colour, hyperlinks, and pager |
| treex | Enhanced directory tree with colour, filtering, size rollups |
| when | Convert timestamps, apply time arithmetic, calculate durations |
| whoholds | Find which processes hold a file lock or bind a port |
| schedule | Cross-platform task scheduling with cron expressions |
| nc | TCP/UDP send-receive, port checks, TLS clients |
| retry | Run a command with automatic retries, backoff, exit-code filtering |
| clip | Cross-platform clipboard bridge — copy, paste, clear |
| ids | Generate identifiers — UUID v4, UUID v7, ULID, NanoID |
| mksecret | Generate secrets — random passwords, diceware passphrases, keys |
| digest | Cryptographic hashing and HMAC — SHA-2/SHA-3/BLAKE2b |
| envvault | Keychain-backed env-var manager; injects secrets into child processes |
| notify | Cross-platform desktop notifications + ntfy.sh push |
| protect | Encrypt-at-rest using OS-native key stores (DPAPI/Keychain/libsecret) |
| unprotect | Companion to protect; decrypts .prot files |
| qr | QR code generator with Wi-Fi, SMS, mailto, geo, tel helpers |
| url | URL encode/decode/parse/build/join/query-edit |
| trash | Move files to the OS recycle bin / Trash (recoverable delete) |
| hcat | Netcat for HTTP — instant HTTP server: serve, inspect, pipe |
| demux | Route each line of stdin to files or commands by regex |
| mkauth | Compute HTTP Authorization headers (OAuth 1.0a, JWT, Basic, Bearer) |
| winix | Suite installer — installs and updates all tools via native package managers |
Tools marked fresh (mksecret, trash, hcat, mkauth, demux) are newer additions that have not yet shipped in a stable release — their interfaces may still change. All other tools are core (stable). See docs/STABILITY.md for the full policy.
The biggest value is on Windows, where many of these tools simply don't exist. On Linux and macOS the tools still earn their keep by combining multiple utilities, improving defaults, or providing a consistent interface across platforms. Even where a native equivalent exists, there's value in a single set of tools that behaves identically everywhere — scripts, CI pipelines, and muscle memory transfer across platforms without adaptation.
The table below highlights a representative selection; the Tools table above lists the full suite, and each tool's README has its own "what it replaces, on each OS" rationale.
| Tool | Windows | Linux / macOS |
|---|---|---|
| timeit | Nothing built-in. Measure-Command exists but doesn't show memory, doesn't pass exit codes, can't be piped. |
Improves on time with peak memory, machine-readable JSON, and proper exit-code passthrough. |
| squeeze | No native CLI for compression. Users install 3+ separate tools or reach for 7-Zip. | One tool instead of separate gzip, brotli, zstd CLIs. Auto-detects format on decompression. |
| peep | No watch. No entr. PowerShell loops are verbose and don't handle file-watching. |
Combines watch (interval) + entr (file-change trigger) in one binary with a TUI. |
| wargs | No xargs. ForEach-Object is PowerShell-only and doesn't handle parallel execution or line-delimited input well. |
Sane defaults over xargs: line-delimited, no -0 needed, correct quoting on all platforms. |
| files | No find. Get-ChildItem exists but is slow, verbose, and PowerShell-only. |
Cleaner than find, with glob patterns, gitignore support, text/binary detection, and JSON output. |
| treex | Built-in tree is bare-bones (no colour, no sizes, no filtering). |
Adds colour, size rollups, gitignore, clickable hyperlinks, and filtering over standard tree. |
| man | No man at all. |
Alternative renderer with colour and hyperlinks. Renders groff natively — no groff install needed. Bundled pager. |
| less | No pager. more exists but can't scroll back, search, or handle ANSI colour. |
Better defaults than system less: ANSI colour on by default, mouse scroll, follow mode. |
| whoholds | No built-in file-lock query. handle.exe (Sysinternals) requires a separate download + admin rights. |
Wraps lsof with cleaner output, structured JSON, and a unified syntax for both files and ports. |
| schedule | schtasks.exe exists but is notoriously hard to script. No cron syntax. |
Unified interface over crontab with the same flags and output format as Windows. |
| nc | No netcat. Test-NetConnection is verbose and limited. |
Consistent behaviour across BSD/GNU/ncat forks. Adds TLS client support and port-range checking. |
| winix | Suite installer via Scoop or winget. | Suite installer via brew or dotnet tool. |
Unix tools have been available on Windows for decades via Cygwin, MSYS2 / Git Bash, and WSL. These are excellent at what they do — they bring a full POSIX environment (bash, coreutils, rsync, ssh, a few thousand packages) to Windows so real Linux binaries can run there.
Winix takes a different approach and is complementary rather than competing:
- No emulation layer. Tools are native
.exefiles, not POSIX binaries callingcygwin1.dll. Paths are native (C:\foo, not/cygdrive/c/foo). No fork-emulation overhead, no path translation surprises. - Redistributable on their own. Copy a single
.exeto a machine and it works. No Cygwin base install, nocygwin1.dllalongside it, no$PATHgymnastics. - First-class outside bash. Works from
cmd.exe, PowerShell, File Explorer "Open with", Windows Task Scheduler actions, IIS hooks, SSIS packages — not just inside amintty+ bash session. - Package-manager installable per tool.
scoop install winix/timeit,winget install Winix.TimeIt,dotnet tool install -g Winix.TimeIt— seconds on a CI runner, no base environment required. - Cross-platform source, not a Windows port. Linux and macOS builds aren't afterthoughts — the same source compiles to native binaries on every platform, with identical behaviour and flags everywhere.
If you want the entire GNU/Unix userland on Windows and you're happy working inside a bash shell, Cygwin or WSL is the right tool — and Winix runs fine alongside either of them. If you want a smaller, focused set of modern CLI utilities that integrate with whatever environment you're already in, that's what Winix is for.
scoop bucket add winix https://github.com/Yortw/winix
scoop install winix/timeit # individual tool
scoop install winix/winix # all toolsWinget coverage is rolling out per tool, so not every package is published there yet. The tools available on winget today install by ID:
winget install Winix.TimeIt
winget install Winix.Squeeze
winget install Winix.Peep
winget install Winix.Wargs
winget install Winix.Files
winget install Winix.TreeX
winget install Winix.Man
winget install Winix.Less
winget install Winix.WhoHolds
winget install Winix.Schedule
winget install Winix.NetCat
winget install Winix.When
winget install Winix.WinixMore tools are being submitted to winget over time (submissions are human-moderated, so they land in batches). For tools not yet on winget, use Scoop, the .NET tool, or GitHub Releases below — all of which cover the full suite.
Every tool publishes to NuGet as a .NET global tool under the ID Winix.<Tool>. Install any of them with dotnet tool install -g:
dotnet tool install -g Winix.TimeIt # individual tool (one of 28)
dotnet tool install -g Winix.Winix # then: winix install (pulls the whole suite)The full set of package IDs: Winix.TimeIt, Winix.Squeeze, Winix.Peep, Winix.Wargs, Winix.Files, Winix.Less, Winix.Man, Winix.TreeX, Winix.When, Winix.WhoHolds, Winix.Schedule, Winix.NetCat, Winix.Retry, Winix.Clip, Winix.Ids, Winix.MkSecret, Winix.Digest, Winix.EnvVault, Winix.Notify, Winix.Protect, Winix.Unprotect, Winix.Qr, Winix.Url, Winix.Trash, Winix.HCat, Winix.Demux, Winix.MkAuth, Winix.Winix.
Download native binaries from GitHub Releases. Available for Windows (x64), Linux (x64), and macOS (x64, ARM64). Windows binaries are Authenticode-signed.
# Time a build
timeit dotnet build
# Watch tests, re-run on file changes
peep -w "src/**/*.cs" dotnet test
# Compress with zstd
squeeze --zstd largefile.bin
# Find files and batch-process them
files src --ext cs | wargs dotnet format
# Browse a directory tree with sizes
treex --size --gitignore --no-hidden
# Read a man page on any platform
man timeit
# Find what's locking a file
whoholds myapp.dll
# Quick port check
nc -z db.internal 5432
# Schedule a recurring job (cross-platform cron)
schedule add "0 9 * * 1-5" -- backup.sh /data
# JSON output for CI
timeit --json dotnet test
# AI agent metadata
files --describeWinix tools are designed to be invoked by scripts and agents, not just humans:
--describeon every tool returns structured JSON metadata — flags, types, defaults, examples, composability hints, exit codes, and the--jsonoutput schema.--jsonon every tool produces machine-parseable output with standard, documented fields.- Consistent exit codes across the suite (0 = success, 125 = usage error).
- AGENTS.md at the repo root sets out when reaching for a Winix tool is actually the right call versus the POSIX or Windows default — Winix isn't a blanket replacement, and the file is explicit about that.
- llms.txt plus per-tool agent guides in
docs/ai/give agents a single entry point to discover the suite, with a one-line summary per tool and full agent-targeted documentation per tool.
git clone https://github.com/Yortw/winix.git
cd winix
dotnet build Winix.sln
dotnet test Winix.sln
# AOT native binary (single tool)
dotnet publish src/timeit/timeit.csproj -c Release -r win-x64MIT
