< back_to_blog

Introducing Winnom: Know Your Node

Announcement
Introducing Winnom: Know Your Node

Every developer who's lived with Node for more than a week knows the moment. Something is holding :3000. You didn't start it. Or you started it four terminals ago and closed the terminal but not the process. Task Manager shows you eleven node.exe entries, all identically named, all equally useless. You start killing them one by one and hope you didn't just take down the thing you were actually working on.

That's the moment Winnom is built for.

## What it is

Winnom is a lightweight native Windows app that finds every node.exe running on your machine, tells you what each one is actually doing, and lets you end any of them with one click. No Electron, no bundled browser engine, no 200 MB install — it's a WPF window built on .NET 10 that starts instantly and stays out of your way.

It's available now at winnom.app.

## What it shows you

For every Node process on your system, Winnom surfaces the stuff Task Manager refuses to:

  • - What it's serving. Next.js, Vite, Nuxt, NestJS, webpack, nodemon, ts-node, Jest, and the rest of the usual suspects get recognized by fingerprinting the command line. Anything unfamiliar just shows the script file name, so you're never staring at a blank "node.exe" again.
  • - Listening ports. Pulled straight from the kernel TCP table — no scraping netstat output — so you know exactly which process owns :3000.
  • - Uptime, CPU, and memory. How long it's been alive, live CPU sampled between refreshes, and working-set memory.
  • - Per-process network IO. Bytes up and down, per process (more on the asterisk below).

Up top, the same numbers rolled up across everything: total process count, total CPU, total memory, total throughput. One glance and you know whether your machine is busy or just lying to you.

## Reveal in Explorer

Every row has a šŸ“ button that opens Explorer right at the folder the process is running out of, highlighting the actual script file when it can find it. It does this by reading the target process's real working directory out of its PEB — so "which index.js is this one?" finally has an answer.

## End process, and mean it

The red End process button kills the process and its entire child tree. There's a quick confirmation first, because unsaved work is unsaved work and we're not animals.

## The admin asterisk

Per-process network IO comes from an ETW kernel trace session, and opening one of those is a privileged operation. Run Winnom normally and everything works — except the network numbers, which politely say "needs admin." Launch it as administrator and the network columns light up. Everything else needs no elevation, so you only reach for the elevated launch when you actually care about throughput.

## Built native, on purpose

PieceJob
Process scannerEnumerates node.exe, pulls command lines, samples CPU
ClassifierTurns a command line into "what it's serving"
Port mapperGetExtendedTcpTable → listening ports per PID
Network monitorETW kernel session → per-PID bytes sent/received
Path resolverReads the target's working directory from its PEB

64-bit only — the PEB-reading bits assume the x64 process layout, and in 2026 that's a bet we're comfortable making.

## Get it

Head to winnom.app to download. It's framework-dependent on the .NET 10 desktop runtime, which you almost certainly already have if you're the kind of person who has eleven stray Node processes.

Stop guessing which one owns the port. Go find out.

— The CHKDSK Labs team