# @isaacs/which

> Like which(1) unix command. Find the first instance of an executable in the PATH.

Latest version **7.0.4** (published 2026-02-09) · ISC license · 0 weekly downloads

## Install

```sh
npm install @isaacs/which
pnpm add @isaacs/which
yarn add @isaacs/which
bun add @isaacs/which
```

## Health

**Score 60/100 (C)** — status: stable.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 7.0.4 |
| Published | 2026-02-09 |
| First published | 2026-02-08 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | ^20.17.0 \|\| >=22.9.0 |
| Dependencies | 1 |
| Unpacked size | 79.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Maintainers | isaacs |

## Links

- npm: https://www.npmjs.com/package/@isaacs/which
- Repository: https://github.com/isaacs/which
- Homepage: https://github.com/isaacs/which#readme
- Issues: https://github.com/isaacs/which/issues
- npm.io page: https://npm.io/package/@isaacs/which

## Dependencies (1)

- [isexe](https://npm.io/package/isexe.md) ^4.0.0

## Recent versions

- 7.0.4 (latest) — 2026-02-09
- 7.0.3 — 2026-02-08
- 7.0.2 — 2026-02-08
- 7.0.1 — 2026-02-08

## README

# @isaacs/which

Like the unix `which` utility.

Finds the first instance of a specified executable in the PATH
environment variable. Does not cache the results, so `hash -r` is not
needed when the PATH changes.

## Fork Notice

This is a fork of the original `which` module that I wrote in
2011, because that became the property of npm, and I wanted a
hybrid CommonJS/ESM typescript implementation, which doesn't
align with the npm team's needs.

I'm ok with the fork continuing to exist. It is fine for
different parties to have different priorities. This is a small
module, and it does no harm to have multiple copies in the world.

## USAGE

```ts
import { which, whichSync } from '@isaacs/which'

// async usage
// rejects if not found
const resolved = await which('node')

// if nothrow option is used, returns null if not found
const resolvedOrNull = await which('node', { nothrow: true })

// sync usage
// throws if not found
const resolved = whichSync('node')

// if nothrow option is used, returns null if not found
const resolvedOrNull = whichSync('node', { nothrow: true })

// Pass options to override the PATH and PATHEXT environment vars.
await which('node', { path: someOtherPath, pathExt: somePathExt })
```

## OPTIONS

You may pass an options object as the second argument.

- `path`: Use instead of the `PATH` environment variable.
- `pathExt`: Use instead of the `PATHEXT` environment variable.
- `all`: Return all matches, instead of just the first one. Note that
  this means the function returns an array of strings instead of a
  single string.

---
_Source: https://npm.io/package/@isaacs/which · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
