---
id: client-and-user
title: Client and User
keywords: [client, user, connection, api]
---

:::note
The recommended way of connecting your chat application to the Stream Chat API is through the use of `useCreateChatClient` hook.
:::

## Client Instance

You can create an instance with the `new` keyword or through the use of static method `getInstance` - the latter will create and store your instance and subsequent `getInstance` calls will return what has been stored.

```tsx
import { Chat } from 'stream-chat-react';
import { StreamChat } from 'stream-chat';

const client = new StreamChat(apiKey);

// or

const client = StreamChat.getInstance(apiKey);
```

## Connecting and Disconnecting a User

To authenticate a user you'll need a token. Typically, you send this token from your backend to your frontend when the user logs in. See the [Tokens & Authentication](https://getstream.io/chat/docs/javascript/tokens_and_authentication) documentation to learn more about creating tokens. For our purposes here, we will assume you have created and retrieved a `token`.

To connect a user, call the `connectUser` method on your client instance with the user object and `token` provided as arguments. Connect the user directly after instantiating the client to establish a websocket connection with the Stream Chat API. Once the connection has been opened, your client instance will begin receiving events from the API.

```tsx
const connectionPromise = client.connectUser(
  {
    id: 'dave-matthews',
    name: 'Dave Matthews',
  },
  token,
);
```

To dispose of the active connection (upon component cleanup, for example) you'd call `disconnectUser` method. It's generally recommended to wait for the connection promise to resolve before disconnecting.

```tsx
await connectionPromise;
client.disconnectUser();
```
