Profiles vs bundles
The two things the install commands work with, and why the catalog only ever lists one of them.
The install commands deal with two different objects: bundles, which are packages, and profiles, which are compositions of packages. The difference explains both how the CLI works and what the catalog contains.
A bundle is a package
A bundle is an npm package whose package.json declares a dsh.bundle
manifest. That declaration is what makes it a plugin rather than a library: it
ships a patch layer (cordis.patch.yml) and the module the layer references,
and installing it into a profile activates that layer. Bundles are what authors
publish, and they are the only thing this catalog lists.
A profile is a composition
A profile is one runnable composition of bundles: the list plus its order. The
CLI manages profiles for you β installing adds a bundle, removing drops it, and
the order of the list is the order the layers apply, with later bundles
overriding earlier ones. A profile is local, generated state on your machine
($DSH_HOME/profiles/<name>), never published and never listed in the catalog.
A typical workflow
Name a profile in the install command and the first install creates it, seeded
with @deepseek-ai/dsh-base as its first bundle. Install a couple of bundles,
then confirm the layers applied in order:
dsh plugin --profile demo add <bundle-a>
dsh plugin --profile demo add <bundle-b>
dsh --profile demo --dump-config
The verify output shows the layers in the profile's bundle order, which is the order the profile will apply at boot. Remove a bundle the same way when you are done:
dsh plugin --profile demo remove <bundle-b>
Why the distinction matters
If you remember only one thing: the catalog is a list of bundles. A profile is
your local answer to "which bundles do I run together, and in what order" β two
machines can have completely different profiles built from the same listings.
When a package is missing from the catalog but installs locally, check whether
it actually declares dsh.bundle: without it, the package is a library that
installs into a profile but adds no layer.
Neither concept replaces the other. You publish a bundle once and reuse it in as many profiles as you like, and every profile is reproducible from the same public bundles. That is the whole model: bundles are the units of distribution, profiles are the units of execution.
Last updated 2026-08-22