> ## Documentation Index
> Fetch the complete documentation index at: https://docs.meow.style/llms.txt
> Use this file to discover all available pages before exploring further.

# Observability

> why-dep, why-large, why-slow, doctor, and ls — built-in tools for understanding real-world project drag.

meow ships verbs for answering the questions every real project eventually asks:
*why is this package here, what's bloating my install, why is startup slow, and is
my environment healthy?*

## why-dep — dependency provenance

Trace exactly how a package ended up in your tree. meow reads `meow.lock.jsonl` and
prints every chain from a direct dependency down to the target.

```bash theme={null}
meow why-dep is-number
```

```text theme={null}
╭─ why-dep is-number ─────────────────────────╮
│ is-number is in the dependency tree — 1 version(s). │
│ (each chain starts at a project direct dependency)  │
│ is-number@6.0.0  integrity sha512-…          │
│   my-app@0.1.0 → is-odd@3.0.1 → is-number@6.0.0     │
╰──────────────────────────────────────────────╯
```

| Flag          | Effect                                                         |
| ------------- | -------------------------------------------------------------- |
| `--shortest`  | Show one shortest chain per version instead of every chain.    |
| `--json`      | Emit the structured report for tooling.                        |
| `--limit <n>` | Cap chains enumerated per version before reporting truncation. |

It exits non-zero if the package isn't in the tree — handy in scripts that assert a
dependency is (or isn't) present.

## why-large — what's heavy

List the packages in your lockfile by their cached tarball size, so you can see
what's actually costing you.

```bash theme={null}
meow why-large
```

```text theme={null}
╭─ meow why-large ────────────────────────────╮
│ ◔ 128 packages · 84.2 MB total               │
│ typescript                       12.1 MB  14% │
│ @next/swc-darwin-arm64            9.8 MB  11% │
│ …                                            │
╰──────────────────────────────────────────────╯
```

## why-slow — cold-start timing

Report process-init timing and, given a target, basic module + lockfile stats —
a quick read on cold-start drag.

```bash theme={null}
meow why-slow
meow why-slow main.ts
```

```text theme={null}
╭─ meow why-slow ─────────────────────────────╮
│ ◔ cold start · 18ms                          │
│ 18ms process init · meow-cli 0.0.0           │
│ module        0.2ms   3.1 KB                 │
│ path          main.ts                        │
│ lockfile      0.1ms   128 packages           │
╰──────────────────────────────────────────────╯
```

## doctor — environment health

A one-glance check of your project and global state: `package.json`, lockfile,
`node_modules`, and the cache.

```bash theme={null}
meow doctor
```

```text theme={null}
╭─ meow doctor ───────────────────────────────╮
│ ◉ meow 0.0.0                                 │
│ ✓ package.json    found                      │
│ ✓ lockfile        128 packages               │
│ ✓ node_modules    materialized               │
│ ✓ cache           ~/.meow/cache              │
╰──────────────────────────────────────────────╯
```

Run it first whenever something feels off — a missing lockfile or unmaterialized
`node_modules` shows up immediately.

## ls — active dev servers

List dev servers currently listening, with friendly labels for well-known ports.

```bash theme={null}
meow ls
```

```text theme={null}
PID    SERVICE          PORT
48213  Vite             5173
48990  Next.js / React  3000
```

meow recognizes common ports out of the box — Next.js/React (3000), Astro (4321),
Vite (5173) and Vite Preview (4173), Tauri (1420), Wrangler (8787), and more.

<Note>
  `meow ls` discovers listeners via `lsof`, so it's available on macOS and Linux
  where `lsof` is present.
</Note>

<Card title="Configuration reference" icon="file-code" href="/configuration/meow-config">
  Every key in meow\.config.json.
</Card>
