{"eid":"crates","name":"crates.io","domain":"crates.io","resolved_by":"domain","topics":["storage"],"n_records":2,"best_vorder":1,"review":null,"aliases":["crates.io","iroh-n0des (crate)"],"records":[{"rid":"storage/crates-io","card":{"rid":"storage/crates-io","eid":"crates","topic":"storage","slug":"crates-io","provider":"crates.io","url":"https://crates.io","domain":"crates.io","category":"registry","tier":null,"verdict":"qualifies-with-caveat","vorder":1,"grp":"usable","confidence":"reported","binding":"pull-count","identity_kind":"email","identity_basis":"defaulted","needs_card":null,"needs_phone":null,"needs_id":null,"needs_institution":null,"country":null,"crypto":null,"interfaces":"rest,rclone","egress_metered":0,"per_object_bytes":null,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":4,"usd_month":null,"usd_per_tb_month":null,"summary":"10 MB per .crate file. No limit on versions per crate ('There is no limit to the number of versions which can be published'), no documented cap on total crat...","duplicate_of":null,"n_unknown":6},"record":{"topic":"storage","slug":"crates-io","provider":"crates.io","url":"https://crates.io","category":"registry","free_tier":{"stated":"10 MB per .crate file. No limit on versions per crate ('There is no limit to the number of versions which can be published'), no documented cap on total crates or total bytes per account.","unit":"MB","metered_on":"unstated","source_url":"https://doc.rust-lang.org/cargo/reference/publishing.html","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"not stated","source_url":"https://doc.rust-lang.org/cargo/reference/publishing.html","notes":"not stated"},"retention":{"stated":"| Effectively permanent — 'the code cannot be deleted', 'publish is generally permanent'","source_url":"https://doc.rust-lang.org/cargo/reference/publishing.html","notes":"not stated"},"egress":{"terms":"Free and unmetered, Cloudflare-fronted, CORS-open. Probe: static.crates.io .crate GET -> 200, Server: cloudflare, Cache-Control: 'public,max-age=31536000,immutable', Access-Control-Allow-Origin: *, Accept-Ranges: bytes.","metered":false},"interface":["rest","rclone"],"interface_detail":"rest","tooling":"PUT /api/v1/crates/new (binary metadata+body protocol), GET https://static.crates.io/crates/<name>/<name>-<ver>.crate. Clients: cargo publish, cargo-upload style wrappers. No rclone backend.","chaining":"UNBOUNDED on crates x versions but throttled hard: 5 new crates burst then 1 per 10 minutes; 30 versions burst then 1 per minute. At 10 MB/crate, 10 TiB needs ~1,048,576 crates — at 1 new crate per 10 min that is ~20 years, so crates.io is *capacity*-unlimited and *throughput*-useless for bulk. Use it as a low-priority shard, not the primary.","limits":[{"kind":"request-rate","value":"1000 downloads/month","source":"https://doc.rust-lang.org/cargo/reference/publishing.html"},{"kind":"per-ip-shaping","value":"1.4 GB/day","source":"https://doc.rust-lang.org/cargo/reference/publishing.html"},{"kind":"pull-count","value":"1000 downloads/month","source":"https://doc.rust-lang.org/cargo/reference/publishing.html"}],"limits_note":"10 MB per .crate. Publish rate: burst 5 new crates, then 1 per 10 min; burst 30 new versions, then 1 per minute (documented, leaky-bucket). No delete after 72h unless <1000 downloads/month-per-month AND no dependents AND single owner. Version numbers can never be reused or overwritten.","identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"Effectively permanent — 'the code cannot be deleted', 'publish is generally permanent'. Excellent durability, terrible write throughput: ~144 crates/day sustained, i.e. ~1.4 GB/day at 10 MB. Never disappears, but you cannot fill it fast.","confidence":"reported","confidence_note":"One page read moves it to documented.","evidence":[{"url":"https://doc.rust-lang.org/cargo/reference/publishing.html","date":"2026-10-21","proved":"'crates.io currently has a 10MB size limit on the .crate file'; 'There is no limit to the number of versions which can be published'; 'the version can never be overwritten, and the code cannot be deleted'"},{"url":"https://crates.io/docs/rate-limits","date":"2026-10-21","proved":"'allow a burst of 5 new crates published at once by a single user account, with a rate limit of 1 crate every 10 minutes'; 'burst of 30 new versions ... 1 crate per minute'"},{"url":"https://crates.io/policies","date":"2026-10-21","proved":"deletion only if published <72h, or <1000 downloads per month published, and no dependents"},{"url":"https://static.crates.io/crates/serde/serde-1.0.0.crate","date":"2026-10-21","proved":"probe: GET -> 200, Content-Length: 58433, Server: cloudflare, Cache-Control: public,max-age=31536000,immutable"}],"verdict":"qualifies-with-caveat","verified_at":"2026-10-21T00:00:00.000Z","notes":"10 MB per .crate file. No limit on versions per crate ('There is no limit to the number of versions which can be published'), no documented cap on total crates or total bytes per account.","extras":{},"binding":"pull-count","binding_note":"a per-object fetch counter turns a serving workload into a counting problem"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":10.0,"unit":"MB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.limits[0].value","kind":"limit:request-rate","num":null,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"unparsed"},{"path":"$.limits[1].value","kind":"limit:per-ip-shaping","num":1.4,"unit":"GB","per":"day","currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.limits[2].value","kind":"limit:pull-count","num":null,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"unparsed"}],"unknown":[["$.free_tier.notes","process"],["$.identity_cost.detail","defaulted"],["$.identity_cost.kind","identity-defaulted"],["$.per_object_cap.notes","not-extracted"],["$.per_object_cap.stated","not-extracted"],["$.retention.notes","not-extracted"]],"history":[],"drift":[]},{"rid":"storage/iroh-n0des","card":{"rid":"storage/iroh-n0des","eid":"crates","topic":"storage","slug":"iroh-n0des","provider":"iroh-n0des (crate)","url":"https://crates.io/crates/iroh-n0des","domain":"crates.io","category":"rejected-provider","tier":null,"verdict":"fails-quota","vorder":6,"grp":"rejected","confidence":"reported","binding":"none","identity_kind":"email","identity_basis":"defaulted","needs_card":null,"needs_phone":null,"needs_id":null,"needs_institution":null,"country":null,"crypto":null,"interfaces":null,"egress_metered":0,"per_object_bytes":null,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":2,"usd_month":null,"usd_per_tb_month":null,"summary":"The old standalone rendezvous/discovery crate for 'p2p quic connections dialed by public key'. Superseded by the iroh 1.x address-lookup/pkarr path; repo REA...","duplicate_of":null,"n_unknown":15},"record":{"topic":"storage","slug":"iroh-n0des","provider":"iroh-n0des (crate)","url":"https://crates.io/crates/iroh-n0des","category":"rejected-provider","free_tier":{"stated":"The old standalone rendezvous/discovery crate for 'p2p quic connections dialed by public key'. Superseded by the iroh 1.x address-lookup/pkarr path; repo README now just renders iroh-service","unit":"none","metered_on":"none","source_url":"https://crates.io/crates/iroh-n0des","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"not recorded","bytes":null,"source_url":"https://crates.io/crates/iroh-n0des","notes":"not recorded"},"retention":{"stated":"not recorded","days":null,"source_url":"https://crates.io/crates/iroh-n0des","notes":null},"egress":{"terms":"not recorded","metered":false},"interface":["unknown"],"interface_detail":null,"tooling":"not recorded","chaining":"not recorded","limits":[],"limits_note":null,"identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"The old standalone rendezvous/discovery crate for 'p2p quic connections dialed by public key'. Superseded by the iroh 1.x address-lookup/pkarr path; repo README now just renders iroh-service","confidence":"reported","confidence_note":null,"evidence":[{"url":"https://crates.io/crates/iroh-n0des","date":"2026-10-21","proved":"The old standalone rendezvous/discovery crate for 'p2p quic connections dialed by public key'. Superseded by the iroh 1.x address-lookup/pkarr path; repo README now just renders iroh-service"},{"url":"https://github.com/n0-computer/iroh-n0des","date":"2026-10-21","proved":"cited as the basis of the rejection: The old standalone rendezvous/discovery crate for 'p2p quic connections dialed by public key'. Superseded by the iroh 1.x address-lookup/pkarr path; repo README now just renders iroh-service"}],"verdict":"fails-quota","verified_at":"2026-10-21T00:00:00.000Z","notes":"The old standalone rendezvous/discovery crate for 'p2p quic connections dialed by public key'. Superseded by the iroh 1.x address-lookup/pkarr path; repo README now just renders iroh-service","extras":{"dead_end":{"failure_class":"quota","why":"The old standalone rendezvous/discovery crate for 'p2p quic connections dialed by public key'. Superseded by the iroh 1.x address-lookup/pkarr path; repo README now just renders iroh-service","retry_when":null,"first_recorded":"2026-10-21"}},"binding":"none","binding_note":"no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":null,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"unparsed"}],"unknown":[["$.chaining","not-recorded"],["$.confidence_note","withheld"],["$.egress.terms","not-recorded"],["$.extras.dead_end.retry_when","process"],["$.free_tier.notes","process"],["$.identity_cost.detail","defaulted"],["$.identity_cost.kind","identity-defaulted"],["$.interface","interface-unknown"],["$.interface_detail","withheld"],["$.limits_note","process"],["$.per_object_cap.notes","not-recorded"],["$.per_object_cap.stated","not-recorded"],["$.retention.notes","process"],["$.retention.stated","not-recorded"],["$.tooling","not-recorded"]],"history":[],"drift":[]}]}