DF0066: Service Already Installed
Message
Service "
{package}" is already installed — keeping the first installation and ignoring this one's options.
Cause
Wire services are deduplicated by npm package name: the first installation wins, and later installs of the same package return the existing node API. Declared services are constructed once before setup runs, deep-merging every declarer's options. Calling ctx.services.install() for an already-constructed package — the dynamic escape hatch used after that point — can no longer influence its configuration, so any options it carries are dropped with this warning.
Example
ts
// The package is already declared (and constructed pre-setup) elsewhere.
// ✗ This late install can't merge; { themes } is ignored.
ctx.services.install(createShikiService({ themes }))Fix
Declare the service so its options join the pre-setup merge — on the plugin's DevframeDefinition.services, or host-wide via initHub({ services }):
ts
initHub({
services: [createShikiService({ themes })], // ✓ merges before setup
devframes: [/* … */],
})Source
packages/devframe/src/node/host-services.ts—installPackagewarns when an already-installed package is installed again.