---
id: "custom"
type: "component"
kind: "custom"
provider: "default"
category: "custom"
url: "https://localhost:3000/catalogue/components/custom"
---

# Custom

Untyped and unjudged: a node the catalogue has no word for. Use it to keep the diagram complete, then replace it with a catalogue component or contribute one.

| | |
|---|---|
| Provider | [default](https://localhost:3000/catalogue?provider=default) |
| Kind | [Custom](https://localhost:3000/catalogue/kinds/custom) |
| Category | Custom |
| Official docs | not recorded |
| Generic? | The escape hatch: untyped on purpose |

## Properties

This entity defines no properties.

## Rules that apply · 1

### Custom node `custom-node` (warning)

- Page: https://localhost:3000/catalogue/rules/custom-node.md
- Why: A custom node is a hole in the model: the catalogue has no word for it, so no rule can check anything about it. It is meant to be temporary, and naming it in the catalogue closes the hole.
- Applies to: every node of kind custom
- Message: Node '{{node.id}}' is custom: no rule can judge it. Replace it with a catalogue component or contribute one (docs/governance.md).

It fires when:

- the node's `anyProperty` has no value

## Other products of the same kind · 0

## Use it in a design

```yaml
nodes:
  - { id: "custom", component: "custom" }
```

## Source (`component` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../../schema/component.schema.json
# The untyped node. It sets no defaults because there is no product behind it: what this box
# is, only its label says, and the linter reads labels for nobody.
schemaVersion: "1"
type: "component"
id: "custom"
kind: "custom"
provider: "default"
```

Human page: https://localhost:3000/catalogue/components/custom
