Migrating from stream-chat-net to getstream-net

March 11, 2026 ยท View on GitHub

Why Migrate?

  • getstream-net is the actively developed, long-term-supported SDK
  • Covers Chat, Video, Moderation, and Feeds in a single package
  • Strongly typed models generated from the official OpenAPI spec
  • stream-chat-net will enter maintenance mode (critical fixes only)

Key Differences

Aspectstream-chat-netgetstream-net
Packagestream-chat-net (NuGet)getstream-net (NuGet)
NamespaceStreamChat.Clients, StreamChat.ModelsGetStream, GetStream.Models
Client initnew StreamClientFactory(key, secret)new StreamClient(apiKey, apiSecret) or new ClientBuilder().Build()
ArchitectureFactory + per-domain clients (GetUserClient(), GetChannelClient())Single StreamClient + sub-clients (ChatClient, ModerationClient)
ModelsSetData() for custom fieldsCustom dictionary property
ResponsesApiResponse with GetRateLimit()StreamResponse<T> with Data, Duration, Error
Token generationuserClient.CreateToken(userId)client.CreateUserToken(userId)

Quick Example

Before:

using StreamChat.Clients;

var clientFactory = new StreamClientFactory("your-api-key", "your-api-secret");
var messageClient = clientFactory.GetMessageClient();

var message = await messageClient.SendMessageAsync("messaging", "general",
    "bob-1", "Hello from the old SDK!");

After:

using GetStream;
using GetStream.Models;

var client = new StreamClient(apiKey: "your-api-key", apiSecret: "your-api-secret");
var chatClient = new ChatClient(client);

var response = await chatClient.SendMessageAsync("messaging", "general",
    new SendMessageRequest
    {
        Message = new MessageRequest
        {
            Text = "Hello from the new SDK!",
            UserID = "bob-1"
        }
    });

Migration Guides by Topic

#TopicFile
1Setup and AuthenticationClient init, tokens
2UsersUpsert, query, update, delete
3ChannelsCreate, query, members, update
4Messages and ReactionsSend, reply, react
5ModerationBan, mute, moderators
6DevicesPush device management

Notes

  • stream-chat-net is not going away. Your existing integration will keep working.
  • The new SDK uses typed request/response classes generated from the OpenAPI spec.
  • If you find a use case missing from this guide, please open an issue.