Skip to content
Open
Changes from all commits
Commits
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
80 changes: 80 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# LiveKit Flutter SDK

## Commands

Supported platforms: Android, iOS, macOS, Windows, Linux, Web.

```zsh
# Fetch dependencies
flutter pub get

# Analyze
flutter analyze

# Run tests
flutter test

# Format
dart format -l 120 lib test

# Generate protobufs (requires ../protocol/protobufs checkout)
make proto

# Build web E2EE worker
make e2ee
```

## Architecture

```
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add language identifier to fenced code block.

The code block lacks a language identifier, which impacts accessibility and proper rendering in some markdown processors.

📝 Proposed fix
-```
+```text
 lib/
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
```
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

29-29: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
In `@AGENTS.md` at line 29, The fenced code block containing the directory entry
"lib/" is missing a language identifier; update that code fence to include a
language tag (e.g., ```text or ```bash) so markdown renderers and accessibility
tools correctly handle it — locate the fenced block that wraps "lib/" in
AGENTS.md and replace the opening ``` with a language-specific fence like
```text.

lib/
├── livekit_client.dart # Public exports
├── livekit_client_web.dart # Web-specific entry point
└── src/
├── core/ # Room, Engine, SignalClient, Transport
├── participant/ # LocalParticipant, RemoteParticipant
├── track/ # Local/Remote tracks, Web track adapters
├── publication/ # TrackPublication types
├── data_stream/ # Reliable/unreliable data channels
├── e2ee/ # End-to-end encryption
├── agent/ # AI agent integration (e.g., chat)
├── managers/ # Audio/video device and media managers
├── support/ # WebSocket, platform shims, utilities
├── hardware/ # Device/permission helpers
├── token_source/ # TokenSource implementations
├── stats/ # RTC stats models
├── proto/ # Generated protobufs
├── widgets/ # Flutter UI widgets (video, controls)
└── utils/ # Shared helpers
```

Key components:

- `Room` - main entry point; manages connection state, participants, and tracks
- `Engine` - orchestrates signaling, transports, and media lifecycle
- `SignalClient` - WebSocket signaling with LiveKit server
- `Transport` - WebRTC peer connection wrapper
- `Participant` - local/remote participant state and publications
- `Track`/`TrackPublication` - media track abstractions

## WebRTC

WebRTC provides the underlying media transport. The Flutter SDK wraps native WebRTC via
platform-specific implementations in `android/`, `ios/`, `macOS/`, `windows/`, `linux/`, `web/`,
and shared code in `shared_cpp/` and `shared_swift/`. Dart APIs in `core/` and `track/` shield
consumers from platform differences.

Key files:

- `lib/src/core/transport.dart` - peer connection wrapper and ICE/SDP handling
- `lib/src/core/signal_client.dart` - signaling protocol implementation
- `lib/src/track/` - track bindings and renderers (including `web/`)
- `lib/src/widgets/` - Flutter video rendering widgets
Comment on lines +60 to +72
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify that the key files mentioned in the WebRTC section exist

files=(
  "lib/src/core/transport.dart"
  "lib/src/core/signal_client.dart"
  "lib/src/track/"
  "lib/src/widgets/"
)

echo "Checking referenced files:"
for file in "${files[@]}"; do
  if [ -e "$file" ]; then
    echo "$file exists"
  else
    echo "$file does not exist"
  fi
done

# Also check for platform-specific directories mentioned
echo ""
echo "Checking platform directories:"
platform_dirs=(
  "android/"
  "ios/"
  "macOS/"
  "windows/"
  "linux/"
  "web/"
  "shared_cpp/"
  "shared_swift/"
)

for dir in "${platform_dirs[@]}"; do
  if [ -d "$dir" ]; then
    echo "$dir exists"
  else
    echo "$dir does not exist"
  fi
done

Repository: livekit/client-sdk-flutter

Length of output: 404


🏁 Script executed:

#!/bin/bash
# Search for macOS-related directories (case-insensitive)
find . -maxdepth 1 -type d -iname "*mac*" | head -20

Repository: livekit/client-sdk-flutter

Length of output: 77


Correct macOS/ directory name reference to macos/ in line 63.

The WebRTC section references the platform directory as macOS/, but the actual directory in the repository is named macos/ (lowercase). Update line 63 to use the correct directory name. All other file paths (lib/src/core/transport.dart, lib/src/core/signal_client.dart, lib/src/track/, lib/src/widgets/) are correct and exist.

🤖 Prompt for AI Agents
In `@AGENTS.md` around lines 60 - 72, Update the WebRTC platform directory
reference from "macOS/" to the correct lowercase "macos/" in the WebRTC section
(replace the occurrence of "macOS/" found in the block listing platform-specific
implementations), ensuring the line now reads `macos/` to match the actual
repository directory; leave the other listed paths
(`lib/src/core/transport.dart`, `lib/src/core/signal_client.dart`,
`lib/src/track/`, `lib/src/widgets/`) unchanged.


## Testing

- `test/core/` - unit tests for room, signaling, and core models
- `test/integration/` - integration tests (often require local `livekit-server --dev`)
- `test/agent/` - agent feature tests
- `test/token/` - token source tests
- `test/support/` and `test/utils/` - helpers and fixtures