If I download what seems like any crate, for instance https://static.crates.io/crates/serde/serde-1.0.228.crate which I think is a pretty widely used crate, Firefox (140.12.0esr, Debian 13) says "This file contains a virus or malware." It seems 100% sure about it, it doesn't include any softening wording or anything.
Chrome allows the same downloads with no objection.
Firefox used to allow them until a couple days ago.
Is Crates compromised, or is Firefox broken?
I already vibe coded one entire replacement crate because of this; I figured it was a virus.
That certainly is a bit weird. While there are occasionally some false positives in this detection, it certainly should not happen like that consistently for legitimate source.
I'd suggest to report it as a bug.
Strange, why do you use a browser to download something from crates.io? For example, I use Windows for development and Windows thinks that every Rust program is malware. I simply disable the check and everything works smooth now.
If I want to review the source, I go there and download it. It lets me check out what is in the package before running it, or copy it to make a patched version.
Thank you! I reported it now to Mozilla, which turned out to be easier than expected with the link (didn't have to make an account after all!), so hopefully they'll get it figured out.
For now it seems like a reliable way to work around it is:
try to download
copy new download link from failed download in downloads panel
Might be just firefox message just being misleading.
curl -D - https://crates.io/api/v1/crates/lz4_flex/0.13.1/download
HTTP/2 403
report-to: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=pfjCfwaoPFD4ZgxFQjpyIGJBJrpEFo6jS%2BBlLXzRmGQ%3D\u0026sid=af571f24-03ee-46d1-9f90-ab9030c2c74c\u0026ts=1782864358"}],"max_age":3600}
reporting-endpoints: heroku-nel="https://nel.heroku.com/reports?s=pfjCfwaoPFD4ZgxFQjpyIGJBJrpEFo6jS%2BBlLXzRmGQ%3D&sid=af571f24-03ee-46d1-9f90-ab9030c2c74c&ts=1782864358"
content-type: application/json
via: 1.1 heroku-router, 1.1 varnish
nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
server: Heroku
accept-ranges: bytes
date: Wed, 01 Jul 2026 00:05:58 GMT
x-served-by: cache-lhr-egwu1540053-LHR, cache-lhr-egll1980064-LHR
x-cache: MISS, MISS
x-cache-hits: 0, 0
x-timer: S1782864358.826557,VS0,VE270
vary: accept-encoding
strict-transport-security: max-age=31536000; includeSubDomains
content-length: 277
{"errors":[{"detail":"We are unable to process your request at this time. This usually means that you are in violation of our API data access policy (https://crates.io/data-access). Please email help@crates.io and provide the request id 4d54b5c3-bc7a-8c7d-e66a-57932730e8a4"}]}