Plugin loader doubles pluginRoot onto ./-prefixed sources, so plugins fail to load (ENOENT)

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Cursor version: 3.27.22
Operating system: macOS 27.0.1 (Golden Gate)
Request ID: None. The failure happens during plugin loading, not in a chat request.
Privacy mode: Privacy Mode

Summary: A marketplace that sets metadata.pluginRoot to ./plugins and gives plugins ./plugins/ sources fails to load in Cursor. Cursor joins the two paths and looks for plugins/plugins/, which doesn’t exist. Per the Claude Code marketplace reference, pluginRoot has no effect on ./-prefixed sources.

Expected: The plugin resolves to plugins/ and loads.

Actual: Cursor plugin load error @47f650552192e01a973a14c5facbe089e59142b0: ENOENT: no such file or directory, lstat ‘…/plugins/plugins/’

Control: A plugin without pluginRoot loads fine.

Steps to Reproduce

Import a marketplace whose marketplace.json has metadata.pluginRoot set to ./plugins and one plugin with source ./plugins/example. Install that plugin and reload. It shows “Error loading plugin.”

Operating System

MacOS

Version Information

Cursor version: 3.27.22

For AI issues: which model did you use?

Auto Balance

Does this stop you from using Cursor

No - Cursor works, but with this issue

Hi @tysaal, you can get the plugin loading today by removing metadata.pluginRoot from marketplace.json. Your sources already carry the full ./plugins/<name> path, so nothing else has to change. Keeping pluginRoot and shortening the sources to bare names ("source": "example") works too.

Right now Cursor prepends pluginRoot to every string source, including ones that start with ./, which is where the plugins/plugins/<name> lookup comes from. I’ve passed this to the team with your repro.

After you push the change, refresh the marketplace so it picks up the new commit, then reload the window.

Thank you very much! I was able to work with my team members and get some workarounds going, so all good on my end for now. But this did seem like a bug Cursor might want to be aware of, so figured I’d pass it along while I was at it. :woman_shrugging: Thank you again thoug.