Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
7c9f677
docs(web): update api reference
KaustubhKumar05 May 28, 2025
c5fabc3
Merge pull request #2484 from 100mslive/web-api-reference
KaustubhKumar05 Jun 27, 2025
f6e23fb
Release notes android 2.9.77 (#2486)
PratimMallick Aug 6, 2025
2cdcdb6
docs: update js release notes (#2487)
raviteja83 Aug 13, 2025
0074766
docs: add release notes for version 0.12.38 (#2488)
raviteja83 Aug 26, 2025
c0362eb
Add release notes for version 2.9.78 (#2490)
sapta100ms Oct 15, 2025
ebac898
updated release notes
ygit Oct 28, 2025
590e670
Merge pull request #2491 from 100mslive/update_react_native_docs
ygit Oct 28, 2025
f72455a
updated release notes
ygit Oct 29, 2025
861db29
Merge pull request #2492 from 100mslive/update_notes
ygit Oct 29, 2025
18eb1ba
updated virtual background docs
ygit Oct 29, 2025
f2a7341
updated flutter release notes
ygit Oct 29, 2025
301b18a
Merge pull request #2493 from 100mslive/update_docs
ygit Oct 29, 2025
70137bb
removed Beta tags from docs
ygit Oct 29, 2025
c3adf0f
updated version numbers
ygit Oct 29, 2025
c31774d
Merge pull request #2494 from 100mslive/update_docs
ygit Oct 30, 2025
5d10c92
1.17.1 iOS Release (#2496)
gzerad Nov 17, 2025
876145f
Added release notes for version 2.9.79, including a bug fix for NPE d…
sapta100ms Nov 25, 2025
82b09dd
Merge pull request #2497 from 100mslive/android-release-2.9.79
ygit Nov 25, 2025
99230e9
Added release notes for Web SDK version 0.13.0 (#2498)
raviteja83 Dec 12, 2025
58f539f
docs: update faq for speaker label logging
raviteja83 Dec 12, 2025
6fa025f
docs: add customization options for foreground notification in prebui…
sapta100ms Dec 12, 2025
fb59263
Merge pull request #2499 from 100mslive/foreground-notiifications
ygit Dec 12, 2025
536312b
feat: add prod-us7 IP address (#2500)
bhavesh100ms Dec 30, 2025
fdde9a3
fixing api endpoint for update settings (#2503)
cyril-k-031225 Jan 2, 2026
13c40d7
Update docs for azure support (#2501)
cyril-k-031225 Jan 5, 2026
3d4e005
Added release note for Azure support (#2502)
cyril-k-031225 Jan 5, 2026
2b019fc
add docs for webhook events PI (#2504)
rtpriya Jan 14, 2026
1e75ea1
docs: add release notes for web (#2505)
raviteja83 Jan 20, 2026
ba93918
doc: add release notes for web v0.13.2 (#2507)
cyril-k-031225 Feb 11, 2026
768e4a1
Release notes for android sdk ver 2.9.80 (#2506)
sapta100ms Feb 11, 2026
ce6ebf1
fix: path of room apis
AnshulMalik Feb 11, 2026
825ec94
Merge branch 'main' into fix-room-apis
Shantanu-TAM Feb 11, 2026
303a2e8
add peer quality api documentation (#2509)
AnshulMalik Feb 15, 2026
95338b3
docs: add JavaScript implementation to captions page (#2510)
raviteja83 Feb 24, 2026
cdcae43
Merge branch 'main' into fix-room-apis
Shantanu-TAM Mar 5, 2026
0529c28
Fix formatting in stop-recording-by-id documentation
raviteja83 Mar 5, 2026
d463bb3
Merge pull request #2508 from 100mslive/fix-room-apis
AnshulMalik Mar 5, 2026
09f0ff9
docs: add video support for SIP outbound calls (#2511)
AnshulMalik Mar 16, 2026
6de83c8
Adding referrer-policy header (#2512)
cyril-k-031225 Mar 20, 2026
91ac4b4
docs: add spotlight feature documentation for Android
sapta100ms Mar 30, 2026
bfc9d19
fix: dependabot issues
raviteja83 Mar 30, 2026
936001c
upgrade android sdk to 2.9.83 and flutter sdk to 1.11.1
sapta100ms Apr 10, 2026
ce7a417
Upgrade roonkit version in release notes
sapta100ms Apr 13, 2026
9d7314a
LIV-273: Add llms.txt for LLM discoverability
Shantanu-TAM Apr 13, 2026
feff107
Merge pull request #2516 from 100mslive/android-and-flutter-upgrades
sapta100ms Apr 14, 2026
bc70fb8
Merge branch 'main' into LIV-273-add-llms-txt
raviteja83 Apr 15, 2026
a812fc6
Merge pull request #2517 from 100mslive/LIV-273-add-llms-txt
Shantanu-TAM Apr 15, 2026
9f08d78
docs: add 0.13.3 release notes and translation docs (#2518)
raviteja83 Apr 16, 2026
3acd79a
API docs for translation (#2519)
raviteja83 Apr 17, 2026
f562675
fix: update algolia keys (#2520)
cyril-k-031225 Apr 21, 2026
35ff54f
docs: add 0.13.4 web SDK release notes (#2523)
raviteja83 Apr 23, 2026
8167fa7
docs(react-native): add 1.13.0 release notes
sapta100ms Apr 30, 2026
b157e29
Merge pull request #2526 from 100mslive/react-native-1.13.0-release-n…
sapta100ms Apr 30, 2026
16d7640
docs: add 0.14.0 web SDK release notes
raviteja83 May 1, 2026
ee99e90
docs(react-native): add 2.0.0-alpha and 1.14.0 release notes
sapta100ms May 15, 2026
035cf52
docs(react-native): explain Phase 0 → Phase 1 transition in 2.0.0-alp…
sapta100ms May 15, 2026
09efbeb
docs(react-native): rename Phase 0 entry from 1.14.0 to 1.13.1
sapta100ms May 15, 2026
54a28d8
chore: trigger CI rerun
sapta100ms May 15, 2026
c2a5386
Merge pull request #2528 from 100mslive/react-native-2.0.0-alpha-rele…
ygit May 15, 2026
25af6c6
docs(firewall): add us-east5 TURN server IPs
piyush1104 May 18, 2026
e8b780f
Merge pull request #2529 from 100mslive/docs/add-us-east5-turn-ips
ayangupta1502 May 18, 2026
d7163cb
docs(webhooks): move us-east5 cloud-NAT IPs to webhook whitelist
piyush1104 May 19, 2026
761235c
Merge pull request #2530 from 100mslive/docs/add-us-east5-turn-ips
ayangupta1502 May 20, 2026
0a64867
docs(react-native): add 2.0.0-alpha.2 release notes
sapta100ms May 21, 2026
56ae76c
Merge pull request #2531 from 100mslive/react-native-2.0.0-alpha.2-re…
ygit May 21, 2026
555079a
docs: add 0.14.1 and 0.14.2 web SDK release notes
cyril-k-031225 May 22, 2026
cf4371f
Merge branch 'main' into liv-release-notes-web-sdks-0-14-0
raviteja83 May 25, 2026
fbdf45f
docs: simplify 0.14.1 web SDK release note bullets
cyril-k-031225 May 25, 2026
7325ca6
Merge pull request #2527 from 100mslive/liv-release-notes-web-sdks-0-…
cyril-k-031225 May 27, 2026
39aa7b7
docs: add server-side release notes for pion/webrtc v4 upgrade (#2532)
AnshulMalik May 29, 2026
8a9a119
docs: add 0.14.3 web SDK release notes (#2533)
raviteja83 Jun 17, 2026
37d4b11
docs: add release notes for camera-recovery fix (RN 1.13.2 / 2.0.0-al…
sapta100ms Jun 22, 2026
f4553ed
Merge pull request #2534 from 100mslive/release-notes/camera-bg-recovery
sapta100ms Jun 22, 2026
9d83dfd
docs: update TURN server IP addresses in firewall settings (#2536)
Akashgoswami1 Jul 14, 2026
d5138a8
docs(sip): document custom SIP headers on outbound calls (#2537)
sapta100ms Jul 16, 2026
60b90f9
Updated SIP IPs for prod-us4 and prod-us5 (#2538)
Akashgoswami1 Jul 18, 2026
abdcdee
update static ips and domains to be whitelisted for smooth experience…
Akashgoswami1 Jul 24, 2026
13c2d4c
docs: add release notes for v2.9.85, addressing low-volume production…
sapta100ms Aug 5, 2026
6f35a59
Merge pull request #2540 from 100mslive/android-2.9.85-release
sapta100ms Aug 5, 2026
42dcae4
docs(web): update api reference (#2541)
raviteja83 Aug 12, 2026
e7d542e
docs: add release notes for web
raviteja83 Aug 12, 2026
ef3cd80
docs: re-attach video when a peer's track id changes (#2542)
raviteja83 Aug 20, 2026
c80d225
docs(android): add 2.9.86 release notes (image-capture fixes)
sapta100ms Aug 26, 2026
3ccc308
Merge pull request #2544 from 100mslive/android-2.9.86-release
sapta100ms Aug 26, 2026
322078b
docs(web): update api reference (#2546)
raviteja83 Aug 26, 2026
f180b4d
docs: add 0.15.0 web SDK release notes (#2545)
raviteja83 Aug 26, 2026
3d5026e
Updated with new IPs (#2547)
Akashgoswami1 Aug 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
224 changes: 224 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

This is the documentation site for 100ms.live, built as a Next.js application that renders MDX files into interactive documentation. The site runs on port 4000 by default and uses a file-based routing system where MDX files in the `/docs` directory automatically generate pages.

**Base Path:** All routes are served under `/docs` prefix (configured in [next.config.js:10](next.config.js#L10))

## Development Commands

**Local Development:**
```bash
yarn dev # Start dev server on port 4000
yarn id # Shortcut for yarn && yarn dev
```

**Building:**
```bash
yarn build # Updates releases, builds Next.js, and generates search index
yarn updatereleases # Must run before viewing local release version changes
```

**Code Quality:**
```bash
yarn lint # Lint components and lib files
yarn format # Format code with Prettier
```

**Documentation Linting (Vale):**
```bash
brew install vale
vale sync
vale docs/*
```

Add whitelisted tokens to [.github/workflows/styles/Vocab/HMSVocab/accept.txt](.github/workflows/styles/Vocab/HMSVocab/accept.txt)

**Build Artifacts:**
- Post-build generates sitemap via `next-sitemap` (configured in [next-sitemap.js](next-sitemap.js))
- Search index is generated by [searchIndex.js](searchIndex.js) which calls `updateIndex()` from [lib/algolia/getRecords.ts](lib/algolia/getRecords.ts)

## Architecture

### Documentation Structure

**File System Routing:**
- All docs are MDX files in `/docs` directory, organized by platform:
- `/docs/android/` - Android SDK docs
- `/docs/ios/` - iOS SDK docs
- `/docs/javascript/` - JavaScript SDK docs
- `/docs/flutter/` - Flutter SDK docs
- `/docs/react-native/` - React Native SDK docs
- `/docs/server-side/` - Server-side API docs
- `/docs/prebuilt/` - Prebuilt UI docs
- `/docs/get-started/` - Getting started guides
- `/docs/api-reference/` - API reference docs

**MDX Processing Pipeline:**
The main routing is handled by [pages/[...slug].tsx](pages/[...slug].tsx):
1. **Static Generation:** Uses `getStaticPaths()` to find all MDX files via [lib/mdxUtils.ts](lib/mdxUtils.ts)
2. **Content Bundling:** Uses `mdx-bundler` to compile MDX with plugins
3. **Rendering:** MDX components defined in [components/MDXComponents.tsx](components/MDXComponents.tsx)

**Remark/Rehype Plugin Chain:**
- `imagePlugin` - Custom image handling
- `remarkGfm` - GitHub Flavored Markdown
- `remarkA11yEmoji` - Accessible emoji
- `remarkCodeHeader` - Code block headers
- `withTableofContents` - TOC generation
- `rehypeRaw` - Raw HTML support
- `mdxPrism` - Syntax highlighting

### FrontMatter Requirements

Every MDX file must include:
```yaml
---
title: Page Title # Used for SEO and page heading
nav: 14 # Sidebar ordering (can be decimal for insertion)
---
```

**Note:** If no `nav` value is specified, it defaults to `Infinity` (appears at the end)

### Navigation System

Navigation is auto-generated from the file system:
- [lib/mdxUtils.ts](lib/mdxUtils.ts) scans all MDX files
- `getAllDocs()` extracts frontmatter (title, nav, description)
- `getNavfromDocs()` builds nested navigation structure using dot notation
- Sidebar ordering controlled by `nav` frontmatter value

### Custom Components

MDX files have access to auto-imported components from [components/MDXComponents.tsx](components/MDXComponents.tsx):

**Note Components:**
```mdx
> Default note (uses blockquote)

<Note type='success'>Success message</Note>
<Note type='error'>Error message</Note>
<Note type='warning'>Warning message</Note>
```

**Tabs:**
```mdx
<Tabs id="quality-level" items={['Java', 'Kotlin']} />
<Tab id='quality-level-0'>
Java code here
</Tab>
<Tab id='quality-level-1'>
Kotlin code here
</Tab>
```
**Important:** Tab IDs must match the Tabs `id` with index suffix

**Other Components:**
- `<Codesandbox id="ue1k4" />` - Embed CodeSandbox
- `<Code />` - Automatic code wrapper with copy button
- API request components: `<BaseRequest>`, `<GetRequest>`, `<PostRequest>`, `<DeleteRequest>`, `<EndpointRequest>`
- Layout components: `<FlexContainer>`, `<CollapsibleRoot>`, `<CollapsiblePreview>`, `<CollapsibleContent>`, `<StepsContainer>`, `<StepsToc>`

### Content Reuse

To avoid duplicating common content:
1. Create a file in `/common` directory (`.md` or `.mdx`)
- Use `.md` for plain Markdown
- Use `.mdx` if embedding JSX (escape `<>{}` with backslash or use backticks)
2. Import as PascalCase: `import Test from '@/common/test.md'`
3. Use in MDX: `<Test />`

### Version Management

Release versions are tracked in [releases.js](releases.js) and automatically updated:
- `yarn updatereleases` scans `/docs` for latest version numbers
- Uses [lib/getNewReleases.js](lib/getNewReleases.js) to extract versions from release note files
- Updates `releases.js` with platform versions and dates

### Redirects

Extensive redirect configuration in [next.config.js](next.config.js):
- **Rewrites** (lines 33-56): URL normalization for case-sensitive paths
- **Redirects** (lines 57-1550): Legacy URL redirects, doc reorganization redirects
- Pattern: Old doc structure redirected to new `how-to-guides` organization

**Key redirect patterns:**
- `/concepts/` → `/get-started/`
- Platform-specific `/:platform/v2/guides:path` → `/:platform/v2/get-started:path`
- Feature docs reorganized under `how-to-guides` with categorization

### Algolia Search

Search powered by Algolia:
- Index built during `yarn build` via [searchIndex.js](searchIndex.js)
- Implementation in [lib/algolia/](lib/algolia/)
- Search UI components in [components/](components/)

## File Naming Conventions

**DO:**
- Use kebab-case for filenames: `my-feature.mdx`
- Keep titles in frontmatter, not filename

**DON'T:**
- Use decimal numbers in filenames: ~~`v-1.3.2.mdx`~~ (use frontmatter `title` instead)
- Use ampersands: ~~`tips-&-tricks.mdx`~~ (breaks sitemap generation)
- Use bold in headers: ~~`## **Don't**~~
- Use emojis in filenames (but DO use them in content!)

## Adding New Documentation

### To Existing Section
1. Create MDX file in appropriate `/docs/[platform]/` subdirectory
2. Add frontmatter with `title` and `nav` value
3. Folder names become section headers (capitalized, hyphens → spaces)

### New Documentation Version
To add a new version (e.g., `v3`):
1. Create `/docs/v3` folder
2. Create `/pages/v3/index.tsx` with redirect:
```tsx
import redirect from '@/lib/redirect';
export default redirect('/v3/100ms-v3/basics');
```
3. Add MDX files following existing structure

## Build Configuration

**Node Version:** `^22` (specified in [package.json:36](package.json#L36))

**Key Dependencies:**
- `next@12.3.4` - Next.js framework
- `mdx-bundler@^9.2.1` - MDX compilation
- `@100mslive/react-ui` & `@100mslive/react-icons` - 100ms UI library
- `algoliasearch` - Search functionality
- `shiki` - Syntax highlighting

**Webpack Config:**
- Raw loader for `.md` files (allows importing as strings)
- ESM externals set to 'loose' for compatibility

## Styling

All styles use CSS variables (tokens) defined in [styles/theme.css](styles/theme.css):
- Tokens prefixed with `token` control syntax highlighting
- Fully customizable theme via CSS variables
- No CSS-in-JS, plain CSS with variables

## Content Guidelines

From [README.md](README.md):

**DO:**
- Use emojis in content
- Maintain header hierarchy (H1 → H2 → H3)
- Add language attributes to code blocks for syntax highlighting
- Use https://tableconvert.com/ for Markdown tables

Check failure on line 220 in CLAUDE.md

View workflow job for this annotation

GitHub Actions / vale

[vale] CLAUDE.md#L220 <Vale.Spelling>

Did you really mean 'arkdown'?
Raw output
{"message":"Did you really mean 'arkdown'?","location":{"path":"CLAUDE.md","range":{"start":{"line":220,"column":38},"end":{"line":220,"column":45}}},"severity":"ERROR","code":{"value":"Vale.Spelling"}}

**DON'T:**
- Use bold in headers
- Use decimal numbers in filenames
10 changes: 6 additions & 4 deletions docs/android/v2/how-to-guides/captions/live-captions.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: Live Transcription for Conferencing (Closed Captions - Beta)
title: Live Transcription for Conferencing (Closed Captions)
nav: 15.1
---

Expand All @@ -10,6 +10,7 @@ nav: 15.1
- Minimum 100ms SDK version required is `2.9.54`

## Checking if captions are enabled in a room.

To check if WebRTC (not hls) captions are enabled in a room. Look for any transcriptions being in a started state in the room data.
`val captionsEnabled = hmsSDK.getRoom()?.transcriptions?.find { it.state == TranscriptionState.STARTED } != null`

Expand All @@ -20,12 +21,13 @@ Implement `fun onTranscripts(transcripts: HmsTranscripts)` in the `HMSUpdateList
For an example implementation look at [`TranscriptionUseCase.kt`](https://github.com/100mslive/100ms-android/blob/ac66fa76503ec990322c293f8ce6a504c0c3c444/room-kit/src/main/java/live/hms/roomkit/ui/meeting/TranscriptionUseCase.kt#L44) in the 100ms-android [sample app](https://github.com/100mslive/100ms-android/blob/ac66fa76503ec990322c293f8ce6a504c0c3c444/room-kit/src/main/java/live/hms/roomkit/ui/meeting/TranscriptionUseCase.kt#L44) repository.

## Toggling Live Transcripts

To save on cost, live transcriptions can be disabled for everyone at runtime and toggled on again when required.

```kotlin
// Start Real Time Transcription
hmsSDK.startRealTimeTranscription(

TranscriptionsMode.CAPTION,

object : HMSActionResultListener {
Expand All @@ -40,9 +42,9 @@ hmsSDK.startRealTimeTranscription(
hmsSDK.stopRealTimeTranscription(

TranscriptionsMode.CAPTION,

object : HMSActionResultListener {
override fun onError(error: HMSException) {}
override fun onSuccess() {}
})
```
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
---
title: Spotlight
nav: 10.25
---

Spotlight lets you bring a particular peer's video to center stage for everyone in the room. It uses the [Session Store](/android/v2/how-to-guides/interact-with-room/room/session-store) — a shared key-value store synced across all peers.

When a host spotlights someone, every participant in the room sees that peer in a focused/pinned view.

## Prerequisites

- User must be joined to the room
- Session Store must be available (provided via `onSessionStoreAvailable` callback)

## Setting a Spotlight

Write the peer's video `trackId` to the `"spotlight"` key in Session Store:

```kotlin
// Save the session store reference when it becomes available
var hmsSessionStore: HmsSessionStore? = null

override fun onSessionStoreAvailable(sessionStore: HmsSessionStore) {
hmsSessionStore = sessionStore
}

// Spotlight a peer's video track for everyone
fun spotlightTrack(trackId: String) {
hmsSessionStore?.set(trackId, "spotlight", object : HMSActionResultListener {
override fun onSuccess() { }
override fun onError(error: HMSException) { }
})
}
```

## Removing a Spotlight

Set the `"spotlight"` key to `null`:

```kotlin
fun removeSpotlight() {
hmsSessionStore?.set(null, "spotlight", object : HMSActionResultListener {
override fun onSuccess() { }
override fun onError(error: HMSException) { }
})
}
```

## Listening for Spotlight Changes

Register a key change listener for the `"spotlight"` key. This fires for all peers in the room, including the one who set the spotlight.

```kotlin
sessionStore.addKeyChangeListener(
listOf("spotlight"),
object : HMSKeyChangeListener {
override fun onKeyChanged(key: String, value: JsonElement?) {
if (key == "spotlight") {
val trackId = value?.asString
if (trackId != null) {
// A track has been spotlighted — find and display it
showSpotlightView(trackId)
} else {
// Spotlight removed — return to default view
showDefaultView()
}
}
}
},
object : HMSActionResultListener {
override fun onSuccess() { }
override fun onError(error: HMSException) { }
}
)
```

## Role-Gating

You may want to restrict spotlight to host/moderator roles only. Check an appropriate permission before showing the spotlight option:

```kotlin
fun isAllowedToSpotlight(): Boolean {
return hmsSDK.getLocalPeer()?.hmsRole?.permission?.changeRole == true
}
```
Loading
Loading