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. Option sets from multiple installers only merge before the ctx.services.ready() barrier fires — an install that arrives after the service was constructed can no longer influence its configuration, so any options it carried are dropped with this warning.

Example

ts
await ctx.services.ready()

// ✗ The service is already constructed; { themes } is ignored.
await ctx.services.install(createShikiService({ themes }))

Fix

Install the service (or declare it in DevframeDefinition.services) before the barrier — a host's explicit installs during setup/configure naturally run before the adapter fires ready(), so its options join the merge:

ts
await initHub({
  async configure(ctx) {
    ctx.services.install(createShikiService({ themes })) // ✓ merges
  },
})

Source

Released under the MIT License.