Please see my post below on this as sooon as possible! https://gist.github.com/joeblackwaslike/752b26ce92e3699084e1ecfc790f74b2?permalink_comment_id=5716065#gistcomment-5716065
These instructions should work with the latest versions of cursor which requires a much different strategy than the older versions where you could simply point cursor to the MS extension marketplace and call it a day.
Tested and verified w/ the following version
Version: 1.5.5
VSCode Version: 1.99.3
Commit: 823f58d4f60b795a6aefb9955933f3a2f0331d70
Date: 2025-08-25T17:40:25.290Z
Electron: 34.5.8
Chromium: 132.0.6834.210
Node.js: 20.19.1
V8: 13.2.152.41-electron.0
OS: Darwin arm64 24.6.0
-
Download latest from cursor-ai-downloads
-
# Make backup (optional) sudo mv /Applications/Cursor.app/ /Applications/Cursor_backup.app cd /tmp wget https://downloads.cursor.com/production/823f58d4f60b795a6aefb9955933f3a2f0331d7b/darwin/universal/Cursor-darwin-universal.dmg hdiutil mount Cursor-darwin-*.dmg sudo cp -R /Volumes/Cursor\ Installer/Cursor.app /Applications/ hdiutil unmount /Volumes/Cursor\ Installer rm -f Cursor-darwin-*.dmg popd
-
force the code signature check to pass and get cached
/Applications/Cursor.app/Contents/Resources/app/bin/cursor --version
-
Download the
package.json
patcher by @realdimas and execute it. For the security minded feel free to review the contentscurl -sL "https://gist.githubusercontent.com/realdimas/e58723564cfada8efd93adab6efb747c/raw/d6c0ff85ce979637b4d6fb0033b0a736fbe332cf/fix-product-json.sh" | sudo bash
-
Create a new text file named
cursor-exts.txt
. The contents should be a list of all the extensionIds you use from the cursor marketplace. I've provided an example of mine to serve as an example. Any lines beginning with # are comments and will be ignored when parsing this file. -
Create another new text file named
vscode-exts.txt
. The contents should be a list of all the extensionIds you use that exist only in the official Microsoft marketplace. I've provided an example of mine to serve as an example. Any lines beginning with # are comments and will be ignored when parsing this file.Note: do not add the the pylance extensionId (
ms-python.vscode-pylance
) or python extension (ms-python.python
) Pylance will fail to install and needs to be specially patched which we will do later. The patched pylance will require a newer version of ms-python than the one installed through traditional means. -
At this point close
Cursor.app
if it's still running. -
Run the following commands in the same shell and path where you created both extension text files:
# Clear existing extensions including the problematic `anysphere.cursorpyright`. Do this after you've completed both extension lists above /bin/rm -rf ~/.cursor/extensions/* # Install all your cursor extensions curl -sL "https://gist.githubusercontent.com/joeblackwaslike/802b9ddc135ba85d31a14b21b341807a/raw/c698a2e3fa73296bdd61258b5faf1f2dc37e174f/get-cursor-exts.sh" | bash -s -- --input-file cursor-exts.txt # the following script has a required dependency for only MacOS users which lack gnu grep. if [[ "$(uname -s)" == "Darwin" ]]; then brew install grep fi # Install all your microsoft marketplace extensions curl -sL "https://gist.githubusercontent.com/joeblackwaslike/306d6c7548f0c01f6626891d3d125066/raw/1448e70705e2eca8bb1154d5972cc8b756153e10/get-ms-exts.sh" | bash -s -- --input-file vscode-exts.txt # we have to manually download and install the ms-python vsix file because pylance requires a newer version than would be installed through cursor and even my scripts. This is very important to ensure pylance works correctly in the latest cursor builds. curl https://ms-python.gallery.vsassets.io/_apis/public/gallery/publisher/ms-python/extension/python/2025.13.2025080801/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage -o ms-python.python_2025.13.2025080801.vsix cursor --install-extension ms-python.python_*.vsix uv run --script https://gist.githubusercontent.com/realdimas/c025cdba50cc05e0f644eb71bf7efbb9/raw/pylance_patcher.py cursor --install-extension ms-python.vscode-pylance-*-patched.vsix
-
Add some required settings like disabling autoupdate and setting pylance as the python language server:
jq '.["update.enableWindowsBackgroundUpdates"] = false' ~/Library/Application\ Support/Cursor/User/settings.json > temp.json && mv temp.json ~/Library/Application\ Support/Cursor/User/settings.json jq '.["update.mode"] = "none"' ~/Library/Application\ Support/Cursor/User/settings.json > temp.json && mv temp.json ~/Library/Application\ Support/Cursor/User/settings.json jq '.["python.languageServer"] = "Pylance"' ~/Library/Application\ Support/Cursor/User/settings.json > temp.json && mv temp.json ~/Library/Application\ Support/Cursor/User/settings.json
-
Open Cursor.app and then close
# We need to manually delete the anysphere.cursorpyright extension using rm or it will keep reenabling and reinstalling itself. We need to run the command again too because it doesn't always work the first time. /bin/rm -rf ~/.cursor/extensions/anysphere.cursorpyright-* || /bin/rm -rf ~/.cursor/extensions/anysphere.cursorpyright-*
Anyone more familiar with MacOS application development that can determine why this setting isn't saved/persisted between application sessions, your advice would be greatly valued!
If you have a local workspace or project then you'll notice sometimes cursor will disable pylance. Check your local settings.json
or the settings key of your local *.code-workspace
file for the following:
{
"python.languageServer": "None"
}
You have a few options, either remove the local setting which defaults to the value for your user setting or change the value locally from None to Pylance
Version: 0.49.6
VSCode Version: 1.96.2
Commit: 0781e811de386a0c5bcb07ceb259df8ff8246a50
Date: 2025-04-25T05:07:16.071Z (3 mos ago)
We are going to edit cursors settings to point to the microsoft extensions marketplace.
- Remove all extensions and exit Cursor.
- Locate your Cursor
project.json
file depending on your platform and open it.- On MacOS:
/Applications/Cursor.app/Contents/Resources/app/product.json
- On Windows:
C:\Users\<user_name>\AppData\Local\Programs\cursor\resources\app\product.json
- On Linux:
/usr/lib/code/product.json
- On MacOS:
- Locate the object value for key
extensionsGallery
in the json document.
{
"galleryId": "cursor",
"serviceUrl": "https://marketplace.cursorapi.com/_apis/public/gallery",
"itemUrl": "https://marketplace.cursorapi.com/items",
"resourceUrlTemplate": "https://marketplace.cursorapi.com/{publisher}/{name}/{version}/{path}",
"controlUrl": "",
"recommendationsUrl": "",
"nlsBaseUrl": "",
"publisherUrl": ""
}
- Edit it to look like this:
{
"galleryId": "cursor",
"serviceUrl": "https://marketplace.visualstudio.com/_apis/public/gallery",
"itemUrl": "https://marketplace.visualstudio.com/items",
"resourceUrlTemplate": "https://{publisher}.vscode-unpkg.net/{publisher}/{name}/{version}/{path}",
"controlUrl": "",
"recommendationsUrl": "",
"nlsBaseUrl": "",
"publisherUrl": ""
}
- Reopen Cursor.app and install the following extensions:
ms-python.python
ms-python.vscode-pylance
ms-python.debugpy
- Make sure in your settings that
python.languageServer
is set to "Pylance" - Re-sign Cursor.app (for MacOS)
codesign --force --deep --sign - /Applications/Cursor.app
Enjoy!
PS: you may need to goto your settings.json to remove any theme settings, because having a broken theme looks exactly like this same problem. In my case cursor had copied over my settings from vscode and they pointed to a theme that wasn't yet installed in cursor, removing and then setting the theme manually worked when I though for sure I had broken it again.
@PhenomenaPh, @Nivg โย
product.json
is part of Cursor package.You are hacking the internals of the app.
Each update override it โย this is expected and no known workaround exist.
Understand that you generally want & need the updated
product.json
.Its just that some keys in this file needs to be modified post-update to revive python extensions.
My approach:ย streamline the update of
product.json
file (see macOS script linked above that I use) and do upgrades manually (disable automatic upgrades) so that you can take care of "maintenance" tasks on your own time without disruption.