---
id: "aws-ivs-chat"
type: "component"
kind: "realtime-gateway"
provider: "aws"
category: "edge"
docs: "https://docs.aws.amazon.com/ivs/latest/ChatUserGuide/what-is.html"
url: "https://localhost:3000/catalogue/components/aws-ivs-chat"
---

# Amazon IVS Chat

Managed live chat rooms with a WebSocket messaging data plane.

| | |
|---|---|
| Provider | [aws](https://localhost:3000/catalogue?provider=aws) |
| Kind | [Real-time gateway](https://localhost:3000/catalogue/kinds/realtime-gateway) |
| Category | Edge |
| Official docs | [https://docs.aws.amazon.com/ivs/latest/ChatUserGuide/what-is.html](https://docs.aws.amazon.com/ivs/latest/ChatUserGuide/what-is.html) |

## Properties

| property | type | values | required | kind default | this component |
|---|---|---|---|---|---|
| `ackIntervalSeconds` (advanced) | integer | — | no | — | inherited |
| `autoscaling` | boolean | — | no | false | **true** |
| `channelAssignment` (advanced) | enum | `random`, `hash`, `sticky` | no | "random" | inherited |
| `concurrentConnectionsLimit` | integer | — | no | 50000 | inherited |
| `drainOnScaleIn` (advanced) | boolean | — | no | false | inherited |
| `loggingConfiguration` | boolean | — | no | false | inherited |
| `managed` | boolean | — | no | false | **true** |
| `maxMessageRatePerSecond` | integer | — | no | 100 | inherited |
| `messageReviewHandlerTimeoutMs` | integer | — | no | 200 | inherited |
| `protocol` | enum | `websocket`, `sse`, `long-poll`, `grpc-stream`, `udp-multicast` | no | "websocket" | **"websocket"** |
| `pushFallback` (advanced) | boolean | — | no | false | inherited |
| `sequenceNumbers` (advanced) | boolean | — | no | false | inherited |
| `stampedeGuard` (advanced) | boolean | — | no | false | inherited |
| `stateful` | boolean | — | no | true | **true** |
| `subscriptionsPerUser` (advanced) | integer | — | no | — | inherited |

Bold values are the ones this component pins.

## Rules that apply · 3

### Reconnect stampede without guard `reconnect-stampede-without-guard` (error)

- Page: https://localhost:3000/catalogue/rules/reconnect-stampede-without-guard.md
- Why: When a gateway holding millions of sockets restarts, every client reconnects at once and the gateway asks the coordination service about each of them. Without a stampede guard that lookup storm takes the coordination service down too.
- Applies to: every node of kind realtime-gateway
- Message: Realtime gateway '{{node.id}}' calls a coordination service synchronously on connect but has no reconnect stampede guard.

It fires when:

- all of these hold:
  - the node has at least one synchronous outgoing edge to a coordination-service
  - the node's `stampedeGuard` is false

### Random channel placement under heavy-tail traffic `shared-host-per-channel-without-isolation` (error)

- Page: https://localhost:3000/catalogue/rules/shared-host-per-channel-without-isolation.md
- Why: With heavy-tail traffic a few channels carry most of the load. Assigning channels at random lands those hot channels on arbitrary hosts, and every tenant sharing a host suffers for it.
- Applies to: every node of kind realtime-gateway
- Message: Realtime gateway '{{node.id}}' assigns channels randomly while the design declares heavy-tail traffic. Hot channels will degrade unrelated tenants on the same host.

It fires when:

- all of these hold:
  - the node's `channelAssignment` is "random"
  - the design requirement `traffic.skew` is "heavy-tail"

### Stateful WebSocket scale-in without drain `stateful-websocket-scale-in-without-drain` (warning)

- Page: https://localhost:3000/catalogue/rules/stateful-websocket-scale-in-without-drain.md
- Why: Scaling a gateway down kills every live WebSocket on the removed instance at once. Without a drain step those clients all reconnect together.
- Applies to: every node of kind realtime-gateway
- Message: Realtime gateway '{{node.id}}' autoscales but does not drain connections on scale-in. Every scale-down becomes a reconnect storm.

It fires when:

- all of these hold:
  - the node's `autoscaling` is true
  - the node's `drainOnScaleIn` is false

## Other products of the same kind · 19

- [API Gateway WebSocket API](https://localhost:3000/catalogue/components/aws-api-gateway-websocket.md) `aws-api-gateway-websocket` — aws
- [AWS AppSync Events API](https://localhost:3000/catalogue/components/aws-appsync-events.md) `aws-appsync-events` — aws
- [Azure Fluid Relay](https://localhost:3000/catalogue/components/azure-fluid-relay.md) `azure-fluid-relay` — azure
- [Azure SignalR Service](https://localhost:3000/catalogue/components/azure-signalr.md) `azure-signalr` — azure
- [Azure Web PubSub](https://localhost:3000/catalogue/components/azure-web-pubsub.md) `azure-web-pubsub` — azure
- [Ably](https://localhost:3000/catalogue/components/ably.md) `ably` — default
- [Centrifugo](https://localhost:3000/catalogue/components/centrifugo.md) `centrifugo` — default
- [Liveblocks](https://localhost:3000/catalogue/components/liveblocks.md) `liveblocks` — default
- [Mercure](https://localhost:3000/catalogue/components/mercure.md) `mercure` — default
- [Multicast market-data feed](https://localhost:3000/catalogue/components/multicast-feed.md) `multicast-feed` — default
- [PartyKit](https://localhost:3000/catalogue/components/partykit.md) `partykit` — default
- [Phoenix Channels](https://localhost:3000/catalogue/components/phoenix-channels.md) `phoenix-channels` — default
- [Pusher Channels](https://localhost:3000/catalogue/components/pusher.md) `pusher` — default
- [Pushpin](https://localhost:3000/catalogue/components/pushpin.md) `pushpin` — default
- [Generic real-time gateway](https://localhost:3000/catalogue/components/realtime-gateway.md) `realtime-gateway` — default
- [ASP.NET Core SignalR](https://localhost:3000/catalogue/components/signalr.md) `signalr` — default
- [Socket.IO server](https://localhost:3000/catalogue/components/socket-io-server.md) `socket-io-server` — default
- [Soketi](https://localhost:3000/catalogue/components/soketi.md) `soketi` — default
- [WebSocket gateway](https://localhost:3000/catalogue/components/websocket-gateway.md) `websocket-gateway` — default

## Use it in a design

```yaml
nodes:
  - { id: "aws-ivs-chat", component: "aws-ivs-chat" }
```

## Source (`component` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../../schema/component.schema.json
# Amazon IVS Chat: managed live chat rooms that accompany an IVS video stream, with a WebSocket
# messaging data plane. "IVS Chat Service Quotas": 50,000 rooms per account per Region, 50,000
# concurrent chat connections per account per Region, 100 SendMessage requests per second per room,
# 10 messaging requests per second per connection, message review handler timeout 200 ms.
schemaVersion: "1"
type: "component"
id: "aws-ivs-chat"
kind: "realtime-gateway"
provider: "aws"
docs: "https://docs.aws.amazon.com/ivs/latest/ChatUserGuide/what-is.html"
defaults:
  managed: true
  protocol: "websocket"
  stateful: true
  autoscaling: true
properties:
  maxMessageRatePerSecond:
    type: "integer"
    default: 100
  concurrentConnectionsLimit:
    type: "integer"
    default: 50000
  messageReviewHandlerTimeoutMs:
    type: "integer"
    default: 200
  loggingConfiguration:
    type: "boolean"
    default: false
```

Human page: https://localhost:3000/catalogue/components/aws-ivs-chat
