---
id: "pubsub-topic"
type: "kind"
category: "messaging"
url: "https://localhost:3000/catalogue/kinds/pubsub-topic"
---

# Pub/Sub topic

Fan-out topic. Every subscriber receives every message.

| | |
|---|---|
| Category | Messaging |
| Properties | 5 |
| Components | 13 |
| Rules | 1 |

## Properties

| property | type | values | required | default |
|---|---|---|---|---|
| `delivery` | enum | `at-most-once`, `at-least-once`, `exactly-once` | yes | — |
| `managed` | boolean | — | no | false |
| `ordering` | enum | `none`, `per-key` | no | "none" |
| `replay` | boolean | — | no | false |
| `topicPerEventType` (advanced) | boolean | — | no | true |

## Rules for this kind · 1

### Pub/Sub topic where replay is required `pubsub-replay-required` (error)

- Page: https://localhost:3000/catalogue/rules/pubsub-replay-required.md
- Why: The design declares that consumers must be able to replay history. A fan-out topic that does not retain messages cannot deliver that.
- Applies to: every node of kind pubsub-topic
- Message: Topic '{{node.id}}' cannot replay messages, but the design requires replay. Use a stream or a replayable queue.

It fires when:

- all of these hold:
  - the design requirement `messaging.replay` is true
  - the node's `replay` is false

## Components · 13

### vendor-neutral

- [Generic Pub/Sub topic](https://localhost:3000/catalogue/components/pubsub-topic.md) `pubsub-topic` — the kind itself

### alibabacloud

- [EventBridge](https://localhost:3000/catalogue/components/alibaba-eventbridge.md) `alibaba-eventbridge` — 2 defaults

### aws

- [Amazon EventBridge](https://localhost:3000/catalogue/components/aws-eventbridge.md) `aws-eventbridge` — 5 defaults
- [Amazon SNS](https://localhost:3000/catalogue/components/sns.md) `sns` — 4 defaults

### azure

- [Azure Event Grid](https://localhost:3000/catalogue/components/azure-event-grid.md) `azure-event-grid` — 4 defaults
- [Azure Event Grid MQTT Broker](https://localhost:3000/catalogue/components/azure-event-grid-mqtt.md) `azure-event-grid-mqtt` — 5 defaults

### default

- [Eclipse Mosquitto](https://localhost:3000/catalogue/components/mosquitto.md) `mosquitto` — 4 defaults
- [MQTT broker](https://localhost:3000/catalogue/components/mqtt-broker.md) `mqtt-broker` — 3 defaults
- [NanoMQ](https://localhost:3000/catalogue/components/nanomq.md) `nanomq` — 4 defaults
- [Redis Pub/Sub](https://localhost:3000/catalogue/components/redis-pubsub.md) `redis-pubsub` — 3 defaults

### gcp

- [Eventarc](https://localhost:3000/catalogue/components/google-eventarc.md) `google-eventarc` — 4 defaults
- [Google Cloud Pub/Sub](https://localhost:3000/catalogue/components/google-pubsub.md) `google-pubsub` — 4 defaults

### oci

- [OCI Events](https://localhost:3000/catalogue/components/oci-events.md) `oci-events` — 4 defaults

## Source (`kind` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../schema/kind.schema.json
# Abstract kind: Fan-out topic. Every subscriber receives every message. Contrast with queue (one consumer) and stream (replayable log).
schemaVersion: "1"
type: "kind"
id: "pubsub-topic"
category: "messaging"
properties:
  delivery:
    type: "enum"
    values: ["at-most-once", "at-least-once", "exactly-once"]
    required: true
  replay:
    type: "boolean"
    default: false
  ordering:
    type: "enum"
    values: ["none", "per-key"]
    default: "none"
  topicPerEventType:
    type: "boolean"
    default: true
    advanced: true
  managed:
    type: "boolean"
    default: false
```

Human page: https://localhost:3000/catalogue/kinds/pubsub-topic
