---
title: "DF0066: Service Already Installed"
description: "Service \"{package}\" is already installed; keeping the first installation and ignoring this one's options."
canonical_url: "https://devfra.me/errors/df0066"
---
# DF0066: Service Already Installed

> Service "\{package}" is already installed; keeping the first installation and ignoring this one's options.

## 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 return the existing node API. Options only merge before `ctx.services.ready()` fires, when declared services are constructed. A later `ctx.services.install()` for an already-constructed package can no longer influence its configuration, so its options 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 devframe's `DevframeDefinition.services`, or hub-wide via `initHub({ services })`:

```ts
initHub({
  services: [
    createShikiService({ themes })
  ], // ✓ merges before setup
  devframes: [/* … */],
})
```

## Source

- [`packages/devframe/src/node/host-services.ts`](https://github.com/devframes/devframe/blob/main/packages/devframe/src/node/host-services.ts): `installPackage` warns when an already-installed package is installed again.


## Sitemap

See the full [sitemap](https://devfra.me/sitemap.md) for all pages.
