# Connection
The `Connection` interface represents the connection to Ably and provides methods to monitor connection status changes. Access the connection via `chatClient.connection`.
#### Javascript
```
const connection = chatClient.connection;
```
## Properties
The `Connection` interface has the following properties:
| Property | Description | Type |
| --- | --- | --- |
| status | The current connection status. | |
| error | The error that caused the connection to enter its current status, if any. | [ErrorInfo](https://ably.com/docs/chat/api/javascript/chat-client.md#errorinfo) or Undefined |
| Status | Description |
| --- | --- |
| Initialized | A temporary state for when the library is first initialized. The value is `initialized`. |
| Connecting | The library is currently connecting to Ably. The value is `connecting`. |
| Connected | A connection exists and is active. The value is `connected`. |
| Disconnected | The library is currently disconnected from Ably, but will attempt to reconnect. The value is `disconnected`. |
| Suspended | The library is in an extended state of disconnection, but will attempt to reconnect. The value is `suspended`. |
| Failed | The library is currently disconnected from Ably and will not attempt to reconnect. The value is `failed`. |
| Closing | An explicit request by the developer to close the connection has been sent to the Ably service. The value is `closing`. |
| Closed | The connection has been explicitly closed by the client. No reconnection attempts are made automatically. The value is `closed`. |
## Subscribe to connection status changes
`connection.onStatusChange(listener: ConnectionStatusListener): StatusSubscription`
Registers a listener to be notified of connection status changes.
### Javascript
```
const { off } = chatClient.connection.onStatusChange((change) => {
console.log('Status changed from', change.previous, 'to', change.current);
if (change.error) {
console.error('Error:', change.error);
}
if (change.retryIn) {
console.log('Retrying in', change.retryIn, 'ms');
}
});
// To unsubscribe
off();
```
### Parameters
The `onStatusChange()` method takes the following parameters:
| Parameter | Required | Description | Type |
| --- | --- | --- | --- |
| listener | Required | A callback invoked on status changes. | |
| Parameter | Description | Type |
| --- | --- | --- |
| change | The status change event. | |
| Property | Description | Type |
| --- | --- | --- |
| current | The new connection status. | |
| previous | The previous connection status. | |
| error | An error that provides a reason why the connection has entered the new status, if applicable. | [ErrorInfo](https://ably.com/docs/chat/api/javascript/chat-client.md#errorinfo) or Undefined |
| retryIn | The time in milliseconds that the client will wait before attempting to reconnect, if applicable. | Number or Undefined |
### Returns
`StatusSubscription`
Returns an object with the following methods:
#### Deregister the listener
`off(): void`
Call `off()` to deregister the connection status listener.
### Example
#### Javascript
```
import { ConnectionStatus } from '@ably/chat';
// Monitor connection status
const { off } = chatClient.connection.onStatusChange((change) => {
switch (change.current) {
case ConnectionStatus.Connected:
console.log('Connected to Ably');
break;
case ConnectionStatus.Disconnected:
console.log('Disconnected, will retry...');
break;
case ConnectionStatus.Suspended:
console.log('Connection suspended, retrying in', change.retryIn, 'ms');
break;
case ConnectionStatus.Failed:
console.error('Connection failed:', change.error);
break;
}
});
// Check current status
console.log('Current status:', chatClient.connection.status);
// Clean up when done
off();
```