Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
getstream avatar

Stream React Native

  • 503 installs
  • 17 repo stars
  • Updated August 4, 2026
  • getstream/agent-skills

stream-react-native is an agent skill that integrates Stream Chat, Video, and Feeds into React Native and Expo apps with navigation, hooks, and cross-platform UI patterns for developers shipping real-time messaging or ac

About

stream-react-native is a GetStream/agent-skills sub-skill for building and integrating Stream products in React Native CLI and Expo projects. It classifies intent, detects existing packages such as stream-chat-react-native, stream-chat-expo, @stream-io/video-react-native-sdk, and @stream-io/feeds-react-native-sdk, then routes through credentials setup, install commands, native requirements, and shared client lifecycle patterns in sdk.md. Non-negotiable rules in RULES.md enforce New Architecture assumptions, correct import packages per lane, and provider nesting when combining Chat, Video, and Feeds. builder.md walks existing-app modification while references/ hold Chat and Video blueprints and llms.txt doc manifests. Install on demand via getstream skills or invoke /stream-react-native directly. Reach for it when adding chat channels, video calls, livestreams, audio rooms, or activity feeds to a React Native or Expo codebase.

  • React Native Stream SDK bootstrap
  • Cross-platform chat UI integration
  • Token auth and connection lifecycle
  • Shared patterns for iOS and Android targets

Stream React Native by the numbers

  • 503 all-time installs (skills.sh)
  • Ranked #303 of 1,039 Mobile Development skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/getstream/agent-skills --skill stream-react-native

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs503
repo stars17
Last updatedAugust 4, 2026
Repositorygetstream/agent-skills

How do you add Stream chat to React Native?

Add Stream-powered chat or activity features to a React Native app with navigation, hooks, and cross-platform UI patterns.

Who is it for?

React Native and Expo developers integrating Stream Chat, Video, or Feeds with official SDK patterns, credentials flow, and New Architecture constraints.

Skip if: Native iOS Swift or Android Kotlin Stream integrations, or web-only React apps without React Native.

When should I use this skill?

The user asks to add Stream chat, video calls, livestreams, activity feeds, or Stream SDK setup to a React Native or Expo project.

What you get

Installed Stream SDK packages, configured API keys and tokens, wired provider trees, and working Chat, Video, or Feeds screens with correct client lifecycle cleanup.

  • SDK install commands
  • provider tree wiring
  • Chat or Video screen integration

By the numbers

  • Covers 3 Stream SDK products—Chat, Video, and Feeds—for React Native CLI and Expo
  • Ships 6 core modules: SKILL.md, RULES.md, credentials.md, builder.md, sdk.md, and references/

Files

SKILL.mdMarkdownGitHub ↗

Stream React Native - skill router + execution flow

Rules: Read [`RULES.md`](RULES.md) once per session. Every non-negotiable React Native Chat, Video, and Feeds rule is stated there.

This file is the single entrypoint: intent classification, product selection, project detection, and module pointers for Stream Chat React Native, Stream Video React Native, and Stream Feeds React Native work.

---

Step 0: Intent classifier (mandatory first - never skip)

Before any tool call, decide the track from the user's input alone. Do not probe the filesystem first.

Signals -> track

Signal in user inputTrack
"Build/create/scaffold a new React Native app", "create an Expo app", "new Stream Chat RN app", "new Stream Video RN app", "new Stream Feeds RN app", empty directory + React Native/Expo Chat / Video / FeedsA - New app
"Add/integrate Stream Chat into this app", "wire Chat RN", "set up stream-chat-expo", "add a video call", "wire Stream Video", "set up @stream-io/video-react-native-sdk", "add an activity feed", "wire Stream Feeds", "set up @stream-io/feeds-react-native-sdk", "change/customize this Chat / Video / Feeds UI"B - Existing app
React Native, Expo, Expo Router, stream-chat-react-native, stream-chat-expo, @stream-io/video-react-native-sdk, @stream-io/feeds-react-native-sdk, Stream Chat RN, Stream Video RN, Stream Feeds RN, Chat React Native, Video React Native, Feeds React Native, migrationC - Reference lookup if the user only asks how/docs; otherwise B - Existing app
Explicit product/runtime token: Chat React Native, Chat Expo, Video React Native, Video Expo, Feeds React Native, Feeds ExpoC - Reference lookup
Words "docs" or "documentation" around Stream Chat, Stream Video, or Stream Feeds React Native / Expo workC - Reference lookup
"How do I {X} in React Native/Expo?", "What does {SDK component/hook/prop} do?"C - Reference lookup
"Audit/review/check an existing Stream Video integration against best practices", "is my video app production-ready?", "what am I missing before launch?"C - Reference lookup (read-only) - run the Integration best-practices audit in `references/VIDEO-REACT-NATIVE.md`
"Install Stream packages", "set up Chat RN", "set up Video RN", "set up Feeds RN", "wire auth/token flow" with no broader feature requestD - Bootstrap / setup
Stream Moderation review UI or any other non-Chat / non-Video / non-Feeds Stream RN productReject bundled scope and route to live docs only if the user wants docs
Bare /stream-react-native with no argsList the tracks briefly and wait

Disambiguation flow

If the request is ambiguous between wiring code and reference lookup, ask one short question and wait:

Do you want me to wire this into the project, or just map the React Native SDK pattern and files?

If the user wants a new app but did not name Expo or RN CLI, default to Expo because it is the shortest successful path. Use RN CLI when the user asks for it or when native project constraints require it.

Product classifier (after track is known)

Identify the product from the user's input or detected packages. Tracks A, B, and D all need the product before continuing; Track C selects the matching reference pair.

Product signalProductReferences
stream-chat-react-native, stream-chat-expo, channel, message, MessageComposer, thread, attachment, offline supportChat`references/CHAT-REACT-NATIVE.md` + `references/CHAT-REACT-NATIVE-blueprints.md`
@stream-io/video-react-native-sdk, video call, livestream, audio room, ringing, CallContent, ParticipantView, screenshare, picture in pictureVideo`references/VIDEO-REACT-NATIVE.md` + `references/VIDEO-REACT-NATIVE-blueprints.md`
@stream-io/feeds-react-native-sdk, useCreateFeedsClient, StreamFeeds, StreamFeed, activity feed, timeline feed, notification feed, for-you feed, useFeedActivities, useActivityComments, reactions, comments, follows, follow / unfollow, activity composer, activityWithStateUpdatesFeeds`references/FEEDS-REACT-NATIVE.md` + `references/FEEDS-REACT-NATIVE-blueprints.md`
Two or more products in one app (chat alongside a video call, feeds + chat, feeds + video, etc.)CombinedLoad only the reference pairs for the products in scope. Nest the providers (e.g. <StreamVideo> inside <OverlayProvider><Chat> inside <StreamFeeds>); do not place them as siblings. See `RULES.md` and the manifest-selected /video/docs/react-native/advanced/chat-with-video.md for the Chat + Video interop notes

If the request is ambiguous between products, ask one short question and wait:

Are you wiring Stream Chat (channels, messages), Stream Video (calls, livestream, audio rooms), or Stream Feeds (activity feed, timeline, comments, reactions, follows)? Or more than one in the same app?

Scope rejection

This skill bundles Chat, Video, and Feeds React Native. If the user asks for Stream Moderation review UI or another non-bundled Stream RN product, say:

The React Native skill currently bundles Chat, Video, and Feeds references. I can help with any combination of those here, or switch to live docs for other products.

Do not invent missing React Native Moderation API details from memory.

After classification

  • Tracks A, B, D -> run Project signals, then continue in `builder.md` and `sdk.md`. Run `credentials.md` before writing Chat, Video, or Feeds connection code or creating requested demo data.
  • Track C -> skip credentials and project probes if the product + runtime are explicit. Only run a read-only probe if RN CLI vs Expo is ambiguous and the answer affects the guidance.

---

Step 0.5: Credentials, token, and demo data (tracks A, B, D only)

Use `credentials.md` once per session before writing code that connects to Stream Chat, Stream Video, or Stream Feeds.

It resolves:

  • Stream API key
  • user id and display name
  • user token or token provider plan
  • optional demo data, only when requested, via Stream CLI calls (Chat: UpdateUsers, GetOrCreateChannel, SendMessage; Video and Feeds do not require seed data because calls are ephemeral and activities can be posted at runtime)

For Track A, it is acceptable to scaffold the app first if the runtime or target directory must be resolved before credentials. Do not render a connected Chat, Video, or Feeds UI until credentials or a token-provider plan are resolved.

---

Project signals (tracks A/B/D - once per session; Track C on demand only)

Read-only local probe. Use it to detect empty/new workspace, RN CLI vs Expo, New Architecture hints, navigation setup, and existing Stream packages.

bash -c 'echo "=== PACKAGE ==="; test -f package.json && grep -oE "\"(stream-chat-react-native|stream-chat-expo|@stream-io/video-react-native-sdk|@stream-io/feeds-react-native-sdk|@stream-io/react-native-webrtc|@stream-io/react-native-callingx|react-native|expo|@react-navigation/[^\"]+|expo-router|react-native-reanimated|react-native-worklets|react-native-teleport|@op-engineering/op-sqlite)\": *\"[^\"]*\"" package.json 2>/dev/null; echo "=== EXPO ==="; find . -maxdepth 2 \( -name "app.json" -o -name "app.config.js" -o -name "app.config.ts" -o -path "./app/_layout.*" \) -print 2>/dev/null; echo "=== NATIVE ==="; find . -maxdepth 2 \( -name "ios" -o -name "android" \) -type d -print 2>/dev/null; echo "=== CONFIG ==="; find . -maxdepth 2 \( -name "babel.config.js" -o -name "metro.config.js" \) -print 2>/dev/null; echo "=== EXPO_SDK ==="; node -e "try{console.log(require(\"./node_modules/expo/package.json\").version)}catch(e){try{console.log(require(\"./package.json\").dependencies.expo)}catch(e){console.log(\"-\")}}" 2>/dev/null; echo "=== EMPTY ==="; test -z "$(ls -A 2>/dev/null)" && echo "EMPTY_CWD" || echo "NON_EMPTY"'

Hold the result in conversation context. Do not re-run unless the user changes directory, packages are installed, or the project shape changes.

Use the result to produce a one-line status, for example:

  • Empty workspace detected - defaulting to Expo new app unless the user asked for RN CLI
  • Expo app detected - stream-chat-expo absent - Expo Router present - ready for Chat setup
  • Expo app detected - Expo SDK 56+ - apply RULES.md > Expo Router SDK 56+ rule (no @react-navigation/*)
  • Expo app detected - @stream-io/video-react-native-sdk absent - ready for Video setup
  • Expo app detected - @stream-io/feeds-react-native-sdk absent - ready for Feeds setup
  • RN CLI app detected - ios/android present - stream-chat-react-native installed - checking provider placement
  • RN CLI app detected - both @stream-io/video-react-native-sdk and stream-chat-react-native installed - Chat + Video interop applies
  • Expo app detected - @stream-io/feeds-react-native-sdk and stream-chat-expo installed - nest StreamFeeds + Chat providers (no sibling mounts)
  • No RN/Expo app detected in a non-empty directory - create a new app in a child directory or ask before reusing this directory

If there is no RN/Expo project and Track A applies, scaffold one through `builder.md` > 2. New app scaffold. If Track B/D applies in a non-RN directory, ask before creating a child app because that changes project ownership.

---

Module map

TrackModule(s)
A - New app`builder.md` + `sdk.md` + llms.txt docs lookup + product references (Chat / Video / Feeds)
B - Existing app`builder.md` + `sdk.md` + llms.txt docs lookup + product references (Chat / Video / Feeds)
C - Reference lookup`sdk.md` + `references/DOCS.md` + relevant product reference files
D - Bootstrap / setup`builder.md` + `sdk.md` + llms.txt docs lookup

---

Reference layout

Shared React Native and Expo patterns live in [`sdk.md`](sdk.md).

Product-specific setup, docs lookup, gotchas, and UI blueprints live under `references/`:

  • `llms.txt` docs lookup (Chat, Video, Feeds): `references/DOCS.md`
  • Chat setup/reference: `references/CHAT-REACT-NATIVE.md`
  • Chat screen/component blueprints: `references/CHAT-REACT-NATIVE-blueprints.md`
  • Video setup/reference: `references/VIDEO-REACT-NATIVE.md`
  • Video screen/component blueprints: `references/VIDEO-REACT-NATIVE-blueprints.md`
  • Feeds setup/reference: `references/FEEDS-REACT-NATIVE.md`
  • Feeds screen/component blueprints: `references/FEEDS-REACT-NATIVE-blueprints.md`

If the requested product file is not bundled yet, say so plainly and only switch to live docs if the user asks.

---

Track A - New app

Full detail: `builder.md` - use the new-app path.

PhaseNameWhat you do
A1DetectRun Project signals. Empty workspace is valid for Track A.
A2Choose lane and productDefault to Expo if unspecified; use RN CLI when requested. Confirm product (Chat, Video, Feeds, or any combination).
A3ScaffoldCreate the app with current framework tooling; do not explain full RN/Expo environment setup.
A4Install + wireUse the manifest-selected Installation docs for each product, verify npm dist-tags, install package and peers, then wire providers and first UI.
A5VerifyConfirm install, root providers, permissions (Video: camera/mic), auth, and first rendered Chat / Video / Feeds screen.

---

Track B - Existing app

Full detail: `builder.md` - use the existing-project path.

PhaseNameWhat you do
B1DetectRun Project signals and inspect existing app structure before editing. Note any existing Chat / Video / Feeds packages.
B2PreserveKeep Expo/RN CLI lane, package manager, navigation stack, and auth architecture unless asked to migrate.
B3IntegrateUse llms.txt lookup for the requested area, then load only the Chat / Video / Feeds reference/blueprint sections needed.
B4VerifyConfirm the requested Stream Chat / Video / Feeds flow builds and renders in the existing app.

---

Track C - Reference lookup

Load only the relevant files for the requested product:

  • llms.txt manifest lookup rules -> `references/DOCS.md`
  • Shared lifecycle / auth / provider / runtime patterns -> `sdk.md`
  • Chat RN setup and gotchas -> `references/CHAT-REACT-NATIVE.md`
  • Chat RN screen/component structure -> `references/CHAT-REACT-NATIVE-blueprints.md`
  • Video RN setup and gotchas -> `references/VIDEO-REACT-NATIVE.md`
  • Video RN screen/component structure -> `references/VIDEO-REACT-NATIVE-blueprints.md`
  • Feeds RN setup and gotchas -> `references/FEEDS-REACT-NATIVE.md`
  • Feeds RN screen/component structure -> `references/FEEDS-REACT-NATIVE-blueprints.md`
  • Audit an existing Video integration against best practices -> the Integration best-practices audit section in `references/VIDEO-REACT-NATIVE.md` (read-only review; produce findings before changing any code)

If the user asks for exact API details not bundled here, use `references/DOCS.md` to fetch the right manifest and selected markdown page. If implementation still needs source-level confirmation, inspect the installed package under the target app's node_modules after dependencies are installed. Do not use machine-specific documentation paths.

---

Track D - Bootstrap / setup

Use when the user wants package install and shared wiring more than a full feature build. Branch by product:

  • detect RN CLI vs Expo
  • use llms.txt lookup for the matching product's Installation docs and verify current npm dist-tags
  • install the correct package and required peers (Chat: stream-chat-react-native or stream-chat-expo; Video: @stream-io/video-react-native-sdk; Feeds: @stream-io/feeds-react-native-sdk + @react-native-community/netinfo)
  • Chat-specific wiring: add Reanimated/Worklets Babel plugin as the last plugin, wrap the entry point with GestureHandlerRootView, place OverlayProvider and Chat, wire useCreateChatClient or the app's backend token provider
  • Video-specific wiring: declare camera/mic permissions, add Expo config plugins where applicable, create StreamVideoClient and mount StreamVideo
  • Feeds-specific wiring: call useCreateFeedsClient (returns undefined while connecting), mount <StreamFeeds client={client}> once near the app root, and (typically) wrap an OwnFeedsContextProvider that creates the user + timeline feeds and the self-follow
  • stop before product-specific UI if the user only asked for setup

Related skills

How it compares

Pick stream-react-native for RN and Expo SDK wiring; use stream-swift or stream-android sub-skills for native mobile platforms outside React Native.

FAQ

Which Stream products does stream-react-native cover?

stream-react-native bundles guidance for Stream Chat, Stream Video, and Stream Feeds in React Native CLI and Expo apps. Product selection happens during intent classification before install and provider wiring.

What packages differ between Expo and RN CLI?

stream-react-native uses stream-chat-expo on Expo and stream-chat-react-native on RN CLI for Chat. Video and Feeds share @stream-io/video-react-native-sdk and @stream-io/feeds-react-native-sdk across both lanes.

Mobile Developmentfrontendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.