Skip to content

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

Released under the MIT License.