MCPInstall

stream-react

Build, integrate, audit, or upgrade Stream Chat, Video, Feeds, and Moderation in React / Next.js web apps - the default skill for web work. Scaffold a new app, add Stream to an existing project, review an integration, upgrade an SDK major, or migrate from Sendbird. Covers team messaging, DMs, video conferencing, livestreaming, social feeds, AI assistants, and apps built on Stream Agents (voice and text agents, @stream-io/calypso). Web React only - React Native uses stream-react-native.

Installs
305
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/getstream/agent-skills --skill stream-react
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads stream-react automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Stream React (web)

Docs

Don't write Stream SDK code from memory. APIs change between majors, so your memory is stale. Read the docs first, via the getstream docs command:

cat $(getstream docs chat-sdk/react)/INDEX.md

Client and UI: chat-sdk/react, video/react, activity-feeds/react. Node.js backend (e.g. Next.js routes): chat/node, activity-feeds/node, moderation/node. Stream Agents (sessions, voice, tools): agents/javascript. Previous majors are available too (e.g. chat-sdk/react/v13).

Setup

Start with getstream init (binds the working dir to a Stream app, existing or new) and getstream env (credentials).

For new apps, Next.js + Tailwind + shadcn with the default theme is a good choice unless the user says otherwise. Latest shadcn uses Base UI, not Radix: no asChild, and don't wrap trigger components in <Button>.

Install the SDKs:

  • Chat: stream-chat stream-chat-react
  • Video: @stream-io/video-react-sdk
  • Feeds: @stream-io/feeds-react-sdk
  • Stream Agents: @stream-io/calypso, plus the Chat and Video packages above for its UI (stream-agents.md)
  • Server-side: @stream-io/node-sdk

Don't bump an already-installed Stream major.

For Video apps, label the use case once, without asking the user (metadata, no runtime effect):

getstream api UpdateApp --request '{"video_primary_use_case":"livestreaming"}'

Allowed values: video-calling, voice-calling, livestreaming, audio-rooms, ai-agents, live-shopping, other. Derive it from what the app is, not from the call type in use (Whatnot runs on the livestream call type but is live-shopping). Any commerce signal means live-shopping. Unsure means other.

Product configuration (channel types, feed groups, moderation policies) goes through getstream api.

Auth and users

Tokens are minted server-side: a route (e.g. /api/token) uses the secret and returns the token with the apiKey. The secret never reaches the client. An app that already has auth or a token endpoint gets it extended, not a second one.

Start with a login screen. Don't auto-connect, don't hardcode user credentials, don't seed demo users or content on app load. The token route upserts only the requesting user. Keep credentials in React state, not localStorage, so two tabs can be two users.

Building

Clients mount once, at the app shell. Don't disconnectUser() in a screen's cleanup - it kills the client every other screen shares. Per-screen cleanup is channel.stopWatching() or call.leave().

Be careful with client initialization within React Strict Mode. Instead of using an effect, use specialized hooks:

  • Chat: useCreateChatClient()
  • Feeds: useCreateFeedsClient()
  • Video: construct StreamVideoClient in a useEffect with disconnectUser() cleanup; the constructor is synchronous, no timer or mounted flag needed. Define the tokenProvider inside that effect - an inline provider in the dependency array is a new identity every render and recreates the client. Never use a useRef flag as a run-once guard in an effect with cleanup: the ref survives the remount, so the second mount skips setup entirely.

Start with prebuilt Stream SDK components. Customize them via documented props and hooks. Feeds has no prebuilt UI - build from its hooks.

Land on a channel list, lobby, or feed by default - never directly in a call or a camera prompt. Camera/mic permission is requested only on an explicit action (Join, Go Live), behind a preview. Empty states say what to do next.

Chat:

  • Custom reaction types are slugs ([A-Za-z0-9_.-]; emoji are rejected server-side) and must be registered in reactionOptions - unregistered types silently don't render. Fallback: render pills from message.reaction_groups.
  • Feature gating: the source of truth is the connected user's channel.data?.own_capabilities (a server-side query lists all capabilities, so it's useless here). useCanCreatePoll() is poll-form validity, not permission - don't gate menu visibility on it.

Feeds:

  • A social feed needs a visible follow control - a timeline without follows is permanently empty. Follows go through the timeline feed instance, not client.follow(), so the feed hooks update. Follow your own user feed too, or your own posts never appear in your timeline.

Video:

  • Call-type setting changes don't apply to existing calls - test with a fresh call id.

Moderation:

  • Don't build moderation UIs (review queue and the like): Stream Dashboard already provides them. End-user actions (report, block, mute) are fine.
  • CreateBlockList 400s if the list already exists - check ListBlockLists first. Fill blocklists with real words, not badword1 placeholders.
  • Custom moderation rules return 403 on free plans - use blocklist + config instead.

Defaults to keep

The prebuilt components ship features users expect. Keep each one on unless the user turns it off by name. A design reference that doesn't show a feature, or "keep it minimal", is not turning it off: keep the feature and style it to match, or ask.

Override the smallest slot that does the job, and add to existing WithComponents overrides instead of replacing them. Replacing a whole region drops everything it rendered by default:

  • A custom Message / VirtualMessage must put back what the default renders: text, attachments, quoted message, polls, reactions, replies count, actions, timestamp, read status. The full composition is in the docs.
  • A custom MessageComposerUI must put back the attachment picker and previews, drag-and-drop upload, link previews, the quoted-message preview, voice recording, and the send button - see the docs.

The defaults, and what usually turns them off:

  • Markdown in message text. The default renderText renders markdown, mentions, and emoji. Printing message.text as a plain string, or a custom renderText that doesn't build on the SDK's, turns it off. Check: send **bold**, a list, and a code block.
  • Reactions. A custom message without MessageReactions, or custom reaction types missing from reactionOptions. Check: react, and see the pill.
  • Threads. A layout without <Thread />, or a custom message without the replies count button. Check: reply in a thread, and open it from the parent.
  • AI replies: isMessageAIGenerated on <Chat> (typewriter and markdown), the stop button (replacing the composer drops it), and AIStateIndicator inside <Channel>. Check: as in ai-integration.md.

Verify

Type-check and build, run the dev server, and test multi-user flows in two tabs as two different users through browser integration or automation. Run the check for each default in Defaults to keep. Report what was verified and what wasn't, and list each default that is off with the user's words that turned it off.

Auditing an integration

When asked, perform a read-only audit: check the code against the docs, report findings, and fix only if asked.

Upgrading an SDK version

When asked, read the upgrade notes for both the installed and the target major (use the versioned docs: chat-sdk/react/v13, chat-sdk/react/v14, ...), apply them, then verify as if you're building an app.

Matching a reference design

When the request carries a target appearance - a screenshot, a Figma frame, "make it look like WhatsApp" - follow design-matching.md.

A named app without a reference ("a Slack-like team chat", "a WhatsApp-style DM app") is guidance on structure - the shape, built from prebuilt components - not a look to match. Only explicit design reference warrants design-matching.md.

Migrating from Sendbird

For the code migration, follow sendbird-migration.md. When the user also wants their existing data moved (users, channels, message history), follow the stream skill's sendbird-data-migration.md.

AI assistants, support bots, agents

The model runs on a backend agent, never in the browser: no LLM provider key or Stream secret in the client bundle. There are two kinds of backend; pick by what the user names:

  • Stream Agents - the agent and its models run on Stream (getstream agents, an agents/<name>/ folder, @stream-io/calypso). Any voice agent is this kind. Follow stream-agents.md.
  • Your own agent process answering in a Chat channel (@stream-io/chat-ai-sdk, LangChain, a webhook turn):
    • Support bot, help desk, RAG chat: follow ai-support-agent.md.
    • ChatGPT-style app, an assistant inside an existing chat, streaming answers, stop generating, client tools: follow ai-integration.md.

If the request fits both and the user hasn't said, ask which backend they want.

Other skills

This skill covers Stream. For general React and Next.js work, use these skills if they're installed:

  • vercel-react-best-practices: performance - request waterfalls, bundle size, re-renders, data fetching.
  • vercel-composition-patterns: the app's own component APIs - compound components, context providers, React 19 changes.

For Next.js APIs, read the docs that ship with the installed version in node_modules/next/dist/docs/ (next dev on 16.3+ also writes an AGENTS.md pointing there), not memory.

Where general advice conflicts with this skill, this skill wins for Stream code:

  • Stream components and client hooks run in 'use client' modules. Keep pages and layouts as server components where you can, and put the Stream subtree in a client component.
  • Create clients as described in Building, even if a performance rule suggests restructuring the effect or memoizing differently.
  • Customize Stream UI through its documented overrides (WithComponents, props, hooks), not by rebuilding it as your own compound components. Defaults to keep applies.

If these skills aren't installed, carry on without them. Don't install skills yourself; mention them once in the final summary:

npx skills add vercel-labs/agent-skills --skill vercel-react-best-practices --skill vercel-composition-patterns

FAQ

What does the stream-react skill do?

Build, integrate, audit, or upgrade Stream Chat, Video, Feeds, and Moderation in React / Next.js web apps - the default skill for web work. Scaffold a new app, add Stream to an existing project, review an integration, upgrade an SDK major, or migrate from Sendbird. Covers team messaging, DMs, video conferencing, livestreaming, social feeds, AI assistants, and apps built on Stream Agents (voice and text agents, @stream-io/calypso). Web React only - React Native uses stream-react-native.

How do I install stream-react?

Run npx skills add https://github.com/getstream/agent-skills --skill stream-react in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/stream-react/ (personal) or .claude/skills/stream-react/ (project).

Which AI agents can use stream-react?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is stream-react safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains stream-react?

It is published by getstream in getstream/agent-skills. It has 305 recorded installs.

More from getstream/agent-skills

View all →

stream

getstream/agent-skills

Stream overview, CLI, and router for Chat, Video, Feeds, Moderation, and Agents. Use for any Stream task: building or integrating Stream into web, iOS, Android, React Native, Flutter, Unity, or Unreal apps, building voice or text AI agents with Stream Agents, querying Stream data, running getstream CLI commands, looking up Stream SDK docs, or migrating (from Sendbird, or Feeds v2 to v3). Routes to the right skill.

Mobile1.6K installs

stream-docs

getstream/agent-skills

Compatibility entrypoint for requests naming stream-docs. Uses getstream docs for SDK documentation lookups.

Docs & Writing785 installs

stream-builder

getstream/agent-skills

Compatibility entrypoint for requests naming stream-builder. Routes app work to the appropriate platform skill.

AI & Agents725 installs

stream-react-native

getstream/agent-skills

Builds, integrates, migrates, audits Stream Chat, Video, and Feeds in React Native CLI and Expo apps. Use when scaffolding an RN/Expo app, adding Stream to an existing app, upgrading a Stream SDK (Chat v8-v9, Feeds v2-v3), migrating from Sendbird (@sendbird/chat, @sendbird/uikit-react-native), building AI assistants / LLM chat (streaming, stop generating) with @stream-io/chat-react-native-ai, answering RN/Expo how-to questions, or customizing Stream RN UI. Triggers on React Native, Expo, Expo Router, stream-chat-react-native, stream-chat-expo, @stream-io/video-react-native-sdk, @stream-io/feeds-react-native-sdk, ChatGPT clone, channel list, message list, MessageComposer, threads, attachment picker, audio messages, offline support, push notifications, video call, livestream, audio room, ringing, CallContent, ParticipantView, activity/timeline/notification feed, StreamFeeds, comments, reactions, follows, and theming. React Native and Expo only - not web React (use stream-react), not Mo

Mobile707 installs

stream-android

getstream/agent-skills

Build and integrate Stream Chat, Video, and Feeds in Android apps. Use for Jetpack Compose, Android Studio, and Gradle project work - including Stream package setup, auth and token wiring, screen blueprints, AI assistants and LLM chat (ChatGPT-style apps, streaming replies, thinking indicators, stop generating) with stream-chat-android-ai-compose, and any follow-up Stream UI work such as adding screens, navigating between channel list and channel/message screens, channel tap handling, deep links, push routing, theming, custom channel/message UI, video calling flows (joining/starting calls, ringing, custom call controls and participant tiles), and Feeds surfaces (timeline, activity composer, threaded comments, follow graph / profile, notification feed, stories).

Mobile492 installs

stream-swift

getstream/agent-skills

Build, integrate, migrate to, and answer how-to questions for Stream Chat, Video, and Feeds in Swift / SwiftUI / UIKit / iOS apps - including AI assistants and agentic experiences (ChatGPT-style apps, LLM bots in chat, streaming responses, thinking indicators, reasoning and tool-call steps, tool approvals, device-side tools, a voice agent's transcript shown as a conversation) with the StreamChatAI components. Routes each request to the exact official iOS docs page, fetches it live, and applies it - with a curated setup flow, an AI integration runbook, a Sendbird - Stream Chat migration runbook, and iOS-specific pitfalls.

Mobile464 installs

Popular frontend & design skills

View category →

setup-matt-pocock-skills

mattpocock/skills

Configure this repo for the engineering skills: set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills.

Frontend & Design1.1M installs

frontend-design

anthropics/skills

Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.

OfficialFrontend & Design1M installs

hyperframes-animation

heygen-com/hyperframes

All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.

prototype

mattpocock/skills

Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.

Frontend & Design999.2K installs

hyperframes-core

heygen-com/hyperframes

The HyperFrames composition contract — build one renderable project. Use for composition structure, the data- timing attributes, class="clip", tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Read before writing composition HTML.

Frontend & Design930.5K installs

vercel-react-best-practices

vercel-labs/agent-skills

React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.

OfficialFrontend & Design843.1K installs