Added getAvailablePanels(eventId?) to IMaestroEvent. Returns the panels the SDK can currently show in tab order, filtered by platform support, multi-event exclusion rules, and user settings. Available as soon as userDidStartWatchingEvent resolves; does not require renderPanel to have been called.
Added optional onSDKEvent callback to IMaestroEventDelegate. Emits rendered:channels once the panel list is ready and again whenever it changes, carrying the available panel types (MaestroPanelType[]) and per-event page metadata. Hosts that do not implement onSDKEvent can use getAvailablePanels() to pull the list on demand.
Changed the will-appear timeout fallback: when the host does not answer the will-appear callback within 2 seconds, the SDK now applies canAppear: false and keeps the overlay hidden. Previously the fallback was canAppear: true, which showed the overlay anyway. Overlays are now opt-in — hosts must explicitly answer canAppear: true to display them. See onOverlayEvent.
Fixed overlay rendering crash on browsers that support WebGL2 and WebAssembly but not BigInt (Chromium 63–66). Broadcast overlays now require BigInt in addition to WebGL2 and WebAssembly, and gracefully degrade on environments where any of the three are unavailable.
Added espnOutOfTownScoreboard panel type to MaestroPanelType. Use with setActivePanel to switch to the ESPN Out-of-Town Scoreboard, which lists other games around the league with pre-game, live, and post-game cards.
Added espn:out-of-town:watch-live event type to onPanelEvent. Emitted when the user selects Watch Live on a scoreboard card. Payload: { airingId: string, link?: string, eventId: string }. airingId is the contract — use it to play the stream. link is an advisory upstream deeplink that TV hosts should ignore. The host owns stream switching; the SDK takes no further action after emitting.
Added desktop web support for the Fox Stats panel. With platform: 'desktop_web' passed to configure, the foxStats panel now renders its own web view instead of an empty panel.
The Play All button in the Fox Key Plays panel is now gated on the enable_play_all feature flag, which defaults to on. The button was hidden in 6.1.3 and 6.1.4; it is visible again for events where the flag is not explicitly disabled.
The Out-of-Town Scoreboard polling interval is read from the oots_polling_interval feature flag rather than a fixed value.
Fixed fox:list-of-key-plays on onPanelEvent firing on every keyPlaysProgressUpdate instead of only when the list of key plays changes. At a 100ms host cadence this was roughly 10 identical events per second. It now emits when the list first arrives, when a poll adds, removes, or reorders a clip, and when the no-spoiler cutoff reveals one.
Added optional panelId parameter to setActivePanel. Pass the config _id of the target panel to activate a specific instance when the page config contains multiple panels of the same type.
Added dismissModule field to whatJustHappened panel data in setDataToPanel. When true, dismisses the overlay notification on demand for player states where it must not remain visible (e.g. ad break, native player UI, navigation away). The dismissed note is suppressed from immediately re-appearing; later notes surface normally. If both dismissModule and triggerModule are supplied, dismissModule takes precedence.
Added an Overlays section to the Web SDK docs, covering what an overlay is, how it differs from a panel, how overlays are triggered (broadcast, timecoded, and client-side rules), and the full will-appear → did-appear → did-engage → did-dismiss lifecycle.
Added an Overlay Integration guide with a copy-pasteable onOverlayEvent implementation, will-appear callback semantics, player timecode requirements, focus hand-off, CTA handling, and repositioning.
Documented that overlays require WebGL2 and WebAssembly for Rive rendering. On TV browsers missing either, the SDK logs and renders nothing, so overlays silently never appear.
Clarified in onOverlayEvent that the SDK waits 2 seconds for the will-appear callback before applying canAppear: true / canFocus: false and showing the overlay. Call the callback synchronously.
Added optional platform parameter to configure ('bbd' | 'desktop_web', defaults to 'bbd'). Omitting this parameter renders the TV UI; pass 'desktop_web' for desktop web applications.
Added getPlatform() to the Core SDK. Returns the platform declared in configure, or 'bbd' if none was specified.
Added web:panels:close event type to onPanelEvent. Emitted on desktop web when the user clicks the panel's close button. The event carries no payload; the host is responsible for hiding and unmounting the panel.
Added WhatJustHappenedButton React component to the SDK exports. Renders an module notification when a key moment is detected during a live event. See WhatJustHappenedButton.
Exported WhatJustHappenedButtonProps, WjhAppearResponse, and WjhNote types from @maestro_io/maestro-web-sdk.
Added whatJustHappened panel type to MaestroPanelType. Use with setActivePanel to switch the active panel to the event recap view.
Added whatJustHappened panel data support to setDataToPanel. Pass { whatJustHappened: { triggerModule: true } } to manually trigger the module notification.
Added 'whatJustHappened' as a valid toTarget value for startFocusManagement, enabling the host to return focus to the What Just Happened overlay after the user has arrowed away from it.
Raised minimum Node.js requirement from >=10 to >=18. Ensure your environment runs Node.js 18 or later.
Added required onOverlayEvent(event: OverlayEvent): void method to IMaestroEventDelegate. TypeScript implementations that omit this method will fail to compile — add onOverlayEvent to your delegate.
Changed startFocusManagement on IMaestroEvent to require a StartSDKFocusManagementParams argument ({ toTarget: 'overlay' | 'sidebar' }) and to return void synchronously instead of Promise<void>. Pass a toTarget value and remove any await at call sites.
Updated startFocusManagement on IMaestroEventDelegate to receive a StartClientFocusManagementParams argument with fromTarget: 'overlay' | 'sidebar' and an optional keyPress field.
Fixed didHidePanel incorrectly clearing navigation focus state on panel hide. Focus state is now preserved so navigation resumes correctly when the panel is shown again. see
Fixed setActivePanel not working when the SDK's focus management was active. The method now correctly switches the active panel and focuses the corresponding navigation button regardless of focus management state. see
Changed getCurrentEventID return type from string | null to string | string[] | null. In a multi-event session, the method returns all active event IDs as string[]. Update any code that assumes the return value is always a string or null. see
Added getCurrentEventIDs method to IMaestroEvent for retrieving all event IDs in the current session as string[]. see
Added multiviewPanel panel type. Initialize it by passing { apiKey: string, eventId: string } to setDataToPanel.
Added multiviewPanel:stream-state-changed and multiviewPanel:director-state-changed event types emitted via onPanelEvent when the multiview panel is active.
Remove environment, pollFrequency, progressUpdateFrequency, userID, maestroJwt, clientAppToken, clientAppSwid from base SDK class, along with getters and setters. see
Stats don't call getStatsAPIBaseURL anymore and it will soon be deprecated. We can construct the endpoint based on the known domain + event page configuration and metadata.
Add Analytics call (by calling trackAction and trackImpression) when user makes certain action or something gets rendered. Here are the list of the current analytics events: