Meta's Pyrefly sabotages competing Python extensions without telling you

51 points
1/21/1970
a day ago
by FossAndFurious

Comments


kinto

hi - pyrefly developer here. this was an oversight made by me a while ago during our beta launch.

thanks for reporting. we have a full response [here](https://github.com/facebook/pyrefly/issues/3292#issuecomment...) in the github issue

a day ago

FossAndFurious

Pyrefly is Meta's new Python type checker and VS Code extension, released earlier this year. While auditing the VSIX before installing it, I found that on activation it silently writes `disableLanguageServices = true` to the user's global settings for three named extensions: basedpyright, windsurfpyright, and cursorpyright.

The write uses `ConfigurationTarget.Global`, so it affects all workspaces. There is no `deactivate()` cleanup, so the setting persists after Pyrefly is uninstalled.

This was verified by live reproduction: installed Pyrefly alongside basedpyright, opened a Python file, and observed the key appear in `settings.json`. Uninstalled Pyrefly — key remained, basedpyright still broken.

The code is in plain TypeScript in the public repo (`lsp/src/extension-interop.ts`), added December 2025. This isn't obfuscated or hidden — it just hasn't been noticed.

Bug report with full details, source references, and reproduction steps: https://github.com/facebook/pyrefly/issues/3292

The fix is straightforward: ask the user before touching settings they didn't set, and restore them in `deactivate()`.

a day ago

IceDane

Have you just completely retired your brain in favor of a bidirectional pipe to an LLM?

a day ago

Esophagus4

I’ll answer that once my brain’s usage limit resets at 10:30pm

a day ago

zgeor

Turn on extra usage. But dont forget to set a limit!

21 hours ago

PufPufPuf

"it's not X, m-dash, it's Y"

a day ago

refulgentis

A, B, C.

A, B, C — D.

a day ago

queenkjuul

I'm confused, I'm looking for the emdash key on my phone and can't find it--how do you type yours?

a day ago

agency

You press and hold the hyphen key on iPhone — like this! And I'm a human :)

a day ago

queenkjuul

Humans can copy paste

15 hours ago

axus

Never attribute to malice what can be explained by vibe-coding

a day ago

em-bee

vibe-coding for products that are used by many people is malice.

5 hours ago

jaen

Noticed this myself as a VSCode-derivative user.

But I think this is just because having multiple Python extensions enabled generally breaks the UX...

Since VSCode doesn't really have a nice way for multiple language extensions to cooperate, this looks like just a quick hack to make the initial UX better, unlikely to be "malicious".

EDIT: Silent downvotes, really? Prejudice is strong here...

a day ago

pityJuke

Could they not gate this behind a notification on install?

a day ago

Rekindle8090

[dead]

a day ago

Lihh27

Disabling conflicting extensions, sure. Writing to global settings and leaving the mess behind after uninstall is not the same thing.

a day ago

PufPufPuf

Fixed title: Pyrefly automatically disables conflicting extensions on installation.

That's a convenient thing to do: if user installs Pyrefly, they probably want to use Pyrefly. Everyone likes a good outrage against Meta, but this is a nothingburger.

a day ago

NewsaHackO

Yeah, I think the OP is overreacting. I am pretty sure it even says it in the initial installation instructions and gives a clear reason why it interferes with other language servers. In the "Features" section of the VsCodium extensions "Adds language features from Pyrefly's analysis like go-to definition, hover, etc. (full list here) and disables Pylance completely (VSCode's built-in Python extension)". I suspect there is an element of LLM-sycophancy-driven activism here.

a day ago

d_sem

OP is an LLM.

a day ago

LaurensBER

Agreed, it should definitely be documented and undone on uninstall but the action itself is reasonable.

I spent some time figuring out how to disable the default language server after installing Ty.

a day ago

hamandcheese

> but the action itself is reasonable.

I'm not outraged (the intentions were probably good), but I also strongly disagree. Don't touch my config without my consent.

a day ago

[deleted]
a day ago

[deleted]
a day ago

OutOfHere

Speaking of sabotage, Microsoft's SwiftKey keyboard app sabotages the use of a competing search engine (DuckDuckGo) in Firefox in Android for me. When typing a multi-word quoted search phrase, it doesn't allow it to be typed correctly.

a day ago

3darl

This is typical in the Python space. Windows is also broken after installing Conda.

Given that now one has to pray that one does not get Shai Hulud when using PyPI, the best thing Meta could do is switch Instagram to PHP/Hack and PyTorch back to Lua (or Haskell or whatever).

a day ago

gavmor

Wow, I wasn't going to say it, but I was thinking it—python libraries and clobbering my environment? Name a more iconic duo.

a day ago

jqpabc123

Once again; if it has a Meta label, it most likely has added "features" you may not expect ... or want.

a day ago

gavmor

From the people who brought you "move fast and break things."

a day ago