Skip to content

[Spotify 1.3.1 / Spicetify 2.45.1] Extension menu entries missing: incorrect MenuItem binding and profile-button class mismatch #3965

Closed as not planned

Description

@dtupper

Summary

On Spotify for Windows 1.3.1.234.g59d6bf59 with Spicetify 2.45.1, Marketplace-installed extensions load, but their added menu entries are missing. This affects Shuffle+ and appears to involve shared Spicetify menu integration rather than failure to download or execute the extension.

Runtime inspection found two separate problems:

  1. Spicetify.ReactComponent.MenuItem resolves to a function with waveform-related props rather than the expected menu-item component.
  2. The profile-menu predicate checks mapped CSS classes that are absent from the actual profile button.

Environment

  • Windows 11 Pro, build 26200, x64
  • Spotify: 1.3.1.234.g59d6bf59 (desktop installation, not Microsoft Store)
  • Spicetify: 2.45.1
  • Marketplace: 1.0.11
  • Theme: marketplace
  • Custom apps: marketplace
  • Extensions installed through Marketplace: adblockify, Spicetify-Hide-Podcasts, Shuffle+, Trash Bin, Spicetify DJ Info, Toggle DJ

The CLI extensions setting is empty because these extensions are loaded by Marketplace. The runtime contains their injected script elements, and Marketplace logs initialization of all six extensions. Shuffle+ settings are present in Spicetify LocalStorage.

Steps to reproduce on the affected installation

  1. Launch the patched Spotify client with Shuffle+ installed through Marketplace.
  2. Right-click a playlist in Your Library.
  3. Look for Play with Shuffle+.
  4. Open the profile menu and look for Shuffle+ and the other extension settings entries.

Expected

The playlist context menu contains Play with Shuffle+, and the profile menu contains registered extension settings entries.

Actual

Native Spotify menu entries appear, but the expected extension entries do not. Marketplace itself opens and the extension scripts load.

This was investigated on an existing installation, not an isolated clean profile. The Shuffle+ playback action could not be tested through its missing menu entry.

Runtime findings

1. Unexpected component bound to ReactComponent.MenuItem

Inspecting Spicetify.ReactComponent.MenuItem returned a function beginning with:

({threeBandWaveform:e,durationMs:t,isActive:i=!1,isPlaying:f=!1,
  onTriggerPlay:h,transitionZones:m=l.M_}) => { /* ... */ }

The body also contains waveform-position and tooltip handling. This appears to be a false match in component discovery.

The patched xpui-modules.js does contain the menu injection:

children: [Spicetify.ContextMenuV2.renderItems(), e].flat()

A temporary diagnostic wrapper around renderItems() recorded one returned extension element while the playlist context menu was open, but Play with Shuffle+ was absent from the rendered menu. The menu context had a valid playlist URI at props.reference.uri.

This indicates that extension-item registration/filtering reaches the render path, while the component binding is suspect. No replacement component was tested, so this is not a verified patch.

2. Profile-menu predicate no longer matches the button

The installed wrapper uses this predicate for Spicetify.Menu entries:

(n, o, s) => o === "click" && (
  s.classList.contains("main-userWidget-boxCondensed") ||
  s.classList.contains("main-userWidget-box")
)

In the open profile menu's ContextMenuV2 provider:

  • trigger is "click".
  • target is the profile BUTTON with data-testid="user-widget-link".
  • The button has Encore classes and xbwf2n0avSjTCENBLFUM, but neither of the two classes tested above.
  • renderItems() returns zero extension elements.

This separately explains why registered profile-menu entries are filtered out before rendering.

Related issues

Activity

  1. rxri commented on Sep 23, 2026

    @rxri
    Member

    I cannot reproduce both of the issues. Both issues were already fixed with 4c7498f

    Spicetify.ReactComponent.MenuItem resolves to ({children: e, disabled: t, divider: i, onClick: a= () => {} , leadingIcon: y, v2LeadingIcon: b, trailingIcon: v, elementRef: O, CheckedIcon: R=s.i, autoClose: N=!0, className: C, innerClassName: P, semanticColor: L, shortcut: k, v2Shortcut: D, menuAction: w, rowSize: U="small", forceV2LeadingIcon: M=!1, implicitType: x=!0, showFullTextOnHover: B=!1, onMouseEnter: V, onMouseLeave: F, onFocus: G, onBlur: H, "aria-checked": j, ...Y}) - the function that is used for menu items

    It seems like you have non-updated wrapper

    Tested on:

    Spotify for Windows (64 bit)
    1.3.1.223.g6311b0a4
    Spicetify vDev
    xpui-snapshot_2026-09-11_1789090465942_development (Bazel)
    cef_146.0.10+g8219561+chromium-146.0.7680.179
    windows_classic
    

    Edit: Additionally tested on 1.3.1.234.g59d6bf59 and it works just fine

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions