![winload](https://socialify.git.ci/VincentZyu233/winload/image?custom_language=Rust&description=1&forks=1&issues=1&language=1&logo=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F250448479%3Fs%3D200%26v%3D4&name=1&owner=1&pulls=1&stargazers=1&theme=Auto) ![onefetch](docs/images/onefetch.png) # Winload > A lightweight, real-time CLI tool for monitoring network bandwidth and traffic, inspired by Linux's nload. > **[๐Ÿ“– English](readme.md)** > **[๐Ÿ“– ็ฎ€ไฝ“ไธญๆ–‡(ๅคง้™†)](readme.zh-cn.md)** > **[๐Ÿ“– ็น้ซ”ไธญๆ–‡(ๅฐ็ฃ)](readme.zh-tw.md)** > **[๐Ÿ“– ๆ–‡่จ€ๆ–‡](readme.lzh.md)** > **[๐Ÿ“– ๆ—ฅๆœฌ่ชž](readme.jp.md)** > **[๐Ÿ“– ํ•œ๊ตญ์–ด](readme.ko.md)** [![GitHub](https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/VincentZyuApps/winload) [![Gitee](https://img.shields.io/badge/Gitee-C71D23?style=for-the-badge&logo=gitee&logoColor=white)](https://gitee.com/vincent-zyu/winload) [![Windows x64 | ARM64](https://img.shields.io/static/v1?label=Windows&message=x64%20%7C%20ARM64&color=0078D4&style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTAgMGgxMS4zNzd2MTEuMzcySDB6TTEyLjYyMyAwSDI0djExLjM3MkgxMi42MjN6TTAgMTIuNjIzaDExLjM3N1YyNEgweiBNMTIuNjIzIDEyLjYyM0gyNFYyNEgxMi42MjN6IiBmaWxsPSIjZmZmIi8+PC9zdmc+)](https://github.com/VincentZyuApps/winload/releases) [![Linux x64 | ARM64](https://img.shields.io/badge/Linux-x64_|_ARM64-FCC624?style=for-the-badge&logo=linux&logoColor=white)](https://github.com/VincentZyuApps/winload/releases) [![macOS x64 | ARM64](https://img.shields.io/badge/macOS-x64_|_ARM64-000000?style=for-the-badge&logo=apple&logoColor=white)](https://github.com/VincentZyuApps/winload/releases) [![Android x64 | ARM64](https://img.shields.io/badge/Android-x64_|_ARM64-3DDC84?style=for-the-badge&logo=android&logoColor=white)](https://github.com/VincentZyuApps/winload/releases) [![PyPI](https://img.shields.io/badge/PyPI-3776AB?style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/winload/) [![Crates.io](https://img.shields.io/badge/Crates.io-000000?style=for-the-badge&logo=rust&logoColor=white)](https://crates.io/crates/winload) [![npm](https://img.shields.io/badge/npm-CB3837?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/@vincentzyuapps/winload) [![Scoop.sh](https://img.shields.io/badge/Scoop.sh-7B4AE2?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGNpcmNsZSBjeD0iMTIiIGN5PSI4IiByPSI1IiBmaWxsPSIjRUM3MEExIi8+PGNpcmNsZSBjeD0iOCIgY3k9IjEyIiByPSI0LjUiIGZpbGw9IiNFQkYzQTEiLz48Y2lyY2xlIGN4PSIxNiIgY3k9IjEyIiByPSI0LjUiIGZpbGw9IiM4RTZFQzgiLz48cGF0aCBkPSJNMTYuNSA0bC0xLjUtMS41TDExLjUgNmwxLjUgMS41eiIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zIDEzaDE4YzAgNC40LTMuNiA4LTggOGgtNGMtNC40IDAtOC0zLjYtOC04eiIgZmlsbD0iIzRGNEI1MyIvPjwvc3ZnPg==)](https://scoop.sh/#/apps?q=%22https%3A%2F%2Fgithub.com%2FVincentZyuApps%2Fscoop-bucket%22&o=false) [![AUR](https://img.shields.io/badge/AUR-1793D1?style=for-the-badge&logo=archlinux&logoColor=white)](https://aur.archlinux.org/packages/winload-rust-bin) [![APT](https://img.shields.io/badge/APT-E95420?style=for-the-badge&logo=debian&logoColor=white)](https://github.com/VincentZyuApps/winload/releases) [![RPM](https://img.shields.io/badge/RPM-CB1626?style=for-the-badge&logo=redhat&logoColor=white)](https://github.com/VincentZyuApps/winload/releases) [![Homebrew](https://img.shields.io/badge/Homebrew-FBB040?style=for-the-badge&logo=homebrew&logoColor=black)](https://github.com/VincentZyuApps/homebrew-tap/blob/main/Formula/winload.rb) > **[๐Ÿ“– Build Docs](.github/workflows/build.md)** ## ๐Ÿš€ Introduction `Winload` brings an intuitive, visual network monitor to the modern terminal. It started as a Windows-focused tool to fill the `nload` gap, and now targets Linux and macOS as well. ## ๐Ÿ™ Acknowledgements Winload is inspired by the classic ใ€Œ[nload](https://github.com/rolandriegel/nload)ใ€ project by Roland Riegel. Many thanks for the original idea and experience. https://github.com/rolandriegel/nload ## โœจ Key Features - **Dual implementations** - **Rust edition**: fast, memory-safe, single static binaryโ€”great for everyday monitoring. - **Python edition**: easy to hack and extend for prototyping or integrations. - **Cross-platform**: Windows, Linux, and macOS (x64 & ARM64). - **Real-time visualization**: live incoming/outgoing graphs and throughput stats. - **Minimal UI**: clean TUI that mirrors nload's ergonomics. ## ๐Ÿ“Š Performance Benchmarks > โšก Winload (Rust) achieves **~10ms startup** and **<2MB binary size**, significantly outperforming Python and matching C++ nload in efficiency. ![Winload Benchmark](docs/benchmark/benchmark.svg) ## ๐Ÿ”ง Run from Source ### Python ```bash git clone https://github.com/VincentZyuApps/winload.git # or clone from Gitee (faster in China Mainland): # git clone https://gitee.com/vincent-zyu/winload.git cd winload/python uv venv --python 3.13 uv pip install -r requirements.txt uv run python main.py ``` ### Rust ```bash git clone https://github.com/VincentZyuApps/winload.git cd winload/rust cargo run --release cargo run --release -- --help # Show help cargo run --release -- --version # Show version ``` ## ๐Ÿ Python Edition Installation > ๐Ÿ’ก **Implementation Note**: Only PyPI and GitHub/Gitee provide Python edition. > Only Cargo provides Rust source code for local compilation. > All other package managers (Scoop, AUR, npm, APT, RPM) and GitHub Releases distribute **Rust binaries only**. ### Python (pip) ```bash pip install winload # recommend use uv: # https://docs.astral.sh/uv/getting-started/installation/ # https://gitee.com/wangnov/uv-custom/releases uv venv --python 3.13 uv pip install winload uv run winload uv run python -c "import shutil; print(shutil.which('winload'))" ``` ## ๐Ÿ“ฅ Rust Edition Installation (recommended) ### npm (cross-platform) ```bash # Recommended (scoped) npm install -g @vincentzyuapps/winload # Alternative (unscoped) npm install -g winload-rust-bin # Alternative (GitHub Packages) npm install -g @vincentzyuapps/winload --registry https://npm.pkg.github.com # on Windows, use win-nload to avoid conflict with System32\winload.exe # on Linux/macOS, both winload and win-nload work # or use npx directly npx @vincentzyuapps/winload ``` > Includes 4 precompiled binaries for x86_64 & ARM64 across Windows, Linux, and macOS. ### Cargo (Build from source) ```bash cargo install winload cargo install --list ``` ### Windows (Scoop) > ๐Ÿ“„ [Scoop Bucket (GitHub)](https://github.com/VincentZyuApps/scoop-bucket/blob/main/bucket/winload.json) > ๐Ÿ“„ [Scoop Bucket (Gitee)](https://gitee.com/vincent-zyu/scoop-bucket/blob/main/bucket/winload.json) ```powershell scoop bucket add vincentzyu https://github.com/VincentZyuApps/scoop-bucket # or from Gitee: # scoop bucket add vincentzyu https://gitee.com/vincent-zyu/scoop-bucket scoop update # optional: manually refresh bucket list before install scoop install winload # execute bin file win-nload Get-Command win-nload # Powershell where win-nload # CMD ``` > ๐Ÿ’ก Recommended: use [Windows Terminal](https://github.com/microsoft/terminal) instead of the legacy Windows Console for correct CJK character rendering and better TUI experience. > ```powershell > scoop bucket add versions > scoop install windows-terminal-preview > wtp > ``` > ๐Ÿ’ก **All builds require Windows 10+** (Rust 1.77+ dropped Windows 7/8 support). Scoop and npm provide **MSVC + Npcap** for **x86_64** and **ARM64** by default. These builds now delay-load `wpcap.dll`, reducing startup failures before `--npcap` is used, but loopback capture still requires Npcap installed on the system. ### Arch Linux (AUR): ```bash paru -S winload-rust-bin which winload ``` ### Debian & RedHat Distros / Termux (one-liner) > Supports Debian/Ubuntu and derivatives โ€” Linux Mint, Pop!_OS, Deepin, UOS, etc. (apt) > Supports Fedora/RHEL and derivatives โ€” Rocky Linux, AlmaLinux, CentOS Stream, etc. (dnf) > Also supports Termux on Android (aarch64) ```bash curl -fsSL https://raw.githubusercontent.com/VincentZyuApps/winload/main/docs/install_scripts/install.sh | bash which winload ``` > ๐Ÿ“„ [View install script source](https://github.com/VincentZyuApps/winload/blob/main/docs/install_scripts/install.sh) **๐Ÿ‡จ๐Ÿ‡ณ Gitee mirror (faster in China Mainland):** ```bash curl -fsSL https://gitee.com/vincent-zyu/winload/raw/main/docs/install_scripts/install_gitee.sh | bash which winload ``` > ๐Ÿ“„ [View Gitee install script](https://gitee.com/vincent-zyu/winload/blob/main/docs/install_scripts/install_gitee.sh) > โš ๏ธ The two `curl ... | bash` install scripts above support **x86_64 / aarch64** systems with **apt** (Debian/Ubuntu), **dnf** (Fedora/RHEL), or **Termux** (Android). For other platforms, use **npm** (`npm install -g @vincentzyuapps/winload`) or **Cargo** (`cargo install winload`) instead. ### macOS / Linux (Homebrew) > ๐Ÿ“„ [Homebrew Formula (GitHub)](https://github.com/VincentZyuApps/homebrew-tap/blob/main/Formula/winload.rb) > ๐Ÿ“„ [Homebrew Formula (Gitee)](https://gitee.com/vincent-zyu/homebrew-tap/blob/main/Formula/winload.rb) > Recent Homebrew versions may require trusting third-party tap formulae before installation. ```bash brew tap vincentzyuapps/tap brew trust vincentzyuapps/tap # or from Gitee (manual tap clone): # git clone https://gitee.com/vincent-zyu/homebrew-tap.git "$(brew --prefix)/Library/Taps/vincentzyuapps/homebrew-tap" brew update && brew install winload which winload ``` > ๐Ÿ’ก Homebrew supports **macOS** (Intel & Apple Silicon) and **Linux** (x86_64 & ARM64).
Manual install **DEB (Debian/Ubuntu):** ```bash # Download the latest .deb from GitHub Releases sudo dpkg -i ./winload*.deb # or use apt (auto-resolves dependencies) sudo apt install ./winload*.deb which winload ``` **RPM (Fedora/RHEL):** ```bash sudo dnf install ./winload*.rpm which winload ``` **Or download binaries directly from [GitHub Releases](https://github.com/VincentZyuApps/winload/releases).**
## โŒจ๏ธ Usage ```bash winload # Monitor all active network interfaces winload -t 200 # Set refresh interval to 200ms winload -d "Wi-Fi" # Start with a specific device winload --title "My Monitor" # Use a custom header title winload -e # Enable emoji decorations ๐ŸŽ‰ winload --max-mode smart --max-half-life 10 # Smooth adaptive Y-axis (default) winload --max-mode legacy # nload-style visible-history scaling winload --max-mode fixed --max-y-value 10M # Fixed Y-axis max winload --npcap # Capture 127.0.0.1 loopback traffic (Windows, requires Npcap) winload --netlink # Manually enable RTNETLINK (Linux/Android, off by default) ``` ### Options | Flag | Description | Default | |------|-------------|---------| | `-t`, `--interval ` | Refresh interval in milliseconds | `500` | | `-a`, `--average ` | Average calculation window in seconds | `300` | | `-d`, `--device ` | Default device name (partial match) | โ€” | | `--title [TITLE]` | Add a title line above device header: no value shows `winload `; empty string (or omitted) shows only the default device header | โ€” | | `-e`, `--emoji` | Enable emoji decorations in TUI ๐ŸŽ‰ | off | | `-U`, `--unicode` | Use Unicode block characters for graph (โ–ˆโ–“โ–‘ยท) | off | | `-u`, `--unit ` | Display unit: `bit` or `byte` | `bit` | | `-b`, `--bar-style