clumsy makes your network condition on Windows significantly worse, but in a managed and interactive manner.
clumsy uses WinDivert to capture live packets, apply impairments such as lag, drop, throttle, duplicate, tamper, reset, and bandwidth limits, then reinject the packets. It is useful for testing applications under poor network conditions without changing application code or setting up a proxy.
Version 4.0 adds native application-level filtering. You can now limit clumsy's impairments to traffic owned by a selected executable while unrelated traffic passes through normally.
to be added
clumsy must be run as Administrator because it uses WinDivert to intercept packets.
Install Visual Studio 2022 or Visual Studio Build Tools with the Desktop development with C++ workload, then run:
build.batThis creates a 64-bit release build by default. Pass the configuration and platform
to select another build, for example build.bat Debug x32. The script locates
MSBuild, copies the required runtime files, writes a build log under .build, and
prints detected compiler or MSBuild errors when the build fails. When started by
double-clicking, a failed build waits for a key press so the error remains visible.
Set BUILD_NO_PAUSE=1 before running the script to disable the pause for automation;
the script also disables it automatically when the CI environment variable is set.
Incremental builds reuse MSBuild outputs and skip the generated project's obsolete
absolute-path post-build commands.
- Native "Limit to application" controls in the Filtering panel.
- Process-name matching, for example
Game.exeorSpeedtest.exe. - Full-path matching with a Browse button for exact executable selection.
- Multiple targets separated with commas or semicolons.
- Child-process matching for launchers and portable apps, such as
SpeedtestPortable.exelaunchingSpeedtest.exe. - WinDivert FLOW tracking plus IP Helper seeding so existing and newly opened TCP/UDP flows can be attributed to process IDs.
- Target-aware packet capture that narrows the NETWORK-layer filter to known target TCP/UDP ports when the app filter is enabled.
- Live status counters for target PIDs, target flows, UDP endpoints, affected packets, passed packets, and unknown packets.
- Run clumsy as Administrator.
- Choose a packet filter, for example
outbound and (tcp or udp). - Enable the impairment modules you want, such as lag, drop, throttle, or bandwidth.
- Optional: check "Limit to application".
- Enter an executable name such as
Speedtest.exe, or use Browse to select a full path. - Click Start.
When the application filter is disabled, clumsy keeps its original system-wide behavior.
The application filter is built for the common case where you want to test one app without disrupting debuggers, calls, browsers, or other unrelated network activity.
The normal packet filter still controls which traffic clumsy is allowed to capture. When "Limit to application" is enabled, clumsy only applies impairments to TCP/UDP packets attributed to the selected executable name or full path. Non-target and unknown packets are passed through unchanged.
Example:
- Packet filter:
outbound and (tcp or udp) - Application:
Speedtest.exe
Notes:
- Process-name matching is case-insensitive.
- In process-name mode,
gamealso matchesgame.exe. - Browse fills in a full executable path and switches matching to full-path mode.
- Multiple applications can be separated with commas or semicolons.
- Child-process matching is enabled, which helps launchers and portable apps.
- The target app does not need to be running before clumsy starts.
- Unknown or unattributed packets pass through unchanged by design.
- Loopback attribution has the same caveats as clumsy's existing loopback support.
clumsy supports latency, delay, packet loss, throttling, packet duplication, out-of-order delivery, tampering, connection reset, and bandwidth limiting on Windows.
MIT

