winload-rust-bin 0.1.7-rc.5 → 0.1.9-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/bin.js +2 -2
  2. package/index.js +8 -8
  3. package/package.json +12 -9
  4. package/readme.md +136 -21
package/bin.js CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * winload-rust-bin — CLI entry point
4
+ * @vincentzyuapps/winload — CLI entry point
5
5
  *
6
6
  * 定位当前平台的预编译二进制并透传所有参数执行。
7
- * 用户通过 `npx winload-rust-bin` 或全局安装后直接 `winload` 即可运行。
7
+ * 用户通过 `npx @vincentzyuapps/winload` 或全局安装后直接 `winload` 即可运行。
8
8
  */
9
9
 
10
10
  "use strict";
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * winload-rust-bin — binary path resolver
2
+ * @vincentzyuapps/winload — binary path resolver
3
3
  *
4
4
  * npm 安装时会根据 optionalDependencies 中各平台包的 os/cpu 字段,
5
5
  * 仅下载与当前平台匹配的那一个。此模块负责定位该平台包中的二进制。
@@ -17,12 +17,12 @@ const path = require("path");
17
17
  * value: npm 平台包名
18
18
  */
19
19
  const PLATFORMS = {
20
- "win32-x64": "winload-rust-bin-win32-x64",
21
- "win32-arm64": "winload-rust-bin-win32-arm64",
22
- "linux-x64": "winload-rust-bin-linux-x64",
23
- "linux-arm64": "winload-rust-bin-linux-arm64",
24
- "darwin-x64": "winload-rust-bin-darwin-x64",
25
- "darwin-arm64": "winload-rust-bin-darwin-arm64",
20
+ "win32-x64": "@vincentzyuapps/winload-win32-x64",
21
+ "win32-arm64": "@vincentzyuapps/winload-win32-arm64",
22
+ "linux-x64": "@vincentzyuapps/winload-linux-x64",
23
+ "linux-arm64": "@vincentzyuapps/winload-linux-arm64",
24
+ "darwin-x64": "@vincentzyuapps/winload-darwin-x64",
25
+ "darwin-arm64": "@vincentzyuapps/winload-darwin-arm64",
26
26
  };
27
27
 
28
28
  /**
@@ -50,7 +50,7 @@ function getBinaryPath() {
50
50
  } catch {
51
51
  throw new Error(
52
52
  `winload: platform package "${pkg}" not found\n` +
53
- `Try reinstalling: npm install winload-rust-bin\n` +
53
+ `Try reinstalling: npm install @vincentzyuapps/winload\n` +
54
54
  `Or download manually: https://github.com/VincentZyuApps/winload/releases`
55
55
  );
56
56
  }
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "winload-rust-bin",
3
- "version": "0.1.7-rc.5",
3
+ "version": "0.1.9-rc.3",
4
4
  "description": "Network Load Monitor — nload-like TUI tool for Windows/Linux/macOS (prebuilt Rust binary)",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "https://gitee.com/vincent-zyu/winload"
8
+ "url": "https://github.com/VincentZyuApps/winload"
9
9
  },
10
- "homepage": "https://github.com/VincentZyuApps/winload",
10
+ "homepage": "https://gitee.com/vincent-zyu/winload",
11
11
  "author": "VincentZyu <1830540513zyu@gmail.com>",
12
12
  "keywords": [
13
13
  "network",
@@ -29,12 +29,15 @@
29
29
  "index.js",
30
30
  "readme.md"
31
31
  ],
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
32
35
  "optionalDependencies": {
33
- "winload-rust-bin-win32-x64": "0.1.7-rc.5",
34
- "winload-rust-bin-win32-arm64": "0.1.7-rc.5",
35
- "winload-rust-bin-linux-x64": "0.1.7-rc.5",
36
- "winload-rust-bin-linux-arm64": "0.1.7-rc.5",
37
- "winload-rust-bin-darwin-x64": "0.1.7-rc.5",
38
- "winload-rust-bin-darwin-arm64": "0.1.7-rc.5"
36
+ "@vincentzyuapps/winload-win32-x64": "0.1.9-rc.3",
37
+ "@vincentzyuapps/winload-win32-arm64": "0.1.9-rc.3",
38
+ "@vincentzyuapps/winload-linux-x64": "0.1.9-rc.3",
39
+ "@vincentzyuapps/winload-linux-arm64": "0.1.9-rc.3",
40
+ "@vincentzyuapps/winload-darwin-x64": "0.1.9-rc.3",
41
+ "@vincentzyuapps/winload-darwin-arm64": "0.1.9-rc.3"
39
42
  }
40
43
  }
package/readme.md CHANGED
@@ -1,39 +1,43 @@
1
1
  ![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)
2
+ ![onefetch](docs/images/onefetch.png)
2
3
 
3
- # Winload <img src="https://github.com/user-attachments/assets/62fec846-0442-47f6-bbba-78acdc8803ef" height="32px">
4
+ # Winload <img src="docs/images/miku.png" height="32px">
4
5
 
5
6
  > A lightweight, real-time CLI tool for monitoring network bandwidth and traffic, inspired by Linux's nload.
6
7
 
7
8
  > **[📖 English](readme.md)**
8
9
  > **[📖 简体中文(大陆)](readme.zh-cn.md)**
9
10
  > **[📖 繁體中文(台灣)](readme.zh-tw.md)**
11
+ > **[📖 文言文](readme.lzh.md)**
10
12
  > **[📖 日本語](readme.jp.md)**
11
13
  > **[📖 한국어](readme.ko.md)**
12
14
 
13
15
  [![GitHub](https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/VincentZyuApps/winload)
14
16
  [![Gitee](https://img.shields.io/badge/Gitee-C71D23?style=for-the-badge&logo=gitee&logoColor=white)](https://gitee.com/vincent-zyu/winload)
15
17
 
16
- [![Windows x64 | ARM64](https://img.shields.io/badge/Windows-x64_|_ARM64-0078D4?style=for-the-badge&logo=windows&logoColor=white)](https://github.com/VincentZyuApps/winload/releases)
17
- [![Linux x64 | ARM64](https://img.shields.io/badge/Linux-x64_|_ARM64-FCC624?style=for-the-badge&logo=linux&logoColor=black)](https://github.com/VincentZyuApps/winload/releases)
18
+ [![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)
19
+ [![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)
18
20
  [![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)
19
21
  [![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)
20
22
 
21
23
  [![PyPI](https://img.shields.io/badge/PyPI-3776AB?style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/winload/)
22
- [![npm](https://img.shields.io/badge/npm-CB3837?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/winload-rust-bin)
23
24
  [![Crates.io](https://img.shields.io/badge/Crates.io-000000?style=for-the-badge&logo=rust&logoColor=white)](https://crates.io/crates/winload)
24
25
 
25
- [![Scoop](https://img.shields.io/badge/Scoop-7B4AE2?style=for-the-badge&logo=scoop&logoColor=white)](https://scoop.sh/#/apps?q=%22https%3A%2F%2Fgithub.com%2FVincentZyuApps%2Fscoop-bucket%22&o=false)
26
+ [![npm](https://img.shields.io/badge/npm-CB3837?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/@vincentzyuapps/winload)
27
+
28
+ [![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)
26
29
  [![AUR](https://img.shields.io/badge/AUR-1793D1?style=for-the-badge&logo=archlinux&logoColor=white)](https://aur.archlinux.org/packages/winload-rust-bin)
27
30
  [![APT](https://img.shields.io/badge/APT-E95420?style=for-the-badge&logo=debian&logoColor=white)](https://github.com/VincentZyuApps/winload/releases)
28
31
  [![RPM](https://img.shields.io/badge/RPM-CB1626?style=for-the-badge&logo=redhat&logoColor=white)](https://github.com/VincentZyuApps/winload/releases)
32
+ [![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)
29
33
 
30
34
  > **[📖 Build Docs](.github/workflows/build.md)**
31
35
 
32
36
  ## 🚀 Introduction
33
- 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.
37
+ `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.
34
38
 
35
39
  ## 🙏 Acknowledgements
36
- Winload is inspired by the classic nload project by Roland Riegel. Many thanks for the original idea and experience.
40
+ Winload is inspired by the classic 「[nload](https://github.com/rolandriegel/nload)」 project by Roland Riegel. Many thanks for the original idea and experience.
37
41
  https://github.com/rolandriegel/nload
38
42
 
39
43
  ## ✨ Key Features
@@ -44,7 +48,33 @@ https://github.com/rolandriegel/nload
44
48
  - **Real-time visualization**: live incoming/outgoing graphs and throughput stats.
45
49
  - **Minimal UI**: clean TUI that mirrors nload's ergonomics.
46
50
 
47
- ## 📥 Python Edition Installation
51
+ ## 📊 Performance Benchmarks
52
+ > ⚡ Winload (Rust) achieves **~10ms startup** and **<2MB binary size**, significantly outperforming Python and matching C++ nload in efficiency.
53
+
54
+ ![Winload Benchmark](docs/benchmark/benchmark.svg)
55
+
56
+ ## 🔧 Run from Source
57
+
58
+ ### Python
59
+ ```bash
60
+ git clone https://github.com/VincentZyuApps/winload.git
61
+ # or clone from Gitee (faster in China Mainland):
62
+ # git clone https://gitee.com/vincent-zyu/winload.git
63
+ cd winload/py
64
+ pip install -r requirements.txt
65
+ python main.py
66
+ ```
67
+
68
+ ### Rust
69
+ ```bash
70
+ git clone https://github.com/VincentZyuApps/winload.git
71
+ cd winload/rust
72
+ cargo run --release
73
+ cargo run --release -- --help # Show help
74
+ cargo run --release -- --version # Show version
75
+ ```
76
+
77
+ ## 🐍 Python Edition Installation
48
78
  > 💡 **Implementation Note**: Only PyPI and GitHub/Gitee provide Python edition.
49
79
  > Only Cargo provides Rust source code for local compilation.
50
80
  > All other package managers (Scoop, AUR, npm, APT, RPM) and GitHub Releases distribute **Rust binaries only**.
@@ -54,7 +84,7 @@ pip install winload
54
84
  # recommend use uv:
55
85
  # https://docs.astral.sh/uv/getting-started/installation/
56
86
  # https://gitee.com/wangnov/uv-custom/releases
57
- uv venv
87
+ uv venv --python 3.13
58
88
  uv pip install winload
59
89
  uv run winload
60
90
  uv run python -c "import shutil; print(shutil.which('winload'))"
@@ -63,16 +93,19 @@ uv run python -c "import shutil; print(shutil.which('winload'))"
63
93
  ## 📥 Rust Edition Installation (recommended)
64
94
  ### npm (cross-platform)
65
95
  ```bash
96
+ # Recommended (scoped)
97
+ npm install -g @vincentzyuapps/winload
98
+ # Alternative (unscoped)
66
99
  npm install -g winload-rust-bin
67
- npm list -g winload-rust-bin
100
+ # Alternative (GitHub Packages)
101
+ npm install -g @vincentzyuapps/winload --registry https://npm.pkg.github.com
68
102
  # on Windows, use win-nload to avoid conflict with System32\winload.exe
69
103
  # on Linux/macOS, both winload and win-nload work
70
104
  # or use npx directly
71
- npx winload-rust-bin
105
+ npx @vincentzyuapps/winload
72
106
  ```
73
- > ⚠️ This package will be migrated to `@vincentzyuapps/winload` in a future version for [GitHub Packages](https://github.com/features/packages) compatibility.
74
107
 
75
- > Includes 6 precompiled binaries for x86_64 & ARM64 across Windows, Linux, and macOS.
108
+ > Includes 4 precompiled binaries for x86_64 & ARM64 across Windows, Linux, and macOS.
76
109
 
77
110
  ### Cargo (Build from source)
78
111
  ```bash
@@ -80,14 +113,26 @@ cargo install winload
80
113
  cargo install --list
81
114
  ```
82
115
  ### Windows (Scoop)
116
+ > 📄 [Scoop Bucket (GitHub)](https://github.com/VincentZyuApps/scoop-bucket/blob/main/bucket/winload.json)
117
+ > 📄 [Scoop Bucket (Gitee)](https://gitee.com/vincent-zyu/scoop-bucket/blob/main/bucket/winload.json)
83
118
  ```powershell
84
119
  scoop bucket add vincentzyu https://github.com/VincentZyuApps/scoop-bucket
120
+ # or from Gitee:
121
+ # scoop bucket add vincentzyu https://gitee.com/vincent-zyu/scoop-bucket
122
+ scoop update # optional: manually refresh bucket list before install
85
123
  scoop install winload
86
124
  # execute bin file
87
125
  win-nload
88
126
  Get-Command win-nload # Powershell
89
127
  where win-nload # CMD
90
128
  ```
129
+ > 💡 Recommended: use [Windows Terminal](https://github.com/microsoft/terminal) instead of the legacy Windows Console for correct CJK character rendering and better TUI experience.
130
+ > ```powershell
131
+ > scoop bucket add versions
132
+ > scoop install windows-terminal-preview
133
+ > wtp
134
+ > ```
135
+ > 💡 **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.
91
136
 
92
137
  ### Arch Linux (AUR):
93
138
  ```bash
@@ -105,21 +150,42 @@ which winload
105
150
  ```
106
151
  > 📄 [View install script source](https://github.com/VincentZyuApps/winload/blob/main/docs/install_scripts/install.sh)
107
152
 
153
+ **🇨🇳 Gitee mirror (faster in China Mainland):**
154
+ ```bash
155
+ curl -fsSL https://gitee.com/vincent-zyu/winload/raw/main/docs/install_scripts/install_gitee.sh | bash
156
+ which winload
157
+ ```
158
+ > 📄 [View Gitee install script](https://gitee.com/vincent-zyu/winload/blob/main/docs/install_scripts/install_gitee.sh)
159
+
160
+ > ⚠️ 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.
161
+
162
+ ### macOS / Linux (Homebrew)
163
+ > 📄 [Homebrew Formula (GitHub)](https://github.com/VincentZyuApps/homebrew-tap/blob/main/Formula/winload.rb)
164
+ > 📄 [Homebrew Formula (Gitee)](https://gitee.com/vincent-zyu/homebrew-tap/blob/main/Formula/winload.rb)
165
+ ```bash
166
+ brew tap vincentzyuapps/tap
167
+ # or from Gitee (manual tap clone):
168
+ # git clone https://gitee.com/vincent-zyu/homebrew-tap.git "$(brew --prefix)/Library/Taps/vincentzyuapps/homebrew-tap"
169
+ brew update && brew install winload
170
+ which winload
171
+ ```
172
+ > 💡 Homebrew supports **macOS** (Intel & Apple Silicon) and **Linux** (x86_64 & ARM64).
173
+
108
174
  <details>
109
175
  <summary>Manual install</summary>
110
176
 
111
177
  **DEB (Debian/Ubuntu):**
112
178
  ```bash
113
179
  # Download the latest .deb from GitHub Releases
114
- sudo dpkg -i ./winload_*_amd64.deb
180
+ sudo dpkg -i ./winload*.deb
115
181
  # or use apt (auto-resolves dependencies)
116
- sudo apt install ./winload_*_amd64.deb
182
+ sudo apt install ./winload*.deb
117
183
  which winload
118
184
  ```
119
185
 
120
186
  **RPM (Fedora/RHEL):**
121
187
  ```bash
122
- sudo dnf install ./winload-*-1.x86_64.rpm
188
+ sudo dnf install ./winload*.rpm
123
189
  which winload
124
190
  ```
125
191
 
@@ -133,6 +199,9 @@ which winload
133
199
  winload # Monitor all active network interfaces
134
200
  winload -t 200 # Set refresh interval to 200ms
135
201
  winload -d "Wi-Fi" # Start with a specific device
202
+ winload --title # Show "winload <version>" as the header title
203
+ winload --title "My Monitor" # Use a custom header title
204
+ winload --title "" # Keep the default device header
136
205
  winload -e # Enable emoji decorations 🎉
137
206
  winload --npcap # Capture 127.0.0.1 loopback traffic (Windows, requires Npcap)
138
207
  ```
@@ -144,26 +213,39 @@ winload --npcap # Capture 127.0.0.1 loopback traffic (Windows, requires Npc
144
213
  | `-t`, `--interval <MS>` | Refresh interval in milliseconds | `500` |
145
214
  | `-a`, `--average <SEC>` | Average calculation window in seconds | `300` |
146
215
  | `-d`, `--device <NAME>` | Default device name (partial match) | — |
216
+ | `--title [TITLE]` | Add a title line above device header: no value shows `winload <version>`; empty string (or omitted) shows only the default device header | — |
147
217
  | `-e`, `--emoji` | Enable emoji decorations in TUI 🎉 | off |
148
218
  | `-U`, `--unicode` | Use Unicode block characters for graph (█▓░·) | off |
149
219
  | `-u`, `--unit <UNIT>` | Display unit: `bit` or `byte` | `bit` |
150
220
  | `-b`, `--bar-style <STYLE>` | Bar style: `fill`, `color`, or `plain` | `fill` |
151
221
  | `--in-color <HEX>` | Incoming graph color, hex RGB (e.g. `0x00d7ff`) | cyan |
152
222
  | `--out-color <HEX>` | Outgoing graph color, hex RGB (e.g. `0xffaf00`) | gold |
153
- | `-m`, `--max <VALUE>` | Fixed Y-axis max (e.g. `10M`, `1G`, `500K`) | auto |
223
+ | `-m`, `--max <VALUE>` | Fixed Y-axis max (e.g. `10M`, `1G`, `500K`) — *conflicts with `--smart-max`* | auto |
224
+ | `--smart-max [SECS]` | Smart adaptive Y-axis: auto-decays after traffic spikes (default half-life: 10s) — *conflicts with `--max`* | off |
154
225
  | `-n`, `--no-graph` | Hide graph, show stats only | off |
155
226
  | `--hide-separator` | Hide the separator line (row of equals signs) | off |
156
227
  | `--no-color` | Disable all TUI colors (monochrome mode) | off |
157
228
  | `--npcap` | **[Windows Rust Only]** Capture loopback traffic via Npcap (recommended) | off |
158
- | `--debug-info` | **[Rust Only]** Print network interface debug info and exit | — |
229
+ | `--debug-info` | Print network interface debug info and exit | — |
159
230
  | `-h`, `--help` | Print help (`--help --emoji` for emoji version!) | — |
160
- | `-V`, `--version` | **[Rust Only]** Print version | — |
231
+ | `-V`, `--version` | Print version | — |
232
+
233
+ > **Y-axis scaling modes** — there are three mutually exclusive scenarios:
234
+ >
235
+ > | Mode | Flag | Behavior |
236
+ > |------|------|----------|
237
+ > | **Fixed max** | `--max <VALUE>` | Y-axis is locked to the specified value (e.g. `10M`, `1G`). |
238
+ > | **Smart max** | `--smart-max [SECS]` | Y-axis adapts automatically: jumps up on traffic spikes, then smoothly decays back down (exponential decay, default half-life 10 s). |
239
+ > | **History peak** | *(neither flag)* | Y-axis follows the historical maximum of each metric — the default behavior. |
240
+ >
241
+ > ⚠️ `--max` and `--smart-max` **conflict with each other** — you can only use one at a time.
161
242
 
162
243
  ### Keyboard Shortcuts
163
244
 
164
245
  | Key | Action |
165
246
  |-----|--------|
166
247
  | `←` / `→` or `↑` / `↓` | Switch network device |
248
+ | `F3` | Toggle debug info overlay (Minecraft-style) |
167
249
  | `=` | Toggle separator line visibility |
168
250
  | `c` | Toggle color on/off |
169
251
  | `q` / `Esc` | Quit |
@@ -188,7 +270,40 @@ On Linux and macOS, loopback traffic works out of the box — no extra flags nee
188
270
 
189
271
  ## 🖼️ Previews
190
272
  #### Python Edition Preview
191
- ![docs/preview-py.png](docs/preview-py.png)
273
+ ![docs/images/preview-py.png](docs/images/preview-py.png)
192
274
 
193
275
  #### Rust Edition Preview
194
- ![docs/preview-rust.png](docs/preview-rust.png)
276
+ ![docs/images/preview-rust.png](docs/images/preview-rust.png)
277
+
278
+ ##### Rust Edition Preview GIF
279
+ ![docs/images/preview-rust.gif](docs/images/preview-rust.gif)
280
+
281
+ ##### Terminal Recording
282
+ <a href="https://asciinema.org/a/1030894?startAt=30" target="_blank"><img src="https://asciinema.org/a/1030894.svg" alt="winload demo" width="100%" /></a>
283
+
284
+ > ↑ Recorded by [asciinema](https://github.com/asciinema/asciinema)
285
+
286
+ ## 📦 Dependencies
287
+
288
+ ### Python Edition
289
+
290
+ | Package | Version | Description |
291
+ |:---|:---|:---|
292
+ | [![Python](https://img.shields.io/badge/Python-3.13.11-3776AB?style=flat-square&logo=python&logoColor=white)](https://python.org/) | 3.13.11 | Programming language |
293
+ | [![psutil](https://img.shields.io/badge/psutil-≥7.0-FFD43B?style=flat-square&logo=python&logoColor=white)](https://github.com/giampaolo/psutil) | ≥7.0 | Process and system utilities |
294
+ | [![windows-curses](https://img.shields.io/badge/windows--curses-≥2.0-FFD43B?style=flat-square&logo=python&logoColor=white)](https://github.com/zhirui2020/windows-curses) | ≥2.0 | Windows curses support |
295
+
296
+ ### Rust Edition
297
+
298
+ | Package | Version | Description |
299
+ |:---|:---|:---|
300
+ | [![Rust](https://img.shields.io/badge/Rust-1.93.0-CE422B?style=flat-square&logo=rust&logoColor=white)](https://www.rust-lang.org/) | 1.93.0 | Programming language |
301
+ | [![ratatui](https://img.shields.io/badge/ratatui-0.29-000000?style=flat-square&logo=rust&logoColor=white)](https://github.com/ratatui-org/ratatui) | 0.29 | Terminal UI framework |
302
+ | [![crossterm](https://img.shields.io/badge/crossterm-0.28-000000?style=flat-square&logo=rust&logoColor=white)](https://github.com/crossterm-rs/crossterm) | 0.28 | Cross-platform terminal library |
303
+ | [![sysinfo](https://img.shields.io/badge/sysinfo-0.32-000000?style=flat-square&logo=rust&logoColor=white)](https://github.com/GuillaumeGomez/sysinfo) | 0.32 | System information library |
304
+ | [![clap](https://img.shields.io/badge/clap-4-000000?style=flat-square&logo=rust&logoColor=white)](https://github.com/clap-rs/clap) | 4 | Command-line argument parser |
305
+ | [![pcap](https://img.shields.io/badge/pcap-2-000000?style=flat-square&logo=rust&logoColor=white)](https://github.com/pcap-parser/pcap) | 2 | Packet capture (optional, Windows) |
306
+ ## 🧭 Epilogue
307
+
308
+ Network traffic flows formless through the void — yet Winload gives it shape. Packets traverse the terminal, silent and unseen, but through this window, every thread of throughput takes form before your eyes. If you seek to know the pulse of a machine's connection to the world, this tool is at once a humble lamp upon your desk and a guiding star for the journey ahead.
309
+