mrkeyoor.com_
Wed 23 Sept 00:35 UTC
Dev Toolsevaluationupdated 26 Aug 2026

witr review

witr is a command-line and terminal interface that traces a process, port, container, or open file back through the chain that started it. It combines process, service-manager, container, socket, and working-directory clues so an operator can answer why something is running without manually joining several system tools.

+87stars / 7d
Verdict

Our witr run built in 22 seconds and passed all 7 tests in 11 seconds, so the small Go tool is cheap to evaluate. Install it if mystery ports and supervisor chains routinely send you through ps, lsof, service managers, and container CLIs. Keep the raw system tools nearby for protected processes, PID-reuse edge cases, and the platform cells its own matrix marks as missing.

We ran it

Lab card: what happened when we ran witrScreenshot of witr (pranshuparmar.github.io/witr)
Install✓ · 19s0 packages
Build✓ · 22s
Tests✓ · 11s7 passed · 0 failed of 7 (go test)
Repo292 files~28,135 lines of source · 1 MB · 6 CI workflows

Answers from our run

Does witr build from source?

Dependencies installed in 19 seconds (0 packages), and the build succeeded in 22 seconds. We cloned commit dc4fa1d into a clean Debian container with 3 CPUs and no project-specific setup.

Do witr's tests pass?

Yes: 7 of 7 passed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use witr?

Teams needing a historical process recorder: record and replay is still an open feature request, while witr describes what exists now.

What are the alternatives to witr?

btop, lazydocker, dive. Our witr run built in 22 seconds and passed all 7 tests in 11 seconds, so the small Go tool is cheap to evaluate.

Setup5/5Single binary; our build and all 7 tests passed
Docs5/5Commands, exits, permissions, and platform gaps are explicit
Community4/521,694 stars and active August 2026 fixes
Maturity4/5Broad OS support, with ancestry edge cases still open

Discussed on

  1. hnShow HN: Witr – Explain why a process is running on your Linux system526 points

Who it’s for

Developers debugging mystery listeners, background processes, and supervisors.
On-call engineers who need a quick ancestry chain during an incident.
Operators working across systemd, launchd, Windows Services, FreeBSD rc.d, PM2, and common container runtimes.
Scripts that need deterministic JSON and meaningful exit codes.

Who it’s NOT for

Teams needing a historical process recorder: record and replay is still an open feature request, while witr describes what exists now.
Users who cannot grant elevated access but need details from protected processes: the README says sudo or Administrator rights may be required, and macOS SIP can still hide data.
Windows users who need every TUI feature today: the compatibility table omits locks and process actions, and issue 227 reports missing TCP listeners plus a broken toggle.
Automation that treats every ancestry chain as certain: open issues 219 and 220 cover lost parents and recycled PIDs, both central to causal attribution.

Setup reality

Our Go setup completed in 19 seconds with 0 packages installed. The build passed in 22 seconds, then all 7 Go tests passed in 11 seconds. The checkout used 1 MB and contained 292 files with about 28,135 source lines.

Running the binary needs no account or service. Deeper inspection may require sudo on Linux, macOS, or FreeBSD, or an Administrator terminal on Windows. Container details also depend on the relevant runtime CLI being available on PATH.

The repository had 6 CI workflow files, no Dockerfile, and no tests directory; its tests live alongside Go packages. Prebuilt binaries and many package managers avoid source builds. Platform gaps remain: Windows lacks lock inspection and process actions, and macOS SIP may block details even with sudo.

witr turns ports and containers back into process ancestry

A listening port is usually only the start of an investigation. lsof may identify a PID, ps shows its parent, a service manager knows the unit, and a container CLI supplies the image or Compose service. witr joins those clues into one explanation. A query by process name, PID, port, file, or container ends with an ancestry chain and context such as the working directory, Git branch, sockets, supervisor, and restart count.

The design is narrow enough to remember under pressure. witr --port 5000 --short prints only the ancestry. --tree includes child processes, while --json is available for scripts. Target flags can be repeated and mixed, so one command can inspect a name, port, and PID in sequence. Five documented exit codes distinguish a clean result, warnings, missing targets, permission denial, bad input, and internal errors.

The TUI watches 4 kinds of system evidence

Running witr with no target opens a terminal dashboard with Processes, Ports, Containers, and Locks tabs. The process view can sort and filter entries, then expand a selected process into ancestry, children, environment, sockets, and file context. The container view combines Docker, Podman, nerdctl, Kubernetes through crictl, Incus, LXC, LXD, and FreeBSD jails when their command-line tools are present.

Unix users can terminate, kill, pause, resume, or renice a process from the TUI. That convenience changes the risk profile: inspection and mutation sit in the same interface. Windows does not support those actions, and it also lacks the Locks tab. Auto-refresh begins at 3 seconds and backs off under load. For incident use, start read-only and confirm the selected PID and ancestry before sending a signal.

What happened when we ran it

Our sandbox completed the Go setup in 19 seconds and installed 0 packages. The build passed in 22 seconds. Go test then reported 7 passed and 0 failed in 11 seconds. The measured commit dc4fa1d therefore cleared every install, compiler, and test step that our harness invoked.

The checkout was compact at 1 MB, although it contained 292 files and roughly 28,135 lines of source. We found 6 CI workflow files, no Dockerfile, and no separate tests directory. Go permits tests beside the package source, which is consistent with the 7 cases the command found. These figures measure repository mechanics in a 3-CPU, 8 GB Debian container, not accuracy across every supported operating system.

Our run also did not prove the central causal claims against systemd, PM2, Docker, launchd, Windows Services, or FreeBSD jails. A useful acceptance test should create known chains on each production platform, including a public listener, a restarted service, a container port, and an open file. Compare witr's selected source and ancestry with the native tools before using its JSON in automated response logic.

Permissions and PID reuse limit certainty

System introspection is constrained by the operating system. Linux and FreeBSD may require elevated access to system directories. macOS uses ps, lsof, and launchctl, but System Integrity Protection can hide details even with sudo. Windows talks to native Win32 APIs instead of PowerShell or WMI, yet processes owned by other users or the system may still require an Administrator terminal. Missing context can therefore mean denied visibility rather than no context.

Two open issues cut directly into ancestry accuracy. Issue 219 asks witr to handle processes whose parent has disappeared. Issue 220 says the ancestry walk needs stronger protection against recycled PIDs, where an identifier now belongs to a different process than the original parent. A related pull request stops ancestry at recycled parents. Until that work settles, treat an odd chain as a prompt to verify timestamps and native process records, not as forensic proof.

Platform support is broad but intentionally uneven

The README lists Linux, macOS, Windows, and FreeBSD on x86_64 and arm64. Core lookup by name, PID, port, file, and container is marked available on all 4 systems. Service managers map to systemd, launchd, Windows Services, and rc.d. Windows lacks tmux or screen detection, schedule detection, file locks, and TUI process actions. Linux alone gets Snap and Flatpak detection plus capability warnings.

Windows still has active rough edges. Issue 227 reports TCP LISTEN ports missing from the Ports tab and says the Toggle All action breaks that view; a current pull request normalizes localized listener states. Release v0.3.3 fixed Darwin lsof file-descriptor parsing and added Incus or LXC detection from cgroups. Those changes show why the compatibility matrix needs version-specific testing rather than a checkmark copied into procurement notes.

August 2026 fixes support a cautious install

GitHub showed 21,694 stars and 11 combined open issues and pull requests. The repository was pushed on August 15, 2026, and v0.3.3 was released June 24. Current work covers Windows listeners, recycled PID protection, richer Docker details, and network topology. Record and replay remains a feature request, so witr is a live-state investigator rather than a historical recorder.

The package reach is unusually wide for a young utility: the README lists prebuilt binaries plus Homebrew, Debian, Conda, Winget, npm, FreeBSD Ports, Chocolatey, Scoop, and other channels. Community packages may lag GitHub releases. Pick the operating system's package manager for updates, then validate one known ancestry chain. witr is most useful as a fast first explanation, followed by native evidence when the answer could trigger a production action.

Alternatives

ProjectWhat it isPick it when
btopA terminal resource monitor for processes, CPU, memory, disks, and networks.pick this instead when live resource pressure matters more than tracing who started a process.
lazydocker gh↗A terminal interface for inspecting and operating Docker and Compose workloads.pick this instead when the investigation and actions stay entirely inside Docker.
diveA terminal tool for exploring Docker image layers and wasted space.pick this instead when the mystery is inside an image rather than a running process chain.

What people are saying

  1. [github-trending] pranshuparmar/witr
  2. [producthunt] witr

Sources

  1. witr README
  2. witr repository
  3. witr v0.3.3 release
  4. Recycled PID protection issue
  5. Windows ports TUI issue
  6. Record and replay request

More dev tools reviews

crabbox · asdf · discord.js · h4cker · bend · 100-exercises-to-learn-rust · the whole board →