# MatrixRTC SDK (EXPERIMENTAL) `@element-hq/matrixrtc-sdk` is the call model under Element Call, on its own: MatrixRTC memberships and transports, LiveKit connections, publishing, E2EE keys and the media of every member, as observables. It has no UI. Element Call's own `CallViewModel` is meant to become one consumer of it; the design is in [`sdk-plan.md`](../sdk-plan.md). **Status:** first implementation. `createRtcSession` joins the session, connects to the transport, publishes the local media and exposes every member's media; the development harness and its e2e tests in `playwright/sdk` drive it. The implementation still imports the building blocks it shares with Element Call from `src/` (connections, memberships, key provider); moving them here is the next slice. ## Using it ```ts import { constant, createRtcSession, E2eeType, MatrixRTCMode, ObservableScope, } from "@element-hq/matrixrtc-sdk"; const scope = new ObservableScope(); const session = createRtcSession( scope, client, // a matrix-js-sdk MatrixClient, logged in and syncing room, // the matrix-js-sdk Room to hold the session in, from client.getRoom() { microphoneEnabled$: constant(true), cameraEnabled$: constant(true), audioInputDeviceId$: constant(undefined), videoInputDeviceId$: constant(undefined), videoProcessor$: constant(undefined), }, { encryptionSystem: { kind: E2eeType.PER_PARTICIPANT }, matrixRTCMode: MatrixRTCMode.Compatibility, }, ); session.join(); session.remoteMembers$.subscribe((members) => { // each member has displayName$, media$ and more; a media track is rendered // by handing it a