# MatrixRTC SDK (EXPERIMENTAL) `@element-hq/matrixrtc-sdk` is the call model under Element Call, on its own: it joins a MatrixRTC slot in a Matrix room, writes and watches the memberships, connects to the media transport (LiveKit today), publishes the local media and exposes every member and their tracks as observables. It has no UI. Element Call's own `CallViewModel` is one consumer of it; any host can build a different view on top. The design is in [`SdkArchitecture.md`](./SdkArchitecture.md), what moved out of Element Call's `src/` in [`SdkMigration.md`](./SdkMigration.md). **Status:** first implementation. `createRTCSlot` and `slot.join()` join the session, connect to the transport, publish the local media and expose every member's media; the development harness and its e2e tests in `playwright/sdk` drive it, and Element Call's own `CallViewModel` is built on it. It depends on nothing in Element Call's `src/`. ## Using it ```ts import { createRTCSlot, E2eeType, MatrixRTCMode, ObservableScope, trackBySource$, } from "@element-hq/matrixrtc-sdk"; const scope = new ObservableScope(); const slot = createRTCSlot( scope, client, // a matrix-js-sdk MatrixClient, logged in and syncing room, // the matrix-js-sdk Room, from client.getRoom() once the join has synced { encryptionSystem: { kind: E2eeType.PER_PARTICIPANT }, matrixRTCMode: MatrixRTCMode.Compatibility, }, ); const participation = slot.join({ publish: [{ source: "microphone" }, { source: "camera" }], }); // A