Packages

@elevenlabs/client

1.30.0 · 21 Oct 2026MIT696k / weekRepositoryHomepagenpmAtom feed

84 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.

  1. 1.x · latest line
  2. 1.30.0

    21 Oct 2026
    • 3855a41: Add an opt-in stripAudioTags session option that removes expressive audio tags such as [laughs] from agent messages passed to onMessage and onAgentResponseCorrection, and export the stripAudioTags helper. Stripped text no longer lines up character-for-character with onAudioAlignment timings, so leave the option off if you rely on them.

  3. 1.29.0

    20 Oct 2026
    • dca95fb: Add an onAudioAlignmentPlayback callback, called with { event_id, alignment } when an aligned audio chunk starts playing, for syncing text with speech. It is not called on WebRTC connections.

  4. 1.28.0

    13 Oct 2026
    • bac5c96: Add the experimental persistentSession session option for resumable text conversations over WebSocket, and the onConversationHistory callback for the transcript rows the server replays on resume. WebSocket sessions now also emit onConversationMetadata.

  5. 1.27.0

    6 Oct 2026
    • 050aeea: Add a previousText option to Scribe.connect() and useScribe() in microphone mode. It is sent with the first microphone audio chunk to give the model context, such as existing document text, for casing, punctuation and sentence continuation.

    • 7f316ec: Pass libsampleratePath to MediaDeviceOutput so output resampling uses the custom libsamplerate bundle path, matching MediaDeviceInput.

  6. 1.26.0

    29 Sep 2026
    • 33a5042: Add the transcriptEdit option to Scribe.connect() and dispatch the new edited_transcript server message:

    • 32358cc: Export the MessagePayload type from the package root so consumers can type onMessage handlers.

    • e2d1ac7: Expose stable response IDs for agent messages and use them to prevent a reply
      from rendering twice when it is resent during a turn, while retaining
      compatibility with older orchestrators.

  7. 1.25.0

    7 Sep 2026
    • de2f863: Re-export the MessageAttachment type from the package entry point so consumers can import type { MessageAttachment } from "@elevenlabs/client" instead of deriving it from the onMessage callback signature.

  8. 1.24.0

    4 Sep 2026
    • afd2170: Forward the optional attachments field (url, name, mime_type) from the agent_response client event into the onMessage payload, so consumers can render files attached to agent messages, e.g. relayed from a human agent reply.

    • aad288c: Add an optional webRtc.singlePeerConnection session option for WebRTC connections. Set it to false to force LiveKit's dual peer connection path, which restores the microphone request timing used before livekit-client began defaulting to the v1 join protocol. Leaving it unset keeps livekit-client's own default.

  9. 1.23.0

    26 Aug 2026
    • f94ef6d: Add fileIds to sendMultimodalMessage and dual-send file + files on the wire.

  10. 1.22.0

    25 Aug 2026
    • b60d460: Draw rich content alongside the first message, and echo button taps back to the
      server.

      A first_message_rich_content entry on the widget config is painted with the
      first message before any connection exists, so a text-only widget shows its
      buttons on a cold start. Tapping one starts the conversation with that button's
      message, the same way typing into the input does — previously a button was
      disabled until connected, which left a first-message button waiting for the
      session it would itself begin.

      A row the customer has already answered is retired rather than left sitting in
      the transcript. Whether a component does this is per-component, so display
      components can later stay and merely de-emphasise instead of disappearing.

      sendUserMessage accepts an optional attribution (richContentId) that rides
      the user_message event as rich_content_id; the widget sends it automatically
      when a button is tapped, on both the mid-conversation and conversation-starting
      paths. It names the row the button belonged to rather than the button itself
      given the row, the message text says which button was pressed. Purely additive:
      servers that predate the field ignore it, and the message text alone remains
      what the agent acts on.

    • be9cb0c: Add support for the external_agent_disconnected client event. The client SDK exposes a new onExternalAgentDisconnected callback, and the widget leaves external-agent mode (and clears the typing indicator) when the external human agent disconnects and the AI agent resumes control.

    • dce9815: Add an onMCPToolApprovalRequest handler option, which decides MCP tool calls that arrive in the awaiting_approval state and sends the approval result for you. Each tool_call_id is answered at most once; a handler that rejects or resolves to a non-boolean is reported through onError and denied, and a decision that arrives after the call left awaiting_approval or the session ended is dropped rather than sent. The handler receives an AbortSignal so approval UI can dismiss itself when that happens.

  11. 1.21.0

    19 Aug 2026
    • eea19d2: Add support for the context_usage server event via a new onContextUsage callback. The event is emitted after each completed agent turn and reports { event_id, model, context_tokens, context_limit_tokens }, where context_tokens is the prompt size of the turn's last LLM generation and context_limit_tokens is that model's maximum context window — useful for surfacing how close a long conversation is to the context limit.

    • e3d1c40: Resolve React Native via the react-native export condition instead of sniffing globals, and let platform entry points inject the setup guidance shown when nothing is registered.

  12. 1.20.0

    17 Aug 2026
    • d73eca4: Add an optional webRtc.iceTransportPolicy session option for WebRTC connections. Set to "relay" to restrict ICE to TURN relay candidates, for networks that drop direct UDP flows, without patching the global RTCPeerConnection.

  13. 1.19.1

    17 Aug 2026
    • a82a0c5: Point React Native users at @elevenlabs/react-native when no voice session setup strategy is registered, instead of suggesting the browser entry point.

    • 118fd04: Pass workletPaths through on the WebRTC connection path, so self-hosted AudioWorklet files are used for output capture instead of falling back to blob:/data: URLs under a strict CSP.

    • f4c5588: Key the worklet module cache by the requested source as well as the worklet name, so a self-hosted workletPaths entry is no longer served an inlined blob: URL cached by an earlier load.

  14. 1.19.0

    17 Aug 2026
    • 880edd2: Expose missing realtime speech-to-text options on Scribe.connect(), matching elevenlabs-js#436:

      New server messages are now dispatched instead of being dropped:

      Also fixes vadSilenceThresholdSecs, minSpeechDurationMs, and minSilenceDurationMs lower-bound validation to treat the bound as inclusive, matching the API (e.g. vadSilenceThresholdSecs: 0.3 is now accepted instead of being rejected client-side).

      The scribe.asyncapi.yaml schema (and the generated Word/CommittedTranscriptWithTimestampsMessage/FinalTranscriptWithTimestampsMessage types) was cross-checked against the live contract at https://api.elevenlabs.io/speech-to-text-asyncapi.yml. The words shape is identical between committed_transcript_with_timestamps and final_transcript_with_timestamps on that contract (both support "audio_event", per-character timings, and channel_index), so both messages now share a single Word type instead of the narrower shape committed_transcript_with_timestamps previously used. Config also gained timestamps_granularity and max_tokens_to_recompute to match the session config the server echoes back.

      @elevenlabs/react's useScribe().committedTranscripts.words (WordTimestamp) is updated to match: type now includes "audio_event", characters is now WordTimestampCharacter (each with its own start/end) instead of string, and a channel_index field was added.

    • a068144: Fix a microphone-setup failure wedging useScribe, so a denied or dismissed
      permission prompt can be retried without remounting.

      A microphone-mode session whose getUserMedia call rejects can never send
      audio, but the socket was left open holding that session. useScribe kept its
      connection ref, and every later connect() short-circuited on "Already connected". The failed setup now closes the connection, which releases the
      stranded socket and lets the hook's existing close handling clear the ref.
      onError still fires first; the session then ends as disconnected with the
      error preserved.

      The hook's close handler also nulled its ref for whichever connection reported
      a close, so a late close from a replaced socket tore down the session that had
      replaced it — the race a consumer hit when working around the above with
      disconnect-then-reconnect. A close is now ignored when a newer connection owns
      the ref, while an explicit disconnect() still reports normally.

  15. 1.18.0

    14 Aug 2026
    • 93cf08c: Add the experimental rich_content event types and an onRichContent callback,
      called when the agent sends a component for the client to display, such as an
      item card. The callback receives { rich_content_id, component, props, event_id }
      and nothing is sent back, so the agent's turn does not wait on the client.

      This backs the embedded widget, which is the only client the server offers
      components to today, so the callback does not fire for other consumers. Treat
      props as agent-authored and untrusted when rendering it into a document.

    • 1a1f440: Add workletPaths.scribeAudioProcessor to Scribe.connect({ microphone }) so the Scribe audio worklet can be self-hosted, matching the existing Conversation workletPaths option. This lets strict CSPs (script-src/script-src-elem without blob:/data:) load the worklet from a same-origin URL instead of falling back to a blob or data URL.

      The generated worklet processors (including scribeAudioProcessor.js) are now also published as static assets under @elevenlabs/client/worklets/*, so bundlers can copy them into your own static assets and serve them under script-src 'self'.

    • fb06e12: Add self-hosted orchestrator session support. Passing orchestratorConfig to Conversation.startSession routes the conversation WebSocket to a self-hosted (private deployment) orchestrator and sends the agent configuration at connection time, mirroring the Python SDK's OnPremInitiationData.

  16. 1.17.0

    30 Jul 2026
    • a96f220: Add enableLogging option (boolean) to the Scribe realtime API, available on Scribe.connect and the useScribe hook. Setting it to false sends enable_logging=false on the WebSocket URL, which runs the session in zero retention mode so history features are unavailable for it. Zero retention mode may only be used by enterprise customers.

  17. 1.16.0

    27 Jul 2026
    • 139ed79: Add onAgentReasoningResponsePart callback to receive streaming reasoning response
      events from the agent. The callback receives { text, type, event_id } where type
      is one of "start", "delta", or "stop".

  18. 1.15.2

    22 Jul 2026

    Reading the note…

  19. 1.15.1

    16 Jul 2026

    Reading the note…

  20. 1.15.0

    10 Jul 2026

    Reading the note…

  21. 1.14.1

    7 Jul 2026

    Reading the note…

  22. 1.14.0

    25 Jun 2026

    Reading the note…

  23. 1.13.0

    24 Jun 2026

    Reading the note…

  24. 1.12.1

    23 Jun 2026

    Reading the note…

  25. 1.12.0

    18 Jun 2026

    Reading the note…

  26. 1.11.2

    17 Jun 2026

    Reading the note…

  27. 1.11.1

    12 Jun 2026

    Reading the note…

  28. 1.11.0

    11 Jun 2026

    Reading the note…

  29. 1.10.0

    9 Jun 2026

    Reading the note…

  30. 1.9.0

    27 May 2026

    Reading the note…

  31. 1.8.1

    22 May 2026

    Reading the note…

  32. 1.8.0

    20 May 2026

    Reading the note…

  33. 1.7.1

    19 May 2026

    Reading the note…

  34. 1.7.0

    8 May 2026

    Reading the note…

  35. 1.6.0

    8 May 2026

    Reading the note…

  36. 1.5.0

    5 May 2026

    Reading the note…

  37. 1.4.0

    29 Apr 2026

    Reading the note…

  38. 1.3.1

    23 Apr 2026

    Reading the note…

  39. 1.3.0

    22 Apr 2026

    Reading the note…

  40. 1.2.1

    14 Apr 2026

    Reading the note…

  41. 1.2.0

    10 Apr 2026

    Reading the note…

  42. 1.1.2

    6 Apr 2026

    Reading the note…

  43. 1.1.1

    3 Apr 2026

    Reading the note…

  44. 1.1.0

    30 Mar 2026

    Reading the note…

  45. 1.0.0

    27 Mar 2026

    Reading the note…

  46. 0.16.x
  47. 0.16.0

    25 Mar 2026

    Reading the note…

  48. 0.15.x
  49. 0.15.2

    17 Mar 2026

    Reading the note…

  50. 0.15.1

    10 Mar 2026

    Reading the note…

  51. 0.15.0

    24 Feb 2026

    Reading the note…

  52. 0.14.x
  53. 0.14.0

    4 Feb 2026

    Reading the note…

  54. 0.13.x
  55. 0.13.1

    27 Jan 2026

    Reading the note…