> ## Documentation Index
> Fetch the complete documentation index at: https://docs.synthraai.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Streaming

> WebSocket-based streaming for real-time message delivery

Synthra provides WebSocket-based streaming for real-time bidirectional communication. Ideal for chat interfaces and live updates.

## Connection

```typescript theme={null}
const stream = agent.createStream({
  sessionId: 'session_abc123def456',
  autoReconnect: true,
  heartbeatInterval: 30000
});

stream.on('connected', () => {
  console.log('Stream connected');
});

stream.on('error', (error) => {
  console.error('Stream error:', error);
});
```

## Sending Messages

```typescript theme={null}
stream.send({
  type: 'message',
  content: 'Hello, Synthra!',
  metadata: {
    timestamp: Date.now()
  }
});
```

## Receiving Messages

```typescript theme={null}
stream.on('message', (message) => {
  console.log(`${message.role}: ${message.content}`);
});

stream.on('typing', () => {
  console.log('Assistant is typing...');
});

stream.on('complete', () => {
  console.log('Message complete');
});
```

## Streaming Responses

```typescript theme={null}
stream.send({
  type: 'message',
  content: 'Write a long story',
  streaming: true
});

let fullResponse = '';

stream.on('chunk', (chunk) => {
  fullResponse += chunk.content;
  process.stdout.write(chunk.content);
});
```

## Reconnection

```typescript theme={null}
const stream = agent.createStream({
  sessionId: 'session_abc123def456',
  autoReconnect: true,
  maxReconnectAttempts: 5,
  reconnectDelay: 1000
});

stream.on('reconnecting', (attempt) => {
  console.log(`Reconnecting (attempt ${attempt}/5)...`);
});
```

## React Integration

```typescript theme={null}
import { useEffect, useState } from 'react';

function ChatComponent({ sessionId }) {
  const [messages, setMessages] = useState([]);
  const [stream, setStream] = useState(null);
  
  useEffect(() => {
    const newStream = agent.createStream({ sessionId });
    
    newStream.on('message', (message) => {
      setMessages(prev => [...prev, message]);
    });
    
    setStream(newStream);
    
    return () => {
      newStream.close();
    };
  }, [sessionId]);
  
  return (
    <div>
      {messages.map(msg => (
        <div key={msg.id}>{msg.content}</div>
      ))}
    </div>
  );
}
```

## Performance

| Metric                   | Value                      |
| ------------------------ | -------------------------- |
| Connection establishment | under 100ms                |
| Message latency          | under 10ms                 |
| Throughput               | 1,000 msg/s per connection |

## Limits

| Tier       | Max Connections | Messages/sec | Max Message Size |
| ---------- | --------------- | ------------ | ---------------- |
| Free       | 2               | 10           | 10 KB            |
| Pro        | 10              | 100          | 100 KB           |
| Enterprise | 100             | 1,000        | 1 MB             |

<Note>
  WebSocket connections count toward your concurrent connection limit.
</Note>

<Warning>
  Implement proper error handling and reconnection logic for production environments.
</Warning>
