mermaid-js/mermaid · error

The service [ ] cannot be placed within itself

Error message

The service [${id}] cannot be placed within itself

What it means

Thrown by addService when the service's parent ('in' field) equals its own id. Placing a service inside itself would create a self-referential containment cycle, so the db rejects it explicitly before any structural work.

Solutions

  1. Ensure the parent id differs from the service id.
  2. Omit the 'in' field when the service is top-level.
  3. Validate id !== parent before calling addService.

Example fix

// before
db.addService({ id: 'svc', in: 'svc' });

// after
db.addService({ id: 'svc' }); // top-level
// or
db.addService({ id: 'svc', in: 'groupA' });
Defensive patterns

Strategy: validation

Validate before calling

if (id === parent) {
  throw new Error(`Service '${id}' cannot be its own parent`);
}
db.addService({ id, in: parent });

Prevention

When it happens

Trigger: addService({ id: 'X', in: 'X' }); or user text like 'service: X { ... } in X'.

Common situations: Auto-generated architecture specs where a node is mistakenly listed as its own parent, or a templating bug copies a node id into its parent slot.

Related errors


AI-assisted analysis of mermaid-js/mermaid@d93e9c88c0 (2026-08-12). Data as JSON: /api/errors/4cc7f141a0125515. Report an issue: GitHub.

Appendix: source

Thrown at packages/mermaid/src/diagrams/architecture/architectureDb.ts:89

    this.diagramId = '';
    commonClear();
  }

  public addService({
    id,
    icon,
    in: parent,
    title,
    iconText,
  }: Omit<ArchitectureService, 'edges'>): void {
    if (this.registeredIds.has(id)) {
      throw new Error(
        `The service id [${id}] is already in use by another ${this.registeredIds.get(id)}`
      );
    }
    if (parent !== undefined) {
      if (id === parent) {
        throw new Error(`The service [${id}] cannot be placed within itself`);
      }
      if (!this.registeredIds.has(parent)) {
        throw new Error(
          `The service [${id}]'s parent does not exist. Please make sure the parent is created before this service`
        );
      }
      if (this.registeredIds.get(parent) === 'node') {
        throw new Error(`The service [${id}]'s parent is not a group`);
      }
    }

    this.registeredIds.set(id, 'node');

    this.nodes.set(id, {
      id,
      type: 'service',
      icon,
      iconText,

View on GitHub (pinned to d93e9c88c0)