witr is a free, open source monitoring & observability project written in Go and released under Apache-2.0. It has 22,374 GitHub stars, 781 forks and 17 open issues, and was last pushed 1 months ago. On this registry it ranks #14 of 97 tracked projects in Monitoring & Observability, with 5 head-to-head comparisons available. It gained 38 stars over the last 3 tracked days.

What is witr?

witr is an open-source, Apache-2.0 licensed Go tool with both a command-line interface and an interactive terminal UI that traces any process, port, container, or file back to the exact chain of systems that started it, and it is built for operators, SREs, and developers who need to answer "why is this running?" during debugging and incident response.

What it is

witr exists to answer one question: why is this running? Whenever something is running on a system — a process, a service, or anything bound to a port — there is always a cause, and that cause is often indirect, non-obvious, or spread across multiple layers such as supervisors, containers, services, or shells. The project is a single static binary written in Go that reports where a running thing came from, how it was started, and which chain of systems is responsible for it existing right now, delivered as human-readable output, machine-readable JSON, or an interactive TUI dashboard. It sits in the Infrastructure & Operations / Monitoring & Observability category and is distributed under the Apache-2.0 licence, with packaging maintained independently across a wide range of operating system ecosystems.

The concrete problem it solves is manual correlation. Existing tools — ps, top, lsof, ss, systemctl, and docker ps — expose state and metadata. They show what is running, but they leave the user to infer why by comparing output from one tool against output from another. witr makes that causality explicit in a single place, so the answer to why a port is held or a container is alive does not require three terminals and a mental join across supervisor, container runtime, and service manager layers.

Key capabilities

  • Traces processes, ports, containers, and files back to the exact starting chain rather than reporting state alone.
  • Offers three consumption modes from one tool: human-readable terminal output, machine-readable JSON, and an interactive TUI dashboard.
  • Ships as a single static binary covering Linux, macOS, Windows, and FreeBSD.
  • Provides a browser sandbox with a guided tutorial and free-play environment that investigates a simulated Linux box, requiring no install.
  • Documents an explicit flags and options reference plus a core concept section describing how traces are assembled.
  • Installs a man page as witr.1 alongside the binary for offline reference.
  • Is packaged across many ecosystems, including brew, conda, aur, winget, npm, and ports.

Who uses it and how

  • Incident responders use it on live hosts to reconstruct why an unexpected process or port binding exists before making changes.
  • DevOps and platform engineers use it across Docker and Kubernetes environments where the responsible layer is a supervisor, a container runtime, or a service manager rather than a login shell.
  • Operators on Linux, macOS, FreeBSD, and Windows use the platform-specific install paths for their environment.
  • Developers use it on their own machines to explain stray processes and listening sockets without assembling a picture from several utilities.
  • Tooling authors consume the JSON output to feed trace data into other automation.

Getting started

On Linux, macOS, and FreeBSD the quickest route is the install script, invoked as curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash, which detects the OS and CPU architecture, downloads the latest released binary and man page, installs the binary to /usr/local/bin/witr, and honours INSTALL_PREFIX to override the path. On Windows, irm https://raw.githubusercontent.com/pranshuparmar/witr/main/install.ps1 | iex downloads and checksum-verifies the release, extracts witr.exe to %LocalAppData%\witr\bin, and adds that directory to the user PATH; apt install witr and other package managers are also available.

How it compares

The tools witr positions itself beside are ps, top, lsof, ss, systemctl, and docker ps, all of which expose state and metadata for a single layer and leave the user to infer cause. witr does not replace their state reporting; it adds the causal explanation across supervisors, containers, services, and shells that those tools individually cannot produce.

When to use it — and when not to

witr is a single static binary, so there is no database, object storage, or SMTP service to operate; the install script only needs write access to /usr/local/bin and the man page directory, which INSTALL_PREFIX can redirect. Community packages may lag GitHub releases because they go through independent review and validation, so anyone who needs the newest behaviour should prefer the install script over a distribution package. It is the wrong pick for environments where the responsible party cannot be inspected at the process-tree level, since a trace depends on visibility into the layers that actually launched the thing.

project readme (upstream, from github) — read inline

witr

Why is this running?

Trace any process, port, container, or file back to the exact chain that started it —
one command, machine-readable JSON, or an interactive TUI.

Latest Release Platforms
Package Managers

pranshuparmar/witr on Trendshift witr - Why is this running? Trace process, port, container or file. | Product Hunt

🎮 Try witr in your browser →

Investigate a simulated Linux box — a guided tutorial and free-play sandbox, no install required.

witr's interactive TUI and CLI answering why a node process is running — the same systemd → PM2 → node chain in both


PurposeInstallationTUIFlagsCore ConceptExamples
Output BehaviorPlatformsSuccess CriteriaSponsors


1. Purpose

witr exists to answer a single question:

Why is this running?

When something is running on a system, whether it is a process, a service, or something bound to a port, there is always a cause. That cause is often indirect, non-obvious, or spread across multiple layers such as supervisors, containers, services, or shells.

Existing tools (ps, top, lsof, ss, systemctl, docker ps) expose state and metadata. They show what is running, but leave the user to infer why by manually correlating outputs across tools.

witr makes that causality explicit.

It explains where a running thing came from, how it was started, and what chain of systems is responsible for it existing right now, in a single, human-readable output or an interactive TUI dashboard.

📖 Curious how witr came to be? Read the story or browse the Hacker News discussion.


2. Installation

witr is distributed as a single static binary for Linux, macOS, FreeBSD, and Windows.

witr is also independently packaged and maintained across multiple operating systems and ecosystems. An up-to-date overview of packaging status is available on Repology. Please note that community packages may lag GitHub releases due to independent review and validation.

[!TIP] If you use a package manager (Homebrew, Conda, Winget, etc.), we recommend installing via that for easier updates. Otherwise, the install script is the quickest way to get started.


2.1 Quick Install

Unix (Linux, macOS & FreeBSD)
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash
Script Details

The script will:

  • Detect your operating system (linux, darwin or freebsd)
  • Detect your CPU architecture (amd64 or arm64)
  • Download the latest released binary and man page
  • Install it to /usr/local/bin/witr
  • Install the man page to /usr/local/share/man/man1/witr.1
  • Pass INSTALL_PREFIX to override default install path
Windows (PowerShell)
irm https://raw.githubusercontent.com/pranshuparmar/witr/main/install.ps1 | iex
Script Details

The script will:

  • Download the latest release (zip) and verify checksum.
  • Extract witr.exe to %LocalAppData%\witr\bin.
  • Add the bin directory to your User PATH.

2.2 Package Managers

APT (Debian, Ubuntu & Derivatives) Debian

You can install witr from the official Debian and Ubuntu repositories (Ubuntu 26.04+, Debian sid and later), as well as derivative distributions like Kali Linux, Devuan, and Raspbian:

sudo apt install witr

Note: The apt-shipped version may lag the latest GitHub release. For the newest features, use the install script or another installation method.

Homebrew (macOS & Linux) Homebrew

You can install witr using Homebrew on macOS or Linux:

brew install witr
MacPorts (macOS) MacPorts

You can install witr using MacPorts on macOS:

sudo port install witr
Conda (macOS, Linux & Windows) Conda

You can install witr using conda, mamba, or pixi on macOS, Linux, and Windows:

conda install -c conda-forge witr
# alternatively using mamba
mamba install -c conda-forge witr
# alternatively using pixi
pixi global install witr
Arch Linux (AUR) AUR

On Arch Linux and derivatives, install from the AUR package:

yay -S witr-bin
# alternatively using paru
paru -S witr-bin
# or use your preferred AUR helper
Winget (Windows) Winget

You can install witr via winget:

winget install -e --id PranshuParmar.witr
NPM (Cross-platform) NPM

You can install witr using npm:

npm install -g @pranshuparmar/witr
FreeBSD Ports FreeBSD Port

You can install witr on FreeBSD from the FreshPorts port:

pkg install witr
# or
pkg install sysutils/witr

Or build from Ports:

cd /usr/ports/sysutils/witr/
make install clean
Chocolatey (Windows) Chocolatey

You can install witr using Chocolatey:

choco install witr
Scoop (Windows)

readme truncated — read the full docs on github

Frequently asked questions

Is witr free to use?

witr is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does witr do?

Why is this running? Trace any process, port, container, or file back to what started it - CLI + TUI.

What is witr written in?

witr is primarily written in Go. Its source is publicly available at https://github.com/pranshuparmar/witr, and it has 22,374 GitHub stars.