> ## Documentation Index
> Fetch the complete documentation index at: https://velt.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Temp release notes input

<Update label="4.5.9-beta.4" description="November 25, 2025">
  ### New Features

  * \[**Core**]: Added `getHeartbeat()` method to subscribe to user-specific heartbeat data. You can retrieve heartbeat data for the current user or specify a `userId` to get heartbeats for any user, providing better visibility into active sessions per user.

  <Tabs>
    <Tab title="React / Next.js">
      ```jsx theme={null}
      // Using Hooks
      import { useHeartbeat } from "@veltdev/react";
      import { useEffect } from "react";

      const { data: heartbeatData } = useHeartbeat();
      useEffect(() => {
        console.log("Heartbeat data: ", heartbeatData);
      }, [heartbeatData]);

      // Using API methods
      client.getHeartbeat().subscribe((heartbeatData) => {
        console.log("Heartbeat data: ", heartbeatData);
      });
      ```
    </Tab>

    <Tab title="Other Frameworks">
      ```html theme={null}
      <script>
      Velt.getHeartbeat().subscribe((heartbeatData) => {
        console.log("Heartbeat data: ", heartbeatData);
      });
      </script>
      ```
    </Tab>
  </Tabs>

  **Heartbeat Interfaces:**

  ```typescript theme={null}
  export interface HeartbeatConfig {
    userId?: string;
  }

  export interface GetHeartbeatResponse {
    data: Heartbeat[] | null;
  }
  ```

  ### Improvements

  * \[**Comments**]: Added location removal logic when video plays in Timeline Player. Comment pins are now properly removed as the video plays, ensuring accurate timeline visualization.

  * \[**Comments**]: Added change detection in Timeline Player. The timeline bar now moves correctly when hovering over the play button or timeline, ensuring responsive playback controls.

  ### Bug Fixes

  * \[**Core**]: Fixed disconnect errors in the heartbeat feature. The SDK now handles network issues at the client side without triggering server disconnect errors.

  * \[**Core**]: Fixed user color and text color persistence during auto-login. Colors passed during `identify()` now persist correctly in auto-login scenarios, ensuring consistent user identification.

  * \[**Presence**]: Fixed `multipleUsersOnline` event firing when only a single user is present. The presence feature now correctly identifies single-user scenarios, preventing unwanted analytics events.
</Update>

<Update label="4.5.9-beta.3" description="November 19, 2025">
  ### Bug Fixes

  * \[**Comments**]: Fixed race condition errors in Player Timeline by adding proper lifecycle management. The player timeline now properly handles component destruction, preventing "undefined" errors that could occur when the component was destroyed during asynchronous operations.

  * \[**Notifications**]: Fixed error handling for document notifications by adding metadata validation. The SDK now checks if notification metadata exists before processing document notifications, preventing unnecessary errors in analytics tracking when notifications are missing required data.
</Update>

<Update label="4.5.9-beta.2" description="November 18, 2025">
  ### Bug Fixes

  * \[**Core**]: Fixed user resolution for tagged and assigned users in contact lists. Users added via `updateContactList()` are now properly cached, ensuring that tagged and assigned users resolve correctly from cached data instead of failing to load.
</Update>

<Update label="4.5.9-beta.1" description="November 18, 2025">
  ### Bug Fixes

  * \[**Core**]: Improved `updateContactList()` method behavior by removing unnecessary validation checks. The method now directly applies user-provided contact list data without additional validation, giving you more control over contact list management.
</Update>

<Update label="4.5.9" description="November 15, 2025">
  ### Bug Fixes

  * \[**Recorder**]: Fixed an issue where zoom was not applied unless the zoom section in the timeline was modified directly.
</Update>

<Update label="4.5.8" description="November 14, 2025">
  ### Bug Fixes

  * \[**Recorder**]: Fixed an issue where the zoom animation in the editor preview had a curve in the transition. The editor preview now displays smooth transitions to the correct coordinates instead of curved transitions.

  * \[**Recorder**]: Fixed an issue where VeltIf was throwing an error when evaluating MediaStream object.

  * \[**Comments**]: Fixed sanitization of `target` attributes in comment HTML content. The DomPurifier now preserves `target` attributes in comment HTML fields, allowing users to include links with target specifications (such as `target="_blank"`) in their comments.
</Update>

<Update label="4.5.8-beta.7" description="November 13, 2025">
  ### Improvements

  * \[**Core**]: Optimized the initialization module and significantly reduced the SDK initialization time.
</Update>

<Update label="4.5.8-beta.6" description="November 10, 2025">
  ### New Features

  * \[**Core**]: Added `fetchDebugInfo()` and `getDebugInfo()` methods to retrieve debugging information about your Velt implementation. Use `fetchDebugInfo()` to get a one-time snapshot or `getDebugInfo()` to subscribe to real-time updates of key setup info like sdk version, apikey, user, organizationId, documentId, folderID version, locations etc. You can also get this info from [Velt's Chrome devtools](https://chromewebstore.google.com/detail/velt-devtools/nfldoicbagllmegffdapcnohakpamlnl)

  <Tabs>
    <Tab title="React / Next.js">
      ```jsx theme={null}

      // Using API methods - One-time fetch
      await client.fetchDebugInfo();

      // Using API methods - Subscribe to updates
      client.getDebugInfo().subscribe((debugInfo) => {
        console.log("Debug info: ", debugInfo);
      });
      ```
    </Tab>

    <Tab title="Other Frameworks">
      ```html theme={null}
      <script>
      // One-time fetch
      const debugInfo = await Velt.fetchDebugInfo();

      // Subscribe to updates
      Velt.getDebugInfo().subscribe((debugInfo) => {
        console.log("Debug info: ", debugInfo);
      });
      </script>
      ```
    </Tab>
  </Tabs>

  **Debug Info Interface:**

  ```typescript theme={null}
  export interface VeltDebugInfo {
    veltVersion?: string;
    apiKey?: string;
    serverMap?: {
      organization?: OrganizationMetadata;
      documents?: DocumentMetadata[];
      locations?: Location[];
      folder?: FolderMetadata;
      user?: User;
    };
    clientMap?: {
      organization?: OrganizationMetadata;
      documents?: DocumentMetadata[];
      locations?: Location[];
      folder?: FolderMetadata;
      user?: User;
    };
  }
  ```

  ### Improvements

  * \[**Access Control**]: Prevent users from adding comments, reactions, recorders, and area comments through the SDK when `access context` is used and the user doesn't have access to the specific context.
</Update>

<Update label="4.5.8-beta.5" description="November 5, 2025">
  ### New Features

  * \[**Comments**]: Added preliminary infra required to capture screenshots in comments.
</Update>

<Update label="4.5.8-beta.4" description="November 4, 2025">
  ### Improvements

  * \[**Access Control**]: Now you can set feature level permissions using Access Context. Access Context allows you to set granular, feature-level permissions using custom metadata. When configured, new feature data is added and existing feature data is fetched only for the access context values the current user has access to. [Learn more →](/key-concepts/overview#set-feature-level-permissions-using-access-context-custom-metadata)
</Update>

<Update label="4.5.8-beta.3" description="October 30, 2025">
  ### Improvements

  * \[**Recorder**]: Updated video editor timeline picture mode design for improved visual clarity. The unselected portion of timeline pictures now displays with a cleaner design that better distinguishes selected from unselected frames.

  * \[**Recorder**]: Fixed audio merging in screen recording to combine microphone and tab audio. When recording with both microphone and tab audio enabled, both audio sources are now properly merged into the final recording.

  ### Bug Fixes

  * \[**Comments**]: Fixed type definition for `selectCommentByAnnotationId()` and made `annotationId` parameter optional.

  * \[**Comments**]: Fixed embed mode logic in comments sidebar to support multiple embedded sidebars.
</Update>

<Update label="4.5.8-beta.2" description="October 30, 2025">
  ### New Features

  * \[**Access Control**]: Added the new Permission Provider feature. With this approach, Velt pings your defined endpoint to verify whether a user should be granted access to a resource (organization, folder, or document). This ensures that your backend is still the source of truth and you don't have to sync the permissions into Velt directly. [Learn more →](/key-concepts/overview#c-real-time-permission-provider)

  * \[**Access Control**]: Added a config to automatically revoke permissions, including revoking access to documents, folders, and optionally organizations when users log out or when documents are unset. This ensures immediate permission removal without requiring manual cleanup. [Learn more →](/key-concepts/overview#c-real-time-permission-provider)

  * \[**Access Control**]: Added various Permission Provider events to monitor the sequence of permission check events for debugging and tracking purposes. [Learn more →](/api-reference/sdk/models/data-models#permissionproviderevent)

  ### Improvements

  * \[**Access Control**]: Simplified Permission Provider implementation by removing `onResourceAccessRequired` call and signature handling from client SDK. Permission handling is now fully managed internally by the SDK. You no longer need to handle signatures or make `onResourceAccessRequired` calls. The SDK automatically handles permission caching, validation, and synchronization with the backend. [Learn more →](/api-reference/sdk/api/api-methods#setpermissionprovider)
</Update>

<Update label="4.5.8-beta.1" description="October 29, 2025">
  ### New Features

  * \[**Recorder**]: Added video editor timeline image preview to display frame snapshots in the timeline. This helps you quickly navigate to specific scenes without scrubbing through the entire video.

  <Tabs>
    <Tab title="React / Next.js">
      ```jsx theme={null}
      <VeltRecorderNotes videoEditorTimelinePreview={true} />
      <VeltRecorderControlPanel videoEditorTimelinePreview={true} />
      ```
    </Tab>

    <Tab title="Other Frameworks">
      ```html theme={null}
      <velt-recorder-notes video-editor-timeline-preview="true"></velt-recorder-notes>
      <velt-recorder-control-panel video-editor-timeline-preview="true"></velt-recorder-control-panel>
      ```
    </Tab>
  </Tabs>

  <Info>The timeline preview only works when both `videoEditorTimelinePreview` and `videoEditor` are set to `true`.</Info>

  ### Improvements

  * \[**Comments**]: Enhanced `selectCommentByAnnotationId()` to close the selected comment annotation when called with no arguments or an invalid ID.

  <Tabs>
    <Tab title="React / Next.js">
      ```jsx theme={null}
      // Using Hooks
      const commentElement = useCommentUtils();

      // Close the currently selected annotation
      commentElement.selectCommentByAnnotationId();
      commentElement.selectCommentByAnnotationId('invalid-id');

      // Using API methods
      const commentElement = client.getCommentElement();

      // Close the currently selected annotation
      commentElement.selectCommentByAnnotationId();
      commentElement.selectCommentByAnnotationId('invalid-id');
      ```
    </Tab>

    <Tab title="Other Frameworks">
      ```html theme={null}
      <script>
      const commentElement = Velt.getCommentElement();

      // Close the currently selected annotation
      commentElement.selectCommentByAnnotationId();
      commentElement.selectCommentByAnnotationId('invalid-id');
      </script>
      ```
    </Tab>
  </Tabs>
</Update>

<Update label="4.5.7" description="October 28, 2025">
  ### New Features

  * \[**Access Control**]: Added early version of feature level permissions using Access Context. Access Context allows you to set granular, feature-level permissions using custom metadata. When configured, new feature data is added and existing feature data is fetched only for the access context values the current user has access to. [Learn more →](/key-concepts/overview#set-feature-level-permissions-using-access-context-custom-metadata)
</Update>

<Update label="4.5.6" description="October 27, 2025">
  ### Improvements

  * \[**Access Control**]: Added `source` field to Permission Provider requests to identify which method triggered the request. The `source` field helps you debug and trace which SDK method initiated the permission check. [Learn more →](/key-concepts/overview#c-real-time-permission-provider)

  * \[**Access Control**]: Added various Permission Provider events to monitor the sequence of permission check events for debugging and tracking purposes. [Learn more →](/api-reference/sdk/models/data-models#permissionproviderevent)

  ### Bug Fixes

  * \[**Notifications**]: Fixed notification fetching with Permission Provider when document IDs needed mapping to client document IDs.
</Update>
