

# 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)**
[](https://github.com/VincentZyuApps/winload)
[](https://gitee.com/vincent-zyu/winload)
[](https://github.com/VincentZyuApps/winload/releases)
[](https://github.com/VincentZyuApps/winload/releases)
[](https://github.com/VincentZyuApps/winload/releases)
[](https://github.com/VincentZyuApps/winload/releases)
[](https://pypi.org/project/winload/)
[](https://crates.io/crates/winload)
[](https://www.npmjs.com/package/@vincentzyuapps/winload)
[](https://scoop.sh/#/apps?q=%22https%3A%2F%2Fgithub.com%2FVincentZyuApps%2Fscoop-bucket%22&o=false)
[](https://aur.archlinux.org/packages/winload-rust-bin)
[](https://github.com/VincentZyuApps/winload/releases)
[](https://github.com/VincentZyuApps/winload/releases)
[](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.

## ๐ง 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