{"id":"src_-O3lUdEsBJfi3tya032f7","slug":"livekit-client-sdk-js","name":"Client SDK JS","type":"github","url":"https://github.com/livekit/client-sdk-js","orgId":"org_QZPrmaq0sSsJv8E_Nq2eP","org":{"slug":"livekit","name":"LiveKit"},"isPrimary":false,"metadata":"{\"changelogUrl\":\"https://github.com/livekit/client-sdk-js/blob/HEAD/CHANGELOG.md\",\"changelogDetectedAt\":\"2026-04-11T13:28:19.191Z\"}","releaseCount":102,"releasesLast30Days":4,"avgReleasesPerWeek":0.5,"latestVersion":"v2.18.3","latestDate":"2026-04-16T01:09:27.000Z","changelogUrl":"https://github.com/livekit/client-sdk-js/blob/HEAD/CHANGELOG.md","hasChangelogFile":true,"lastFetchedAt":"2026-04-19T03:02:31.095Z","trackingSince":"2024-02-02T23:05:56.000Z","releases":[{"id":"rel_jr6QeAvtbkeZwBsR3jR1t","version":"v2.18.3","title":"v2.18.3","summary":"### Patch Changes\n\n-   fixing decodeTokenPayload - [#1889](https://github.com/livekit/client-sdk-js/pull/1889) ([@thomasyuill-livekit](https://github....","content":"### Patch Changes\n\n-   fixing decodeTokenPayload - [#1889](https://github.com/livekit/client-sdk-js/pull/1889) ([@thomasyuill-livekit](https://github.com/thomasyuill-livekit))\n","publishedAt":"2026-04-16T01:09:27.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.18.3","media":[]},{"id":"rel_6-RmdC4cchdeyuRM2Gjgw","version":"v2.18.2","title":"v2.18.2","summary":"### Patch Changes\n\n-   Export CheckStatus as enum, not just type - [#1855](https://github.com/livekit/client-sdk-js/pull/1855) ([@Ludobaka](https://gi...","content":"### Patch Changes\n\n-   Export CheckStatus as enum, not just type - [#1855](https://github.com/livekit/client-sdk-js/pull/1855) ([@Ludobaka](https://github.com/Ludobaka))\n\n-   Add new serializer implementation - [#1885](https://github.com/livekit/client-sdk-js/pull/1885) ([@1egoman](https://github.com/1egoman))\n\n-   fix: improve ordering of resolving waitForBufferStatus calls - [#1877](https://github.com/livekit/client-sdk-js/pull/1877) ([@lukasIO](https://github.com/lukasIO))\n\n-   Close streamcontrollers when datatrack gets unpublished - [#1879](https://github.com/livekit/client-sdk-js/pull/1879) ([@lukasIO](https://github.com/lukasIO))\n\n-   Buffer stream events until connected - [#1867](https://github.com/livekit/client-sdk-js/pull/1867) ([@lukasIO](https://github.com/lukasIO))\n\n-   Moves \"connected to Livekit Server\" log within RTCEngine.join so it shows up for reconnects as well as connects - [#1873](https://github.com/livekit/client-sdk-js/pull/1873) ([@1egoman](https://github.com/1egoman))\n\n-   Wrap setE2EEEnabled call in a mutex - [#1882](https://github.com/livekit/client-sdk-js/pull/1882) ([@lukasIO](https://github.com/lukasIO))\n","publishedAt":"2026-04-15T14:16:45.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.18.2","media":[]},{"id":"rel_jCp_IPfc9HgPSeIDelHOC","version":"v2.18.1","title":"v2.18.1","summary":"### Patch Changes\r\n\r\n-   Adds data tracks support - [#1820](https://github.com/livekit/client-sdk-js/pull/1820) ([@1egoman](https://github.com/1egoman...","content":"### Patch Changes\r\n\r\n-   Adds data tracks support - [#1820](https://github.com/livekit/client-sdk-js/pull/1820) ([@1egoman](https://github.com/1egoman)) ([docs](https://docs.livekit.io/transport/data/data-tracks/), [blog post](https://livekit.com/blog/livekit-data-tracks-realtime-streaming))\r\n\r\n-   Send publisher offer with join request to accelerate connection - [#1846](https://github.com/livekit/client-sdk-js/pull/1846) ([@cnderrauber](https://github.com/cnderrauber))\r\n\r\n-   Enable E2EE key-size configuration via ExternalE2EEKeyProvider options - [#1841](https://github.com/livekit/client-sdk-js/pull/1841) ([@MariusBernhardt](https://github.com/MariusBernhardt))\r\n","publishedAt":"2026-04-02T16:56:41.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.18.1","media":[]},{"id":"rel_Ps0u0gy2WNI_qcsl8bH8q","version":"v2.18.0","title":"v2.18.0","summary":"### Minor Changes\n\n-   Rename pID to participantID in log context - [#1842](https://github.com/livekit/client-sdk-js/pull/1842) ([@lukasIO](https://gi...","content":"### Minor Changes\n\n-   Rename pID to participantID in log context - [#1842](https://github.com/livekit/client-sdk-js/pull/1842) ([@lukasIO](https://github.com/lukasIO))\n\n### Patch Changes\n\n-   Ensure freshly created RTCEngine isn't recreated on join - [#1843](https://github.com/livekit/client-sdk-js/pull/1843) ([@lukasIO](https://github.com/lukasIO))\n\n-   Fix shouldReturnCachedValueFromFetch check for cached options - [#1837](https://github.com/livekit/client-sdk-js/pull/1837) ([@lukasIO](https://github.com/lukasIO))\n\n-   Fix data stream header length field - [#1847](https://github.com/livekit/client-sdk-js/pull/1847) ([@ladvoc](https://github.com/ladvoc))\n\n-   Add token fetch force option to skip TokenSource cache - [#1839](https://github.com/livekit/client-sdk-js/pull/1839) ([@lukasIO](https://github.com/lukasIO))\n","publishedAt":"2026-03-23T20:41:11.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.18.0","media":[]},{"id":"rel_IStHMf7XZG2k_KPhJrgLM","version":"v2.17.3","title":"v2.17.3","summary":"### Patch Changes\n\n-   Update happy-dom dependency version - [#1821](https://github.com/livekit/client-sdk-js/pull/1821) ([@renovate](https://github.c...","content":"### Patch Changes\n\n-   Update happy-dom dependency version - [#1821](https://github.com/livekit/client-sdk-js/pull/1821) ([@renovate](https://github.com/apps/renovate))\n\n-   e2ee: ensure current key index isn't unintentionally updated - [#1830](https://github.com/livekit/client-sdk-js/pull/1830) ([@lukasIO](https://github.com/lukasIO))\n\n-   Prevent unmute -> mute -> unmute cycle for track restarts that happen during unmute - [#1793](https://github.com/livekit/client-sdk-js/pull/1793) ([@mfairley](https://github.com/mfairley))\n\n-   Use controller.error to signal unexpected errors mid data stream - [#1834](https://github.com/livekit/client-sdk-js/pull/1834) ([@lukasIO](https://github.com/lukasIO))\n\n-   Signal leave on failed connection attempts if signalling is connected - [#1817](https://github.com/livekit/client-sdk-js/pull/1817) ([@lukasIO](https://github.com/lukasIO))\n\n-   Vendored ts-debounce and added critical timers to debounce function - [#1800](https://github.com/livekit/client-sdk-js/pull/1800) ([@mfairley](https://github.com/mfairley))\n\n-   Ensure cryptor setup respects async queue in worker - [#1833](https://github.com/livekit/client-sdk-js/pull/1833) ([@lukasIO](https://github.com/lukasIO))\n\n-   Adds new OutgoingDataTrackManager to manage sending data track payloads - [#1810](https://github.com/livekit/client-sdk-js/pull/1810) ([@1egoman](https://github.com/1egoman))\n","publishedAt":"2026-03-12T14:54:33.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.17.3","media":[]},{"id":"rel_5SVpWwixorBfCJxTRm-TP","version":"v2.17.2","title":"v2.17.2","summary":"### Patch Changes\n\n-   Ensure connection state mismatches aren't triggered for ongoing PC connection attempts - [#1807](https://github.com/livekit/cli...","content":"### Patch Changes\n\n-   Ensure connection state mismatches aren't triggered for ongoing PC connection attempts - [#1807](https://github.com/livekit/client-sdk-js/pull/1807) ([@lukasIO](https://github.com/lukasIO))\n\n-   Fix unnecessary track restarts on unmute when using ideal device constraints - [#1794](https://github.com/livekit/client-sdk-js/pull/1794) ([@mfairley](https://github.com/mfairley))\n\n-   Prevent ongoing renegotiations from declaring the negotiation as timed out - [#1813](https://github.com/livekit/client-sdk-js/pull/1813) ([@lukasIO](https://github.com/lukasIO))\n\n-   Add data track packetizer and depacketizer implementations - [#1798](https://github.com/livekit/client-sdk-js/pull/1798) ([@1egoman](https://github.com/1egoman))\n\n-   Add missing type exports required by `@livekit/components-core` - [#1815](https://github.com/livekit/client-sdk-js/pull/1815) ([@1egoman](https://github.com/1egoman))\n","publishedAt":"2026-02-19T15:53:54.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.17.2","media":[]},{"id":"rel_VmaMX4Cg5bN9iswMz0edd","version":"v2.17.1","title":"v2.17.1","summary":"### Patch Changes\n\n-   Add data track packet serialization + deserialization logic - [#1792](https://github.com/livekit/client-sdk-js/pull/1792) ([@1e...","content":"### Patch Changes\n\n-   Add data track packet serialization + deserialization logic - [#1792](https://github.com/livekit/client-sdk-js/pull/1792) ([@1egoman](https://github.com/1egoman))\n\n-   Update docs to clarify other client HKDF support - [#1796](https://github.com/livekit/client-sdk-js/pull/1796) ([@1egoman](https://github.com/1egoman))\n\n-   Add attachedStreamIds as text stream metadata - [#1805](https://github.com/livekit/client-sdk-js/pull/1805) ([@1egoman](https://github.com/1egoman))\n","publishedAt":"2026-02-06T14:57:55.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.17.1","media":[]},{"id":"rel_y2FKCa0BUL_OQPYM0jpEW","version":"v2.17.0","title":"v2.17.0","summary":"### Minor Changes\n\n-   Add new rtc path that defaults to single peer connection mode and falls back to legacy dual pc - [#1785](https://github.com/liv...","content":"### Minor Changes\n\n-   Add new rtc path that defaults to single peer connection mode and falls back to legacy dual pc - [#1785](https://github.com/livekit/client-sdk-js/pull/1785) ([@lukasIO](https://github.com/lukasIO))\n\n### Patch Changes\n\n-   Use TypedPromise for typesafe errors - [#1770](https://github.com/livekit/client-sdk-js/pull/1770) ([@lukasIO](https://github.com/lukasIO))\n\n-   e2ee: ensure frame cryptor transform setup works for rapid subscription changes - [#1789](https://github.com/livekit/client-sdk-js/pull/1789) ([@lukasIO](https://github.com/lukasIO))\n","publishedAt":"2026-01-12T14:03:17.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.17.0","media":[]},{"id":"rel_a05PEWucqUxgawZt-zSVw","version":"v2.16.1","title":"v2.16.1","summary":"### Patch Changes\n\n-   export type RoomEventCallbacks - [#1599](https://github.com/livekit/client-sdk-js/pull/1599) ([@shincurry](https://github.com/s...","content":"### Patch Changes\n\n-   export type RoomEventCallbacks - [#1599](https://github.com/livekit/client-sdk-js/pull/1599) ([@shincurry](https://github.com/shincurry))\n\n-   Remove experimental tag on some stabilized features - [#1777](https://github.com/livekit/client-sdk-js/pull/1777) ([@lukasIO](https://github.com/lukasIO))\n\n-   Tag errors by name - [#1764](https://github.com/livekit/client-sdk-js/pull/1764) ([@lukasIO](https://github.com/lukasIO))\n\n-   Fix connection check issues with pinned regions - [#1775](https://github.com/livekit/client-sdk-js/pull/1775) ([@lukasIO](https://github.com/lukasIO))\n\n-   Control latency of lossy data channel - [#1754](https://github.com/livekit/client-sdk-js/pull/1754) ([@cnderrauber](https://github.com/cnderrauber))\n\n-   Add docs comments making it clear TokenSource-prefixed exported types shouldn't be used for TokenSource construction - [#1776](https://github.com/livekit/client-sdk-js/pull/1776) ([@1egoman](https://github.com/1egoman))\n\n-   Fix leaking memory by removing event listener from correct scope - [#1768](https://github.com/livekit/client-sdk-js/pull/1768) ([@wuhkuh](https://github.com/wuhkuh))\n","publishedAt":"2025-12-11T14:13:19.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.16.1","media":[]},{"id":"rel_93BBi07x_nPHiPWBYv-_B","version":"v2.16.0","title":"v2.16.0","summary":"### Minor Changes\n\n-   Expose new encryption option field - [#1750](https://github.com/livekit/client-sdk-js/pull/1750) ([@lukasIO](https://github.com...","content":"### Minor Changes\n\n-   Expose new encryption option field - [#1750](https://github.com/livekit/client-sdk-js/pull/1750) ([@lukasIO](https://github.com/lukasIO))\n\n### Patch Changes\n\n-   Wait for dc buffer status low for all published packets - [#1691](https://github.com/livekit/client-sdk-js/pull/1691) ([@lukasIO](https://github.com/lukasIO))\n\n-   Fix message loss during resuming/migration - [#1757](https://github.com/livekit/client-sdk-js/pull/1757) ([@cnderrauber](https://github.com/cnderrauber))\n\n-   Cancel region refresh on invalid tokens - [#1755](https://github.com/livekit/client-sdk-js/pull/1755) ([@lukasIO](https://github.com/lukasIO))\n\n-   Add connectionCount tracking and stop auto refetching after timeout - [#1756](https://github.com/livekit/client-sdk-js/pull/1756) ([@lukasIO](https://github.com/lukasIO))\n\n-   Add explicit error types for future helper - [#1753](https://github.com/livekit/client-sdk-js/pull/1753) ([@lukasIO](https://github.com/lukasIO))\n\n-   fix(LocalTrackAudio): prevent overwriting constraint flags - [#1744](https://github.com/livekit/client-sdk-js/pull/1744) ([@itamayo](https://github.com/itamayo))\n","publishedAt":"2025-11-19T07:15:50.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.16.0","media":[]},{"id":"rel_RENZzUaAEPKPaC8tZFGS7","version":"v2.15.16","title":"v2.15.16","summary":"### Patch Changes\n\n-   Fix slow start on vp9 - [#1740](https://github.com/livekit/client-sdk-js/pull/1740) ([@lukasIO](https://github.com/lukasIO))\n\n-...","content":"### Patch Changes\n\n-   Fix slow start on vp9 - [#1740](https://github.com/livekit/client-sdk-js/pull/1740) ([@lukasIO](https://github.com/lukasIO))\n\n-   Keep text / byte stream handlers between room disconnects - [#1741](https://github.com/livekit/client-sdk-js/pull/1741) ([@1egoman](https://github.com/1egoman))\n\n-   Export RoomEventCallbacks - [#1738](https://github.com/livekit/client-sdk-js/pull/1738) ([@haydenbr](https://github.com/haydenbr))\n\n-   Speed up network switch recovery - [#1745](https://github.com/livekit/client-sdk-js/pull/1745) ([@lukasIO](https://github.com/lukasIO))\n\n-   Ensure unexpected websocket disconnects trigger reconnect flow - [#1748](https://github.com/livekit/client-sdk-js/pull/1748) ([@lukasIO](https://github.com/lukasIO))\n","publishedAt":"2025-11-14T23:32:40.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.15.16","media":[]},{"id":"rel_sXGuhStH2LxKZszpGilyT","version":"v2.15.15","title":"v2.15.15","summary":"### Patch Changes\n\n-   Add exponential backoff strategy in case of connection failures - [#1715](https://github.com/livekit/client-sdk-js/pull/1715) (...","content":"### Patch Changes\n\n-   Add exponential backoff strategy in case of connection failures - [#1715](https://github.com/livekit/client-sdk-js/pull/1715) ([@lukasIO](https://github.com/lukasIO))\n\n-   Add participant as an optional parameter to EncryptionError events emitted on room level - [#1723](https://github.com/livekit/client-sdk-js/pull/1723) ([@CSantosM](https://github.com/CSantosM))\n\n-   fix(e2ee): propagate worker data decryption errors and reject corresponding promises - [#1729](https://github.com/livekit/client-sdk-js/pull/1729) ([@CSantosM](https://github.com/CSantosM))\n\n-   Fix potential undefined access while disconnecting - [#1734](https://github.com/livekit/client-sdk-js/pull/1734) ([@lukasIO](https://github.com/lukasIO))\n\n-   Add new areTokenSourceFetchOptionsEqual function - [#1733](https://github.com/livekit/client-sdk-js/pull/1733) ([@1egoman](https://github.com/1egoman))\n\n-   Ensure publication isn't attempted after timeout rejected the promise - [#1725](https://github.com/livekit/client-sdk-js/pull/1725) ([@lukasIO](https://github.com/lukasIO))\n","publishedAt":"2025-11-11T13:12:33.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.15.15","media":[]},{"id":"rel_VZi0aaX4usoZImUNUk0Q-","version":"v2.15.14","title":"v2.15.14","summary":"### Patch Changes\n\n-   Apply server supplied cache control settings for region url provider - [#1669](https://github.com/livekit/client-sdk-js/pull/16...","content":"### Patch Changes\n\n-   Apply server supplied cache control settings for region url provider - [#1669](https://github.com/livekit/client-sdk-js/pull/1669) ([@lukasIO](https://github.com/lukasIO))\n\n-   Only export types for TokenSource variants to try to push users to use the TokenSource.foo static constructors instead - [#1707](https://github.com/livekit/client-sdk-js/pull/1707) ([@1egoman](https://github.com/1egoman))\n\n-   Add check to ensure track visibility update only happens when `adaptiveStream` is enabled - [#1712](https://github.com/livekit/client-sdk-js/pull/1712) ([@1egoman](https://github.com/1egoman))\n\n-   Cache region settings per project - [#1709](https://github.com/livekit/client-sdk-js/pull/1709) ([@lukasIO](https://github.com/lukasIO))\n\n-   Export decodeTokenPayload from package - [#1710](https://github.com/livekit/client-sdk-js/pull/1710) ([@1egoman](https://github.com/1egoman))\n","publishedAt":"2025-10-28T08:28:06.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.15.14","media":[]},{"id":"rel_KnDufz7uLLuodi3ceICA2","version":"v2.15.13","title":"v2.15.13","summary":"### Patch Changes\n\n-   Disable ScriptTransform for Chromium based browsers - [#1703](https://github.com/livekit/client-sdk-js/pull/1703) ([@lukasIO](h...","content":"### Patch Changes\n\n-   Disable ScriptTransform for Chromium based browsers - [#1703](https://github.com/livekit/client-sdk-js/pull/1703) ([@lukasIO](https://github.com/lukasIO))\n","publishedAt":"2025-10-21T17:17:55.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.15.13","media":[]},{"id":"rel_9gCTHEYZM6adct3IpS74N","version":"v2.15.12","title":"v2.15.12","summary":"### Patch Changes\n\n-   Remove AbortSignal.any usage - [#1700](https://github.com/livekit/client-sdk-js/pull/1700) ([@lukasIO](https://github.com/lukas...","content":"### Patch Changes\n\n-   Remove AbortSignal.any usage - [#1700](https://github.com/livekit/client-sdk-js/pull/1700) ([@lukasIO](https://github.com/lukasIO))\n","publishedAt":"2025-10-20T17:11:58.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.15.12","media":[]},{"id":"rel_JfcsrYQJpiyimsyb9PqXz","version":"v2.15.11","title":"v2.15.11","summary":"### Patch Changes\n\n-   Fix abort race resulting in multiple code paths trying to close the ws connection - [#1695](https://github.com/livekit/client-s...","content":"### Patch Changes\n\n-   Fix abort race resulting in multiple code paths trying to close the ws connection - [#1695](https://github.com/livekit/client-sdk-js/pull/1695) ([@lukasIO](https://github.com/lukasIO))\n\n-   fix the RPC comment and clam the timeout if the provided value is less than 8s - [#1694](https://github.com/livekit/client-sdk-js/pull/1694) ([@xianshijing-lk](https://github.com/xianshijing-lk))\n\n-   Fix track mapping when single peer connectionis used - [#1696](https://github.com/livekit/client-sdk-js/pull/1696) ([@lukasIO](https://github.com/lukasIO))\n","publishedAt":"2025-10-16T08:14:51.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.15.11","media":[]},{"id":"rel_3cVI9S1QHqTHN1VgaVC02","version":"v2.15.10","title":"v2.15.10","summary":"### Patch Changes\n\n-   Ensure leave requests can be sent before join response is received - [#1687](https://github.com/livekit/client-sdk-js/pull/1687...","content":"### Patch Changes\n\n-   Ensure leave requests can be sent before join response is received - [#1687](https://github.com/livekit/client-sdk-js/pull/1687) ([@lukasIO](https://github.com/lukasIO))\n\n-   Increase RPC total timeout to 15s and connection timeout to 7s for better reliability under network latency. - [#1692](https://github.com/livekit/client-sdk-js/pull/1692) ([@xianshijing-lk](https://github.com/xianshijing-lk))\n\n-   Add sdp to answer debug log - [#1689](https://github.com/livekit/client-sdk-js/pull/1689) ([@lukasIO](https://github.com/lukasIO))\n","publishedAt":"2025-10-14T18:17:25.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.15.10","media":[]},{"id":"rel_eUhgvdU4w4CMlZLuodmPF","version":"v2.15.9","title":"v2.15.9","summary":"### Patch Changes\n\n-   Populate participant identity when receiving encrypted e2ee packets - [#1679](https://github.com/livekit/client-sdk-js/pull/167...","content":"### Patch Changes\n\n-   Populate participant identity when receiving encrypted e2ee packets - [#1679](https://github.com/livekit/client-sdk-js/pull/1679) ([@lukasIO](https://github.com/lukasIO))\n\n-   Export supportsAudioOutputSelection helper - [#1676](https://github.com/livekit/client-sdk-js/pull/1676) ([@lukasIO](https://github.com/lukasIO))\n\n-   Fix bug in isResponseExpired token expiry checking logic - [#1683](https://github.com/livekit/client-sdk-js/pull/1683) ([@1egoman](https://github.com/1egoman))\n\n-   Use WebSocketStream for sequential signal processing - [#1638](https://github.com/livekit/client-sdk-js/pull/1638) ([@lukasIO](https://github.com/lukasIO))\n\n-   Support for data channel encryption on React-Native - [#1678](https://github.com/livekit/client-sdk-js/pull/1678) ([@davidliu](https://github.com/davidliu))\n\n-   Single peer connection support - [#1682](https://github.com/livekit/client-sdk-js/pull/1682) ([@lukasIO](https://github.com/lukasIO))\n","publishedAt":"2025-10-13T14:52:31.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.15.9","media":[]},{"id":"rel_TMfL8TDh5QZ7t_XtsfozA","version":"v2.15.8","title":"v2.15.8","summary":"### Patch Changes\n\n-   Add preliminary support for data message decryption - [#1595](https://github.com/livekit/client-sdk-js/pull/1595) ([@lukasIO](h...","content":"### Patch Changes\n\n-   Add preliminary support for data message decryption - [#1595](https://github.com/livekit/client-sdk-js/pull/1595) ([@lukasIO](https://github.com/lukasIO))\n\n-   Add video autoplay attributes to PublishVideoCheck - [#1648](https://github.com/livekit/client-sdk-js/pull/1648) ([@Doomann](https://github.com/Doomann))\n\n-   Ensure handleDisconnect is called also when already in Reconnecting state - [#1671](https://github.com/livekit/client-sdk-js/pull/1671) ([@lukasIO](https://github.com/lukasIO))\n\n-   Fix TS 5.9 generic Uint8Array declaration when inferred - [#1668](https://github.com/livekit/client-sdk-js/pull/1668) ([@lukasIO](https://github.com/lukasIO))\n\n-   Properly clean up event listeners in getNewAudioContext() - [#1660](https://github.com/livekit/client-sdk-js/pull/1660) ([@indexds](https://github.com/indexds))\n\n-   Avoid uncaught errors related to send/disconnect races - [#1674](https://github.com/livekit/client-sdk-js/pull/1674) ([@bryfox](https://github.com/bryfox))\n\n-   Register online listener in engine's join - [#1658](https://github.com/livekit/client-sdk-js/pull/1658) ([@lukasIO](https://github.com/lukasIO))\n\n-   add TokenSource token fetching abstraction - [#1645](https://github.com/livekit/client-sdk-js/pull/1645) ([@1egoman](https://github.com/1egoman))\n","publishedAt":"2025-10-02T14:38:06.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.15.8","media":[]},{"id":"rel_hqpB14bx2N7Ds93mM2H_X","version":"v2.15.7","title":"v2.15.7","summary":"### Patch Changes\n\n-   Ensure permission event is only emitted once for local participant - [#1643](https://github.com/livekit/client-sdk-js/pull/1643...","content":"### Patch Changes\n\n-   Ensure permission event is only emitted once for local participant - [#1643](https://github.com/livekit/client-sdk-js/pull/1643) ([@lukasIO](https://github.com/lukasIO))\n\n-   internal typing fix - add missing async to postAction - [#1644](https://github.com/livekit/client-sdk-js/pull/1644) ([@1egoman](https://github.com/1egoman))\n\n-   Ensure mid is always interpreted as string - [#1641](https://github.com/livekit/client-sdk-js/pull/1641) ([@lukasIO](https://github.com/lukasIO))\n","publishedAt":"2025-09-11T11:10:20.000Z","url":"https://github.com/livekit/client-sdk-js/releases/tag/v2.15.7","media":[]}],"pagination":{"page":1,"pageSize":20,"totalPages":6,"totalItems":102},"summaries":{"rolling":{"windowDays":90,"summary":"The SDK shifted toward unifying its connection model and enabling new data capabilities. A single peer connection mode launched in v2.17.0 as the default path with fallback to the legacy dual-PC approach, addressing long-standing complexity in the RTC layer. Data tracks moved from foundational work—packet serialization and depacketizer implementations shipped across v2.17.1 and v2.17.2—to full support in v2.18.1, including configurable E2EE key sizes for the data path. Along the way, the team tightened connection state handling to prevent false mismatches during negotiation and fixed track restart cycles that triggered unwanted mute states during unmute operations.","releaseCount":6,"generatedAt":"2026-04-11T13:28:22.509Z"},"monthly":[{"year":2026,"month":3,"summary":"Connection stability and logging clarity dominated March development. The SDK renamed internal log context fields from abbreviated to full names (pID to participantID) and fixed a critical issue where RTCEngine instances were being unnecessarily recreated on join, reducing overhead during connection establishment. Additional fixes addressed end-to-end encryption key index management, data stream header parsing, and track state transitions during unmute cycles.","releaseCount":2,"generatedAt":"2026-04-11T13:28:24.458Z"}]}}