Skip to content

Installing plugins safely

A plugin is code that runs inside your harness — vet the package and its patch before you install it.

Installing a plugin is the same trust decision as adding any third-party dependency: the package's code runs with your harness's access to sessions, sandboxes, and storage. The catalog verifies that a package declares a dsh.bundle manifest — it does not review the code. Treat the catalog as discovery, not as a security guarantee, and vet a package before it goes into a profile you rely on.

Trust the source, then the contents

Only install from sources you already trust: a publisher you know, a repository you recognise, or a package that has been maintained in the open for a while. Then check the contents — a package name can be squatted or spoofed, so the name alone proves nothing.

Inspect before you install

Start with the metadata:

npm view <package-name>

It shows the description, version, license, repository, and keywords without installing anything. Then pull the exact tarball the registry would install (npm pack <package-name>) and unpack it to read the two things that matter: cordis.patch.yml, which states which plugin rows the package inserts or overrides, and the module entry it references, which is the code that actually runs. The patch is usually small and easy to read; the module is what you are really trusting.

Check the repository

The listing's detail page links the repository or mirror. Confirm it belongs to the publisher you expect, and that the npm repository field agrees. A package whose metadata points somewhere unrelated, or whose repository history does not match its story, is a red flag.

Try it in a scratch profile

Install into a dedicated trial profile before your real one:

dsh plugin --profile trial add <package-name>

Then confirm the layer applied:

dsh --profile trial --dump-config

If the layer is missing, the package has no dsh.bundle and installed as an ordinary dependency — it contributes no configuration (see Install your first plugin).

Remove it when done

dsh plugin --profile trial remove <package-name>

Removing drops both the dependency and its layer, so a trial profile is easy to clean up. When you are happy with the package, install it into the profile you actually use.

Last updated 2026-08-22