Skip to main content

pnpm Workspace Cheatsheet — 60+ Commands for Monorepo Development

Dense, searchable pnpm workspace reference — 60+ commands covering filter syntax, workspace protocols, recursive scripts, and monorepo pitfalls.

  • Runs locally
  • Category Developer & DevOps
  • Best for Formatting, validating, shrinking, or inspecting code-adjacent text.
Section:
60 commands
pnpm · Setup (7)
pnpm-workspace.yaml

Root config file that declares which directories are workspace packages. Glob patterns under `packages:` select all matching directories.

Input
packages:
  - "packages/*"
  - "apps/*"
  - "!**/__tests__/**"
Output
(all subdirs of packages/ and apps/ become workspace packages)

Common pitfall: The file must live at the workspace root (same level as the root package.json). Putting it in a subdirectory silently does nothing.

Examples
# pnpm-workspace.yaml
packages:
  - "packages/*"
  - "apps/*"
# include a specific path too
packages:
  - "packages/*"
  - "tools/codegen"
pnpm init (at workspace root)

Bootstrap the workspace root package.json. Add `"private": true` immediately — the root should never be published to npm.

Common pitfall: Forgetting `"private": true` on the root package means `pnpm publish` could accidentally publish your monorepo root.

Examples
pnpm init
# then add to package.json:
# "private": true
# root package.json minimum
{
  "name": "my-monorepo",
  "private": true,
  "version": "0.0.0"
}
catalog: (pnpm-workspace.yaml, pnpm 9+)

Catalog pins shared dependency versions centrally in pnpm-workspace.yaml. Packages reference them with `catalog:` instead of a version string.

Input
catalog:
  react: "^18.3.0"
  typescript: "^5.4.0"
# package.json in any workspace pkg:
# "react": "catalog:"
Output
(all packages using "catalog:" get the same pinned version)

Common pitfall: catalog: requires pnpm 9+. On pnpm 8 or older, the field is silently ignored and packages get no version constraint, breaking installs.

Examples
# pnpm-workspace.yaml
catalog:
  react: "^18.3.0"
  vite: "^5.0.0"
# packages/ui/package.json
"dependencies": {
  "react": "catalog:"
}
shamefully-hoist=true (.npmrc)

Makes pnpm hoist all transitive deps to the root node_modules, mimicking npm/yarn. Fixes tools that reach into node_modules without declaring deps.

Common pitfall: shamefully-hoist hides phantom dependency bugs. Prefer `public-hoist-pattern[]=<pkg>` to hoist only the specific offending package.

Examples
# .npmrc
shamefully-hoist=true
# Better: only hoist the specific package
# .npmrc
public-hoist-pattern[]=*eslint*
public-hoist-pattern[]=*prettier*
node-linker=hoisted (.npmrc)

Alternative to shamefully-hoist. Uses a flat hoisted node_modules layout without fully shameful hoisting — a middle ground for compatibility.

Examples
# .npmrc
node-linker=hoisted
# also useful for Next.js / Vercel deployments
# node-linker=hoisted
# strict-peer-dependencies=false
pnpm install (workspace root)

Installs all dependencies for every package in the workspace with a single command from the root.

Examples
pnpm install
# CI: fail if lockfile would change
pnpm install --frozen-lockfile
pnpm workspace --help

Print the built-in workspace command help. Useful for discovering subcommands.

Examples
pnpm workspace --help
pnpm --help | grep filter
pnpm · Filter (13)
pnpm --filter <package-name> <cmd>

Run a command only in the package whose `name` field in package.json matches exactly. The most common filter form.

Examples
pnpm --filter @myapp/ui run build
pnpm --filter my-backend run start:dev
pnpm --filter "./<dir>" <cmd>

Filter by directory path relative to the workspace root. The leading `./` is required to distinguish a path from a package name.

Examples
pnpm --filter "./apps/web" run dev
pnpm --filter "./packages/*" run test
pnpm --filter "{./packages/**}" <cmd>

Filter by a glob on the directory path. Curly braces wrap path globs in pnpm filter syntax.

Examples
pnpm --filter "{./packages/**}" run lint
pnpm --filter "{./apps/*}" run build
pnpm --filter <pkg>... <cmd>

Trailing `...` adds the package AND all of its transitive dependencies. Useful to rebuild a package with everything it needs.

Common pitfall: The `...` is part of the filter string, not a shell glob. Quote it to prevent the shell from expanding it: `--filter "myapp..."` or `--filter 'myapp...'`.

Examples
pnpm --filter "@myapp/ui..." run build
pnpm --filter 'my-api...' run test
pnpm --filter ...^<pkg> <cmd>

Select all packages that are dependants (consumers) of `<pkg>`. Run after changing a shared lib to re-test everything that imports it.

Examples
pnpm --filter '...^@myapp/utils' run test
pnpm --filter '...^@myapp/ui' run build
pnpm --filter "[<git-ref>]" <cmd>

Select packages with files changed since the given git ref. The square brackets denote a git-based diff filter.

Examples
pnpm --filter "[main]" run build
pnpm --filter "[HEAD~1]" run test
pnpm --filter "[origin/main]" run lint
pnpm --filter "...[<git-ref>]" <cmd>

Select packages changed since git ref AND their dependants. Rebuilds everything that could be affected by the diff — the standard CI pattern.

Common pitfall: Without the leading `...`, only the changed packages run — their dependants may ship a broken build even though their dependencies changed.

Examples
pnpm --filter "...[origin/main]" run build
# GitHub Actions example:
pnpm --filter "...[origin/${{ github.base_ref }}]" run test
pnpm --filter <a> --filter <b> <cmd>

Multiple --filter flags are OR-ed together: the command runs in any package matching filter a OR filter b.

Examples
pnpm --filter @myapp/ui --filter @myapp/utils run lint
pnpm --filter "./apps/*" --filter "@myapp/shared" run build
pnpm --filter !<package-name> <cmd>

Exclude a specific package from the filter set. The `!` negates the match.

Examples
pnpm --filter !@myapp/docs run build
pnpm -r --filter !legacy-package run test
pnpm ls --filter <package-name>

List the dependency tree for a single workspace package.

Examples
pnpm ls --filter @myapp/ui
pnpm ls --filter @myapp/ui --depth 2
pnpm --filter "@myapp/*" <cmd>

Filter all packages under a given scope using a wildcard. Matches any package whose name starts with @myapp/.

Examples
pnpm --filter "@myapp/*" run lint
pnpm --filter "@mycompany/*" run build
pnpm --filter <pkg> --filter <dep> <cmd>

Run in specific package and a dependency together. Useful when you want to build a lib and its dependent consumer in one pass.

Examples
pnpm --filter @myapp/utils --filter @myapp/web run build
pnpm ls --recursive

List every dependency across all workspace packages recursively. Helps audit what is installed where.

Examples
pnpm ls --recursive
pnpm ls -r --depth 0   # top-level only
pnpm · Install (9)
pnpm add <pkg> --filter <workspace-pkg>

Add a dependency to a specific workspace package from anywhere in the repo — no need to cd.

Common pitfall: Omitting --filter from the workspace root adds the dep to the ROOT package.json, not any child package. Usually wrong.

Examples
pnpm add react --filter @myapp/ui
pnpm add -D typescript --filter @myapp/utils
pnpm add lodash --filter "./packages/helpers"
pnpm add -w <pkg>

Add a dependency to the workspace root (`-w` / `--workspace-root`). For shared dev tools like eslint, prettier, turbo.

Common pitfall: Root-level prod deps are unusual. Most root packages should be `"private": true`; add runtime deps to specific child packages instead.

Examples
pnpm add -Dw eslint prettier typescript turbo
pnpm add -Dw vitest
pnpm install --frozen-lockfile

Fail if the lockfile would need to be updated instead of silently mutating it. Required in CI to detect out-of-sync lockfiles.

Common pitfall: Without --frozen-lockfile in CI, a developer who forgets to commit the updated lockfile will cause CI to silently install different versions than local.

Examples
# In CI (GitHub Actions, etc.)
pnpm install --frozen-lockfile
# Also equivalent:
pnpm ci
pnpm install --ignore-workspace

Install only the root workspace's own dependencies, skipping all child packages. Rarely needed; useful for a root-only tool install step.

Examples
pnpm install --ignore-workspace
pnpm update --filter <pkg> <dep>

Update a specific dependency in one workspace package to its latest allowed version.

Examples
pnpm update --filter @myapp/ui react
pnpm update --filter @myapp/api --latest
pnpm update -r

Update all dependencies across all workspace packages to their latest versions allowed by the semver ranges in each package.json.

Common pitfall: After pnpm update -r, always run the full test suite. A batch update can surface subtle incompatibilities between packages.

Examples
pnpm update -r
pnpm update -r --latest   # ignore semver ranges
pnpm why <pkg> --filter <workspace-pkg>

Show why a package is installed in a specific workspace package — which dependency chain pulled it in.

Examples
pnpm why lodash --filter @myapp/web
pnpm why esbuild --filter @myapp/build
pnpm dedupe

Reduce the number of packages in the lockfile by deduplicating dependency versions across the workspace.

Examples
pnpm dedupe
# check what would be deduped without changing anything:
pnpm dedupe --check
pnpm remove <pkg> --filter <workspace-pkg>

Remove a dependency from a specific workspace package and update its package.json.

Examples
pnpm remove lodash --filter @myapp/utils
pnpm remove -D eslint --filter @myapp/web
pnpm · Scripts (9)
pnpm -r run <script>

Run a script recursively in all workspace packages that define it. `-r` is short for `--recursive`.

Common pitfall: pnpm -r run exits non-zero if ANY package's script fails. Use --if-present to skip packages that don't have the script instead of erroring.

Examples
pnpm -r run build
pnpm -r run test
pnpm -r run lint
pnpm -r run <script> --if-present

Recursively run a script but silently skip packages that don't define it. Prevents errors in heterogeneous monorepos.

Examples
pnpm -r run build --if-present
pnpm -r run generate --if-present
pnpm run --filter <pkg> <script>

Run a script in a specific workspace package. Equivalent to cd-ing into the package and running `pnpm run <script>`.

Examples
pnpm run --filter @myapp/web dev
pnpm run --filter @myapp/api start
pnpm -r run <script> --parallel

Run the script in all packages in parallel rather than respecting the dependency graph order. Faster for independent tasks; dangerous if packages depend on each other's build outputs.

Common pitfall: With --parallel, pnpm builds package A and B at the same time even if B imports A. If B's build starts before A's build finishes, B fails. Omit --parallel when there are build-order dependencies.

Examples
pnpm -r run test --parallel
pnpm -r run lint --parallel
pnpm -r run <script> --stream

Stream output from all packages to the terminal interleaved, prefixed with the package name. Default without --stream is to buffer per-package and print sequentially.

Examples
pnpm -r run dev --stream
pnpm -r run test --stream --parallel
pnpm exec --filter <pkg> <cmd>

Execute a shell command inside a specific package directory, with the package's node_modules/.bin on PATH.

Examples
pnpm exec --filter @myapp/web tsc --noEmit
pnpm exec --filter @myapp/api prisma migrate dev
pnpm -r exec <cmd>

Execute a shell command recursively in every workspace package directory.

Examples
pnpm -r exec -- node -e "console.log(process.env.npm_package_name)"
pnpm -r exec rm -rf dist
pnpm --filter <pkg> run <script> -- --arg

Pass extra arguments to a package script using `--` separator. Everything after `--` is forwarded to the script.

Examples
pnpm --filter @myapp/web run build -- --mode production
pnpm --filter @myapp/api run test -- --watch
pnpm -r run build --workspace-concurrency 4

Limit how many packages build in parallel. Default is 4. Lower it to reduce memory pressure on CI machines with many packages.

Examples
pnpm -r run build --workspace-concurrency 2
pnpm -r run test --workspace-concurrency 1   # serial
pnpm · Protocol (7)
"dep": "workspace:*"

Reference a local workspace package and resolve at publish time to the exact version in that package's package.json. Best for apps that don't publish to npm.

Input
# package.json of packages/web
"dependencies": {
  "@myapp/ui": "workspace:*"
}
Output
# After `pnpm changeset publish` replaces workspace: refs:
"@myapp/ui": "2.1.0"
Examples
"@myapp/ui": "workspace:*"
"@myapp/utils": "workspace:*"
"dep": "workspace:^"

At publish time resolves to a caret range `^X.Y.Z` using the local version. Standard for publishable libraries that depend on sibling packages.

Input
"@myapp/utils": "workspace:^"
# @myapp/utils is currently at 3.0.0
Output
"@myapp/utils": "^3.0.0"   # in published package.json

Common pitfall: Using workspace:* on a publishable library publishes `"dep": "exact-version"` (no caret). Consumers are pinned to that exact version and can't get patches automatically.

Examples
"@myapp/types": "workspace:^"
"@myapp/core": "workspace:^"
"dep": "workspace:~"

At publish time resolves to a tilde range `~X.Y.Z` — allows patch updates but not minor. More conservative than workspace:^.

Examples
"@myapp/config": "workspace:~"
"dep": "workspace:1.2.3"

Pin to an explicit version that must exist as a workspace package. Rarely needed; prefer workspace:* for most cases.

Examples
"@myapp/legacy": "workspace:1.0.0"
pnpm pack (with workspace: replaced)

pnpm pack automatically replaces workspace: protocol references with resolved version strings in the tarball's package.json — no manual step needed.

Examples
# From the package directory:
pnpm pack
# Inspect the tarball to verify resolved deps:
tar -tf my-package-1.0.0.tgz
pnpm link --filter <pkg> --global

Link a workspace package globally so other projects outside the monorepo can consume the local version during development.

Common pitfall: Global links are not tracked by git and break for teammates who clone fresh. Use the workspace protocol for inter-repo linking; global link is a personal dev hack.

Examples
pnpm link --filter @myapp/utils --global
# Then in the consumer project:
pnpm link --global @myapp/utils
pnpm pack --filter <pkg>

Create a .tgz tarball for a specific workspace package to inspect what will actually be published, including resolved workspace: refs.

Examples
pnpm pack --filter @myapp/utils
# Inspect the tarball:
tar -tzf myapp-utils-1.0.0.tgz | head -30
pnpm · Publish (6)
pnpm changeset

Create a changeset file describing what changed and the intended version bump type (major / minor / patch). Run this when opening a PR with user-facing changes.

Common pitfall: changesets requires the @changesets/cli package installed at the workspace root. Add it with `pnpm add -Dw @changesets/cli`.

Examples
pnpm changeset
# interactive CLI: select packages, bump type, and description
# or with --empty for a no-bump changeset:
pnpm changeset --empty
pnpm changeset version

Consume all pending changeset files, bump package.json versions accordingly, and update CHANGELOG.md files. Run after merging a release PR.

Examples
pnpm changeset version
# Preview what would change:
pnpm changeset status
pnpm changeset publish

Publish all packages whose version has changed to npm. Runs `pnpm build` (or the configured publish script) per package first.

Common pitfall: Requires npm login (`npm login`) or an NPM_TOKEN env var. Without it, publish fails with 401 Unauthorized.

Examples
pnpm changeset publish
# dry-run to see what would publish:
pnpm changeset publish --dry-run
pnpm publish --filter <pkg>

Publish a single workspace package to npm without changesets. Useful for manual hotfix releases.

Examples
pnpm publish --filter @myapp/utils
pnpm publish --filter @myapp/utils --access public --no-git-checks
pnpm -r publish --access public

Publish all workspace packages to npm, setting them all to public access. Needed for scoped packages (@scope/name) which default to restricted.

Common pitfall: Scoped packages (@myorg/pkg) are private by default on npm. Without `--access public` you'll get a 402 Payment Required error.

Examples
pnpm -r publish --access public
pnpm -r publish --access public --no-git-checks
pnpm version --filter <pkg> <bump>

Bump the version of a single workspace package (patch / minor / major). Writes the new version to package.json.

Examples
pnpm version --filter @myapp/utils patch
pnpm version --filter @myapp/api minor
pnpm · Pitfalls (9)
Phantom dependencies in strict mode

pnpm's default strict node_modules layout means packages can only import what they explicitly list in their own package.json. Importing a transitive dep that isn't declared causes a MODULE_NOT_FOUND error — but only at runtime.

Common pitfall: If `import "some-package"` works in your npm project but fails in pnpm, that's a phantom dependency. Fix it by adding `some-package` to the correct package.json devDependencies. Don't hide it with shamefully-hoist.

Examples
# To find which package actually owns some-package:
pnpm why some-package --filter @myapp/web
Lockfile version conflict on pnpm upgrade

pnpm lockfile format changes across major versions. After upgrading pnpm, run `pnpm install` to regenerate the lockfile with the new format before committing.

Common pitfall: Committing a lockfile in the old format after a pnpm upgrade causes every team member (and CI) to get a "ERR_PNPM_LOCKFILE_MISSING_DEPENDENCY" or format mismatch error until they regenerate locally.

Examples
# After upgrading pnpm:
pnpm install
git add pnpm-lock.yaml
git commit -m "chore: regenerate lockfile for pnpm vX"
Package not found after rename

Renaming a workspace package (changing its `name` in package.json) without updating all `workspace:` references in sibling packages breaks the install.

Common pitfall: pnpm install will fail with "No matching version found for @old/name" because the workspace protocol looks for the name, not the directory.

Examples
# After renaming @myapp/foo to @myapp/bar:
# 1. Update all "workspace:*" refs from @myapp/foo → @myapp/bar
# 2. pnpm install
# grep to find all stale references:
grep -r "@myapp/foo" packages/ apps/
peer dependency warnings in workspace

pnpm surfaces peer dependency issues more aggressively than npm. A `WARN … peer dependencies unmet` message may not break the build but can indicate real compatibility issues.

Common pitfall: Setting `strict-peer-dependencies=false` in .npmrc silences the warnings but doesn't fix the underlying issue. Investigate before silencing.

Examples
# To silence peer dep warnings globally (use sparingly):
# .npmrc
strict-peer-dependencies=false
# To see what peer deps are unmet:
pnpm ls --depth 1 --filter @myapp/web
"workspace:*" in publishable package

Using `workspace:*` in a package you publish to npm means consumers get `"dep": "1.2.3"` (pinned exact). They can't receive patches without updating the whole parent — use `workspace:^` instead.

Examples
# Wrong for published libs:
"@myapp/utils": "workspace:*"
# Right for published libs:
"@myapp/utils": "workspace:^"
pnpm run at wrong cwd

Running `pnpm run dev` from the workspace root when you mean to run it for one specific package runs the root package's `dev` script (often undefined) instead.

Common pitfall: If the root has no `dev` script you'll get "ERR_PNPM_NO_SCRIPT". Either use `--filter` or cd into the package directory first.

Examples
# Always use --filter from root:
pnpm run --filter @myapp/web dev
# Or cd first:
cd apps/web && pnpm run dev
Missing --frozen-lockfile in CI

Running plain `pnpm install` in CI lets pnpm update the lockfile silently if package.json drifted. Always use `pnpm install --frozen-lockfile` or `pnpm ci` in automated pipelines.

Examples
# .github/workflows/ci.yml
- run: pnpm install --frozen-lockfile
# equivalent shorthand:
- run: pnpm ci
pnpm catalog: on pnpm < 9

The `catalog:` specifier in package.json is silently treated as an unknown version on pnpm < 9 — packages install with no version constraint, or the install fails outright.

Common pitfall: Run `pnpm --version` before adopting catalog:. If your team or CI has mixed pnpm versions, enforce a minimum with `engines.pnpm` in the root package.json.

Examples
# root package.json
"engines": {
  "pnpm": ">=9.0.0"
}
# Also add to .npmrc:
engine-strict=true
Turborepo cache stale after dep change

If you use Turborepo with pnpm workspaces, renaming a package or changing workspace: refs invalidates turbo's dependency graph hash. Run `turbo run build --force` to bust the cache after structural changes.

Examples
turbo run build --force
# Or delete the .turbo directory:
rm -rf .turbo && turbo run build

What this tool does

Searchable pnpm workspace cheat sheet with 60+ commands covering every monorepo task you hit day-to-day. Setup section: creating pnpm-workspace.yaml with glob patterns, using the pnpm catalog feature (pnpm 9+) to pin shared dependency versions, and enabling shamefully-hoist for tools that don't play well with strict node_modules. Filter section — the heart of workspace usage: --filter selects packages by name, directory path, git diff, or dependency graph; ^pkg adds all dependents; pkg... adds all dependencies; ...pkg adds all dependants; combining filters with comma or multiple --filter flags; filtering by changed files since a git ref. Install section: pnpm install at workspace root, --frozen-lockfile in CI, adding a dependency to a specific package with --filter, the difference between workspace-level and package-level installs. Scripts section: pnpm run --filter, pnpm -r run <script> to run across all packages, --parallel and --stream flags, ordering by dependency graph with --if-present to skip missing scripts. Publish section: changesets workflow (add → version → publish), pnpm publish --filter, version bumping, access and registry flags. Protocol section: workspace:*, workspace:^, workspace:~ in package.json dependencies, how pnpm resolves them at publish time, when to use each variant. Link section: pnpm link vs workspace protocol, --global flag, when local linking beats workspace. Pitfall section: hoisting surprises, phantom dependencies in strict mode, .npmrc flags, CI frozen-lockfile gotchas, catalyst package not found after rename, pnpm catalog gotchas, lockfile version conflicts. Every entry: bilingual EN/ZH descriptions, ready-to-copy examples, real-world input/output where relevant. Search filters across command, description, examples, and pitfall text at once. 100% client-side, works offline on a jump host — which is exactly where you need it.

Tool details

Input
Text
The page exposes text boxes, numeric controls, file pickers, or structured inputs depending on the tool.
Output
Live result + Copy + Preview
The result area focuses on usable output, with copy, download, or preview actions when supported.
Privacy
Browser-side processing
The main tool logic does not call an external API, so inputs normally stay in the current tab.
Save / share
Shareable URL state
Key settings are encoded in the URL so another person can reopen the same setup.
Performance budget
Initial JS <= 28 KB
No WASM budget is declared, keeping the tool quick to open on mobile.
Best fit
Developer & DevOps · Developer
Category and role tags drive related tools, internal links, and quick fit checks.

How to use

  1. 1. Input

    Paste or drop your content into the tool panel.

  2. 2. Process

    Click the button. All processing is local in your browser.

  3. 3. Copy / Download

    Copy the result or download to disk in one click.

How pnpm Workspace Cheatsheet fits into your work

Use it in the small gaps between coding, reviewing, debugging, and shipping.

Developer jobs

  • Formatting, validating, shrinking, or inspecting code-adjacent text.
  • Preparing snippets for documentation, tickets, commits, or handoff.
  • Checking a small payload quickly without switching tools.

Developer checks

  • Run irreversible transforms like minify or obfuscate on a copy.
  • Keep secrets out of pasted snippets unless the tool explicitly stays local.
  • Use your normal tests or linter before shipping transformed code.

Good next steps

These links move the current task into a more complete workflow.

  1. 1 npm / yarn / pnpm Cheatsheet npm / yarn / pnpm cheat sheet — 80+ commands across init, install, scripts, publish, with cross-tool comparison. Open
  2. 2 package.json Cheatsheet package.json field reference — 55+ fields explained with real examples, bilingual, searchable. Open
  3. 3 Git Cheatsheet Git command cheat sheet — searchable, with explanations, common mistakes, and real examples. Open

Real-world use cases

  • Set up CI to only rebuild packages affected by a PR

    Your monorepo has 40 packages and full builds take 12 minutes. You wire `pnpm --filter "...[origin/main]" run build` into GitHub Actions on pull_request. Only the 2 changed packages and their 3 dependents run — the CI time drops to 90 seconds. The filter section's git-ref patterns and the `...` dependant syntax are exactly what make this possible.

  • Add a shared ESLint config without hoisting headaches

    You want all packages to share one @myapp/eslint-config. You set `"@myapp/eslint-config": "workspace:*"` in each package's devDependencies, create the config package under packages/eslint-config, and run `pnpm install` at the workspace root. The workspace protocol cheatsheet entries and the pitfall entry about phantom dependencies guide you past the most common traps.

  • Publish a new major version of one library without touching others

    You need to release @myapp/utils@2.0.0 with breaking changes while leaving @myapp/ui at 1.x. You run `pnpm changeset`, select "major" for utils only, then `pnpm changeset version`. Only utils/package.json bumps to 2.0.0. The dependent apps get a workspace:^2.0.0 range update automatically via the changeset tooling. The publish section covers each step.

Common pitfalls

  • Running `pnpm add lodash` at the workspace root when you meant to add it to a specific package. Use `--filter` or `cd` into the package directory first.

  • Using `workspace:*` for a publishable library. Published consumers receive the exact version pinned — they cannot get patches automatically. Use `workspace:^` for publishable libraries instead.

  • Forgetting `--frozen-lockfile` in CI. Without it, pnpm silently mutates the lockfile when package.json drifted, masking dependency drift bugs until production.

Privacy

Every command, the search box, section filters, and the copy button run entirely in your browser against an in-memory JavaScript array. No command text, search term, or clipboard content is sent to a server or written to the page URL. Open DevTools → Network and type: zero outbound requests. Works offline on a plane or an air-gapped jump host.

FAQ

Tool combos

Folks in your role tend to reach for these alongside this tool.

Made by Toolora · 100% client-side · Updated 2026-07-01