Skip to content
Open
Changes from 1 commit
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

## 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