{"eid":"github-libp2p","name":"libp2p circuit-relay","domain":"github.com","resolved_by":"platform","topics":["egress","storage"],"n_records":2,"best_vorder":6,"review":null,"aliases":["github.com","libp2p circuit-relay","libp2p circuit-relay v2","libp2p circuit-v2 public relays"],"records":[{"rid":"egress/libp2p-circuit-relay-v2","card":{"rid":"egress/libp2p-circuit-relay-v2","eid":"github-libp2p","topic":"egress","slug":"libp2p-circuit-relay-v2","provider":"libp2p circuit-relay v2","url":"https://github.com/libp2p/specs/blob/master/relay/circuit-v2.md","domain":"github.com","category":"relay (protocol)","tier":null,"verdict":"fails-quota","vorder":6,"grp":"rejected","confidence":"documented","binding":"per-object-cap","identity_kind":"anonymous","identity_basis":"stated","needs_card":0,"needs_phone":0,"needs_id":0,"needs_institution":0,"country":null,"crypto":null,"interfaces":null,"egress_metered":0,"per_object_bytes":131072,"retention_days":null,"verified_at":"2026-10-22T03:20:00.000Z","verified_basis":"live","checked_on":"2026-10-23","stale_on":"2026-11-22","n_evidence":2,"usd_month":null,"usd_per_tb_month":null,"summary":"whatever the relay operator allows; the reference implementations cap a circuit by default","duplicate_of":null,"n_unknown":1},"record":{"topic":"egress","slug":"libp2p-circuit-relay-v2","provider":"libp2p circuit-relay v2","url":"https://github.com/libp2p/specs/blob/master/relay/circuit-v2.md","category":"relay (protocol)","free_tier":{"stated":"whatever the relay operator allows; the reference implementations cap a circuit by default","unit":"none","metered_on":"downloaded-bytes","source_url":"https://github.com/libp2p/js-libp2p/blob/master/packages/transport-circuit-relay-v2/src/constants.ts","read_on":"2026-10-22","notes":""},"per_object_cap":{"stated":"128 KiB per direction per relayed connection by default","bytes":131072,"notes":"","source_url":"https://github.com/libp2p/js-libp2p/blob/master/packages/transport-circuit-relay-v2/src/constants.ts"},"retention":{"stated":"2 minutes per relayed connection by default","days":null,"notes":"","source_url":"https://github.com/libp2p/js-libp2p/blob/master/packages/transport-circuit-relay-v2/src/constants.ts"},"egress":{"terms":"not applicable: the protocol's own default ends a circuit at 128 KiB per direction","metered":false,"free_allowance":null,"price_per_tb":null,"source_url":"https://github.com/libp2p/js-libp2p/blob/master/packages/transport-circuit-relay-v2/src/constants.ts"},"interface":["unknown"],"tooling":"js-libp2p, go-libp2p","chaining":"composes with nothing at this volume: 128 KiB per circuit means a 1 GiB object needs 8,192 relayed connections, so it is a NAT-traversal primitive and not a transport.","limits":[{"kind":"per-object-cap","value":"128 KiB per direction per relayed connection by default","source":"https://github.com/libp2p/go-libp2p/blob/master/p2p/protocol/circuitv2/relay/resources.go"},{"kind":"retention-clamped","value":"2 minutes per relayed connection by default","source":"https://github.com/libp2p/js-libp2p/blob/master/packages/transport-circuit-relay-v2/src/constants.ts"}],"identity_cost":{"kind":"anonymous","detail":"peers are identified by a generated keypair","country":null},"reliability_note":"the limits are defaults an operator can raise; the reference implementations ship them at these values","confidence":"documented","evidence":[{"url":"https://github.com/libp2p/js-libp2p/blob/master/packages/transport-circuit-relay-v2/src/constants.ts","date":"2026-10-22","proved":"DEFAULT_DATA_LIMIT = BigInt(1 << 17) and DEFAULT_DURATION_LIMIT = 2 * minute, with the comment '128k is the default data limit'"},{"url":"https://github.com/libp2p/go-libp2p/blob/master/p2p/protocol/circuitv2/relay/resources.go","date":"2026-10-22","proved":"quoted from the Data field comment: 'Data is the limit of data relayed (on each direction) before resetting the connection', 'Defaults to 128KB', with Data: 1 << 17 in the default Resources literal"}],"verdict":"fails-quota","verified_at":"2026-10-22T03:20:00.000Z","notes":"Architecturally excluded from bulk, not merely slow: 128 KiB is 2^17 bytes, so 1 TiB needs 8.4 million relayed connections. The free tier is genuine and the capacity is zero.","extras":{"stale_after_days":180,"bytes_transit":"yes","transit_note":"a relayed circuit carries bytes in both directions, capped at 128 KiB per direction by default"},"binding":"per-object-cap","interface_detail":"/libp2p/circuit/relay/0.2.0/hop and /stop","limits_note":"the 128 KiB value is defined in both reference implementations and their wording differs. go-libp2p's Data field comment reads 'The limit of data relayed (on each direction) before resetting the connection', which is where the per-direction qualifier comes from; js-libp2p defines DEFAULT_DATA_LIMIT = 1 << 17 with '128k is the default data limit' and no per-direction language"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":null,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"unparsed"},{"path":"$.limits[0].value","kind":"limit:per-object-cap","num":128.0,"unit":"KiB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.limits[1].value","kind":"limit:retention-clamped","num":2.0,"unit":"minutes","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.interface","interface-unknown"]],"history":[],"drift":[]},{"rid":"storage/libp2p-circuit-v2-public-relays","card":{"rid":"storage/libp2p-circuit-v2-public-relays","eid":"github-libp2p","topic":"storage","slug":"libp2p-circuit-v2-public-relays","provider":"libp2p circuit-v2 public relays","url":"https://github.com/libp2p/js-libp2p/blob/master/packages/transport-circuit-relay-v2/src/constants.ts","domain":"github.com","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":"Default relay limits are signalling-grade, not transport-grade: 128 KiB of data and 2 minutes per relayed connection. Fine for hole-punching, useless for bytes.","duplicate_of":null,"n_unknown":15},"record":{"topic":"storage","slug":"libp2p-circuit-v2-public-relays","provider":"libp2p circuit-v2 public relays","url":"https://github.com/libp2p/js-libp2p/blob/master/packages/transport-circuit-relay-v2/src/constants.ts","category":"rejected-provider","free_tier":{"stated":"Default relay limits are signalling-grade, not transport-grade: 128 KiB of data and 2 minutes per relayed connection. Fine for hole-punching, useless for bytes.","unit":"none","metered_on":"none","source_url":"https://github.com/libp2p/js-libp2p/blob/master/packages/transport-circuit-relay-v2/src/constants.ts","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"not recorded","bytes":null,"source_url":"https://github.com/libp2p/js-libp2p/blob/master/packages/transport-circuit-relay-v2/src/constants.ts","notes":"not recorded"},"retention":{"stated":"not recorded","days":null,"source_url":"https://github.com/libp2p/js-libp2p/blob/master/packages/transport-circuit-relay-v2/src/constants.ts","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":"Default relay limits are signalling-grade, not transport-grade: 128 KiB of data and 2 minutes per relayed connection. Fine for hole-punching, useless for bytes.","confidence":"reported","confidence_note":null,"evidence":[{"url":"https://github.com/libp2p/js-libp2p/blob/master/packages/transport-circuit-relay-v2/src/constants.ts","date":"2026-10-21","proved":"Default relay limits are signalling-grade, not transport-grade: 128 KiB of data and 2 minutes per relayed connection. Fine for hole-punching, useless for bytes."},{"url":"https://github.com/libp2p/specs/blob/master/relay/circuit-v2.md","date":"2026-10-21","proved":"cited as the basis of the rejection: Default relay limits are signalling-grade, not transport-grade: 128 KiB of data and 2 minutes per relayed connection. Fine for hole-punching, useless for bytes."}],"verdict":"fails-quota","verified_at":"2026-10-21T00:00:00.000Z","notes":"Default relay limits are signalling-grade, not transport-grade: 128 KiB of data and 2 minutes per relayed connection. Fine for hole-punching, useless for bytes.","extras":{"dead_end":{"failure_class":"quota","why":"Default relay limits are signalling-grade, not transport-grade: 128 KiB of data and 2 minutes per relayed connection. Fine for hole-punching, useless for bytes.","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":128.0,"unit":"KiB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"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":[]}]}