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

★ 22,972⑂ 810
GoCreated 2025-12-20pranshuparmar.github.io/witr/
22,972
stars
+58+66+330
810
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions

README

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.

   




 🎮 Try witr in your browser →
Investigate a simulated Linux box — a guided tutorial and free-play sandbox, no install required.





---



Purpose • Installation • AI Agents • TUI • Examples

Flags • Output Behavior • Platforms • Sponsors



---

 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. Ports, services, containers and files all map back to a PID, and for that PID witr answers:

1. What is running?
2. How did it start?
3. What is keeping it running?
4. What context does it belong to?

The answer comes as a single human-readable report, as JSON for scripts and AI agents, or in an interactive TUI dashboard.

bash
witr node                  why is this node process running?
witr --port 8080           what is holding port 8080, and why?
witr --pid 1234 --tree     its ancestry and children as a tree
witr --container redis     a container, across Docker, Podman, Kubernetes and more
witr --port 8080 --json    the same answer for scripts and AI agents
witr                       browse everything in the interactive TUI


 📖 Curious how witr came to be? Read the story.

---

 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)

bash
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, arm64 or loong64 on Linux)
- 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

To install somewhere else, such as ~/.local (no sudo needed), set INSTALL_PREFIX on bash:

bash
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | INSTA

Snapshot: 2026-11-10T09:35:25Z · Data license Apache-2.0 · JSON