mrkeyoor.com_
Sat 07 Nov 06:54 UTC
Dev Toolsevaluationupdated 27 Oct 2026

witr review

witr is a CLI and terminal dashboard for investigating why a process is running. Its README describes lookups by name, PID, port, file, or container, with ancestry, supervisor, and system context in human-readable reports or JSON. Attribution is best effort: the documented output can mark an exited parent or report an unknown cause.

+53stars / 7d
Verdict

witr is worth evaluating when occupied ports and supervisor chains send you through several system tools. Our October 10, 2026 run at commit 7e46fa6 recorded successful setup, build, and go test steps, but did not verify an installed CLI or diagnostic accuracy on live workloads. The README now documents explicit handling of exited parents and unknown causes; issues 220 and 227 are closed, with the maintainer attributing their fixes to v0.3.4. Validate a known process chain on your own platform before relying on the output for production actions.

We ran it

Lab card: what happened when we ran witrScreenshot of witr (pranshuparmar.github.io/witr)
Install✓ · 26s0 packages
Build✓ · 21s
Tests✓ · 15s16 passed · 0 failed of 16 (go test)
Repo334 files~34,676 lines of source · 1.3 MB · 6 CI workflows

Answers from our run

Does witr build from source?

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

Do witr's tests pass?

Yes. The project's own test command finished in 15 seconds and reported 16 passed, 0 failed (go test).

Who should not use witr?

Teams needing built-in historical recording and replay: issue 194 remains an open request.

What are the alternatives to witr?

btop, lazydocker. witr is worth evaluating when occupied ports and supervisor chains send you through several system tools.

Setup3/5The October 10, 2026 run at 7e46fa6 completed setup, build, and go test successfully. Static binaries and package-manager routes are documented, but an installed CLI was not verified.
Docs4/5The README specifies target flags, seven exit codes, JSON stability boundaries, permissions, and platform limits. Our run did not validate every documented behavior.
Community3/5The supplied issues show user reports, maintainer replies, and completed fixes for issues 220 and 227. They do not establish adoption, support capacity, or response-time guarantees.
Maturity3/5The README documents JSON contracts and unknown-cause handling, and the maintainer reports fixes in v0.3.4. Platform gaps and the absence of live diagnostic validation limit this assessment.

Discussed on

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

Who it’s for

Developers investigating occupied ports, background processes, and supervisor chains.
Operators who want process ancestry and service or container context in one report.
Script authors who can handle documented JSON fields, warnings, permission failures, and unknown causes.

Who it’s NOT for

Teams needing built-in historical recording and replay: issue 194 remains an open request.
Users who need protected process details without elevated privileges. The README documents permission restrictions, including macOS SIP limits even with sudo.
Windows users who require file locks or TUI process actions, which the compatibility matrix marks unavailable.
Automation that requires every process to have a provable original parent. The documented output explicitly allows unknown causes.

Setup reality

In our recorded run on October 10, 2026, commit 7e46fa68151fd7c59fb7a0cf4247a9a0ac0fbb6e completed the setup step in 26 seconds, the build step in 21 seconds, and the go test step in 15 seconds, each with exit code 0. The setup tail records downloading Go 1.25.10. The dependency counter was 0; that does not mean nothing was downloaded or prove that a usable CLI was installed.

The parser summary records 16 successful package results and 0 failures. The retained test tail repeats package results in a summary section, so these figures do not establish 16 unique tests or exhaustive coverage. No installed-binary check or live diagnostic workload is recorded. The build tail contains vet-exit:0; the retained output does not expose the complete build command.

The recorded environment had 3 CPUs, 8 GB of memory, and image golang:1.24-bookworm. The image label does not establish the toolchain actually used. Repository measurements were 334 files, about 34,676 source lines, 1.3 MB, and 6 CI workflows, with no Dockerfile, Compose file, or separate tests directory detected. No security audit result is recorded.

The README describes static binaries and package-manager installation for Linux, macOS, Windows, and FreeBSD. Community packages may lag releases. Container lookup requires the relevant runtime CLI on PATH, and deeper process inspection may require sudo or an Administrator terminal.

A process explanation can include an unknown cause

Finding the PID behind a port does not always explain what started it. witr aims to join process ancestry with service-manager, container, socket, and working-directory context. The useful distinction is how it handles missing evidence: its README describes best-effort attribution and an explicit unknown source when the original parent has exited and surviving context cannot explain the process.

That makes witr a candidate for developers debugging occupied ports and operators investigating background services. It does not make every reported chain forensic proof. Our recorded run checked repository command execution; it did not measure the correctness of those explanations.

CLI reports and the terminal dashboard

The README documents lookups by process name, PID, port, open file, or container. witr --port 5000 --short prints ancestry, --tree includes children, and --json supplies structured output. Target flags can be repeated and mixed.

There are seven documented exit codes, numbered 0 through 6: clean result, found with warnings, not found, permission denied, invalid input, internal error, and cause unknown. Code 1 means the process was found with warnings. Code 6 means it was found but its cause could not be traced; the README says this code is not used on Windows, where launcher processes routinely exit.

For scripts, match JSON fields and exit codes. The documented stability contract covers field names, meanings, and types, while allowing additional fields. It does not cover field order, whitespace, or human-readable message wording.

Running without arguments in a terminal opens the TUI. Its documented views cover processes, ports, containers, and locks, subject to platform support. Unix process actions include terminate, kill, pause, resume, and renice. Confirm the selected process before taking an action. An output mode such as --json without a target exits with code 4 rather than opening the dashboard.

What our recorded run establishes

On October 10, 2026, our stored sandbox run used commit 7e46fa68151fd7c59fb7a0cf4247a9a0ac0fbb6e, dated October 4, 2026. Setup completed in 26 seconds, the build step in 21 seconds, and go test in 15 seconds. Each recorded step exited successfully.

The setup output says go: downloading go1.25.10 (linux/amd64). Although the dependency counter records 0, the run clearly downloaded a toolchain. Setup-step completion does not establish that the CLI was installed or available on PATH. The build step is marked successful, with vet-exit:0 in its retained tail; the complete command is not supplied.

The parser summary records 16 successful package results and 0 failures. The retained tail contains package-level results followed by repeated summary lines. We therefore cannot describe the summary as 16 unique passing tests or an exhaustive package count. It establishes successful execution of the recorded go test step, with the supplied count limits.

The environment had 3 CPUs and 8 GB of memory, with image golang:1.24-bookworm. Its label does not establish the actual toolchain version. The checkout measured 1.3 MB, 334 files, and about 34,676 source lines. Detection found 6 CI workflows and no Dockerfile, Compose file, or separate tests directory. Package test results are present despite the absence of a dedicated tests directory.

No installed-binary check, live process-attribution workload, cross-platform validation, or security audit result is recorded. These timings describe this run, not expected installation time or incident-response performance.

Exited parents and Windows reports need version context

The earlier recycled-PID report, issue 220, concerned v0.3.3. It is now closed as completed, and the maintainer's October 4, 2026 comment says the fix is available with v0.3.4. The README describes marking an ancestry break when a parent PID has disappeared or belongs to an unrelated process, rather than crediting an adopting process. It also documents reporting an unknown source when surviving context cannot establish one. Those are upstream descriptions, not behavior independently validated by our run.

Issue 227 reported missing TCP listeners and a broken Ports-tab toggle on German-locale Windows 11 Pro with witr v0.3.3. That issue is also closed as completed, with the maintainer identifying v0.3.4 as containing the fix. It should not be presented as an unresolved defect in the current implementation. Our Linux sandbox run does not independently verify the Windows correction.

The supplied v0.3.3 release notes separately list Darwin lsof parsing and Linux Incus/LXC detection changes. Neither those release notes nor the issue closures establish that every platform case works correctly.

Permissions and platform limits still matter

The README lists Linux, macOS, Windows, and FreeBSD support, including x86_64 and arm64, plus loong64 on Linux. Its matrix marks name, PID, port, file, and container lookup available across all four systems. Container inspection requires the corresponding runtime CLI on PATH.

The same matrix marks Windows file locks and TUI process actions unavailable. Environment access is limited by macOS SIP and Windows protected processes. Linux and FreeBSD inspection may require elevated permissions; macOS SIP can hide details even with sudo, and Windows inspection of other users' processes or system services may require an Administrator terminal. Missing details can reflect access restrictions.

Historical investigation is a separate requirement. Issue 194 remains an open request for record and replay. The maintainer discusses periodically saving JSON for a known PID, while the requester explains why that does not provide full-system history. Do not choose witr on the assumption that it can reconstruct an unrecorded process after it disappears.

Choose by the investigation you need

btop's README describes resource usage and process statistics, including a process tree view. Choose it when CPU, memory, disk, or network pressure is the main question. Lazydocker's README describes a Docker and Compose terminal UI with logs, metrics, and container or service management actions. Choose it when the work stays within those workloads.

For witr, the next useful check is a known process chain on the operating system you use. Compare its ancestry and selected source with native process and service records, then check how it represents a missing parent or denied access. This is a suggested acceptance check, not a workload completed in our sandbox.

How the ratings work

These are editorial ratings on a five-point scale: 1 means substantial obstacles, 2 means limited evidence or fit, 3 means adequate evidence with material limits, 4 means strong support with specific gaps, and 5 requires unusually complete support for the rated dimension. Setup uses the recorded steps and installation documentation; docs uses the supplied README; community uses the supplied issue discussions; maturity uses documented contracts, platform limits, and issue resolution. Unknown adoption and untested compatibility do not earn higher scores.

Alternatives

ProjectWhat it isPick it when
btopA resource monitor for processor, memory, disk, network, and process statistics.Choose btop when resource usage and process statistics are the main question. Its README also documents a process tree view.
lazydocker gh↗A terminal UI for Docker and Docker Compose.Choose lazydocker when you need container or service logs, metrics, and Docker management actions such as restarting or rebuilding.

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

git-cliff · blackbird · czkawka · controller-runtime · openchoreo · terraform-provider-azurerm · the whole board →