Voidly Atlas
See the block.
Follow the evidence.
An observatory for the internet. Explore censorship records, inspect their sources, and take the evidence into your work.
Read the status, not just the headline. A signal is not yet a conclusion.
- Incident records
- 8,436
- Evidence records
- 508,588
- Citable with evidence
- 639
API response read 2026-09-08 19:18 UTC · cached response, not observation time
Inspect the source response ↗From a measurement
to something you can cite.
Atlas connects observations from OONI, IODA, CensoredPlanet and Voidly probes. Open a record to see its classification, observation dates and underlying evidence.
Citizen Lab contributes test-list context. An outage signal, a suspected block and corroborated censorship are different findings—not one interchangeable total.
Start with a record.
Recent records from the incident API. Open the source evidence before drawing a conclusion.
Response read 2026-09-08 19:18 UTC
- KIcritical
Internet outage in KI
KI-2026-0026
ioda - Camerooncritical
Internet outage in Cameroon
CM-2026-0085
ioda - Nigercritical
Internet outage in Niger
NE-2026-0041
ioda - DR Congocritical
Internet outage in DR Congo
CD-2026-0110
ioda - Afghanistancritical
Internet outage in Afghanistan
AF-2026-0091
ioda - Kazakhstancritical
Internet outage in Kazakhstan
KZ-2026-0453
ioda
Know what the numbers mean.
Evidence records, linked measurements and unique events are different counts. Historical corpus size is not today’s probe coverage. Unavailable values stay unavailable.
Changes and observation range
- Measurement links · reported total
- 106,204
- Classified citable censorship
- 716
- Incident records added · 24h
- 60
- Evidence records added · 24h
- 6,387
- Incident records added · 7d
- 452
- Evidence records added · 7d
- 82,551
- Earliest observation reported
- 2016-07-15 00:00 UTC
- Latest observation reported
- 2026-09-08 00:00 UTC
Classified citable censorship can include historical records without linked measurements. The hero uses only the API’s citable-with-evidence subset.
Inspect freshness by countryHistorical archive · separate from this response
- Bundled OONI measurements · all time
- 38,779,164
- Bundled index country coverage
- 130
The bundled archive is an undated historical snapshot, not a live measurement. Index coverage is not active probe coverage. Score generation time does not date the all-time archive.
Open the country behind the count.
Countries ranked by incident records in this API response—not a ranking of severity or a complete measure of censorship.
Evidence first.
Models with limits.
Model outputs help explore observations. Evaluation results do not guarantee the next event or replace source review.
Censorship classifier
LOCO mean F1 0.71
LOCO mean across 127 countries — 0.63 on the 61 countries with n≥30. The 0.87 figure often quoted is the MEDIAN, inflated by 46 small-sample countries scoring a perfect 1.0
Evaluation from the bundled model report, not a fresh production test. Performance differs materially by country and sample size.
Model registry and evaluationShutdown risk
Country-ranking and within-country timing are different tasks. The published evaluation is useful for interpreting relative risk—not promising a shutdown date.
Read the timing limitations and honest negatives alongside the forecast.
The work behind the record.
Dated investigations, model audits and negative findings. Open the analysis, not a promotional summary.
Two networks, one domain, different answers: why we publish single-source blocks as a floor, not a fact
A data-trust audit of the observatory itself. Voidly aggregates three independent networks that measure different things: OONI (active web-connectivity, 5,552 domains / 93 countries, full accessible+blocked verdicts), CensoredPlanet (remote DNS/HTTP, just 28 high-profile domains / 42 countries, detection-only), and IODA (ASN connectivity outages, no per-domain signal). Their scopes barely overlap: of 28,287 domain×country cells the two domain-measuring networks cover, only 384 (1.4%) are tested by BOTH — so most detections are single-source by construction. And where they overlap they often disagree: on the 384 cells where CensoredPlanet flagged a block and OONI also tested, OONI independently confirmed only 110 (29%); on the other 274 (71%) OONI's active test reached the site. The gap is mostly methodology, not error: CensoredPlanet's entire 28-domain set is large CDN platforms (facebook/google/youtube/chatgpt/telegram/whatsapp/…), exactly where remote DNS measurement false-positives on legitimate GeoDNS variance — the canonical case being CensoredPlanet flagging facebook.com 'blocked' in Singapore (which doesn't block it) with no OONI confirmation. This is WHY Voidly publishes single-source detections as a floor/suspected, treats multi-source-corroborated incidents (191 of 498 citable = 38%) as the citable core, and requires a block across ≥3 networks for a confirmed-national blocklist. Reporting the intersection, not the union, is the cost of being citable. HONEST CAVEATS: (1) 'OONI didn't confirm' ≠ 'CensoredPlanet was wrong' — different vantage/time/method, intermittent or ISP-specific blocks; the 29% is a cross-confirmation rate not an error rate. (2) Asymmetric by design — CP stores detections only, so this is OONI-confirmation-of-CP, not symmetric agreement; IODA excluded (no domain signal). (3) The small 384-cell overlap is structural (CP tests 28 domains), not a sampling flaw. (4) Voidly is the analysis layer aggregating upstreams, not an independent source. Live: /data/incidents/stats + /v1/measurement/summary.
Read findingRussia's foreign-press blockade: 264 blocked news domains — more of them Ukrainian than Russian
Voidly's confirmed-national blocklist for Russia (domains measured blocked across >=3 independent Russian networks, the OONI natblock floor) holds 608 domains, of which 264 are News Media — the largest distinct-news-outlet block-set of any country in the corpus: 2.4x Iran's 110, 7.5x Saudi Arabia's 35. The never-quantified signal is whose press it is: by TLD, only 32 of the 264 (12%) are Russian .ru, while 36 are Ukrainian .ua (1plus1.ua, 24tv.ua, hromadske.ua, censor.net.ua) and 50+ carry a foreign country-code TLD — Baltic (15min.lt, diena.lv), Bulgarian (24chasa.bg), Israeli (9tv.co.il), Slovak (dennikn.sk), plus an exile-press tail (belsat.eu, kavkaz-uzel.eu, themoscowtimes.com). The bulk of the press Russia is CONFIRMED to wall off is foreign and exile journalism, not domestic outlets — a measured, per-outlet, machine-readable map of a wartime information blockade. It lands on the 12 Feb 2026 NSDI mass state-DNS deletion (13 of 50 sites returned NXDOMAIN on state DNS; removed set named BBC/DW/Current Time/Svoboda/The Moscow Times — all in Voidly's confirmed set), amid the Access Now #KeepItOn 2025 baseline of 313 shutdowns/52 countries with conflict the #1 trigger. HONEST CAVEATS: (1) confirmed-national is a FLOOR not a census — absence != accessible. (2) GFW-style censors are UNDERCOUNTED by this DNS-confirmed measure — China shows just 1 confirmed news domain here (obvious undercount); Russia tops it partly because its blocking is DNS-manipulation-dominant (~85%) and registers cleanly in a DNS floor, so read '#1 in confirmed-blocked distinct news domains' NOT 'most censored country'. (3) 'Most of the news Russia blocks is foreign' NOT 'Russia blocks all foreign press'. (4) TLD is a proxy for origin; the robust signal is .ua (36) > .ru (32). (5) Voidly is the analysis layer on OONI's confirmed-national data, not an independent network. Live: /v1/measurement/national-blocks-export?country=RU&format=json.
Read findingAbove the BGP layer: how Iran's 2026 shutdown was enforced, content type by content type — an independent corroboration of arXiv:2603.28753
Iran did not block everything the same way. On Voidly's OONI-grounded measurements, where a blocking method can be resolved, Iran blocks news media overwhelmingly by DNS poisoning (85.3% of 116 method-bearing news measurements) but switches to the more expensive, harder-to-evade TCP-reset/SNI injection for the tools of coordination and circumvention: messaging/Communication 62.5% RST (n=72), Social Networking 53.4% (n=133), VPN/anonymizers 53.3% (n=75). The intent signature: Iran spends its most sophisticated censorship capacity not on news, but on the apps people use to route around censorship and organize. This per-content-type mechanism layer is what NetBlocks (outage %), Access Now #KeepItOn (event counts) and Freedom House (annual scores) structurally do not publish — and it independently corroborates, with separate machine-readable data, the method mix (DNS interception + SNI-based RST injection + QUIC/UDP filtering + a ~25%-traffic allowlist, all above the BGP layer) that Aceto, Persico and Pescapè documented in arXiv:2603.28753 for Iran's Jan–May 2026 shutdown (the longest nationwide internet disruption on record). For the same categories Russia reaches for the opposite weapon — DNS for nearly everything (comms 100% n=96, social 87% n=209) — and China is RST-dominant across the board (social 62% RST n=481); the method-mix is a stable, country-level fingerprint. HONEST CAVEATS: (1) 51.6% of all 4,852 Iran blocking measurements are block_generic = METHOD UNRESOLVED (not 'no block') — shares are computed only among method-bearing measurements, so the claim is 'of news blocks where we resolve a method, 85% are DNS,' NOT 'Iran blocks 85% of news.' (2) Voidly is the analysis layer on top of OONI's raw network — corroboration of an upstream, not an independent network. (3) These shares describe the filternet/allowlist application layer across the measurement window, NOT the deepest wire-cut days (those belong to NetBlocks/Cloudflare/IODA). (4) Per-cell n is 31–133 — solid but modest; n is reported on every cell. (5) This is the Iran case study of Voidly's general method-follows-content-type finding; the novel unit is the event-pegged, arXiv-corroborated framing. Live: /v1/measurement/category-techniques?country=IR.
Read findingHow, not just what: censors reserve TCP-reset for messaging, DNS poisoning for news
How a censor blocks is as telling as what it blocks. Voidly's new per-content-category technique view (/v1/measurement/category-techniques) crosses the blocking METHOD with the content type. DNS poisoning is the near-universal method — 74-91% of method-resolved blocking in every category globally — but several censors escalate to TCP-RESET / connection-level interference specifically for COMMUNICATION & messaging tools while leaving news at the easier-to-bypass DNS layer. Among 23 countries with enough categorised comms measurements: Iran reserves connection-level RST for 62% of comms blocking vs 15% for news (a 4x escalation); Pakistan 41% comms vs 0% news; Egypt 24% vs 0%; Cambodia and Myanmar RST 100% of measured comms blocking. The 'why' is practical: DNS poisoning is cheap but trivially bypassed (DoH, a custom resolver); TCP-reset injection requires the censor to watch and kill the live connection — costlier, but far harder to evade. Reserving it for real-time messaging suggests these states prioritise un-circumventable blocking of comms over news. China is the instructive outlier — it RST-blocks nearly everything (comms 58%, news 60%), a uniformly heavy apparatus rather than content-targeted escalation. HONEST CAVEATS: domain_category is the Citizen Lab test-list tag, present on ~23% of evidence; this is the composition of method-resolved blocking measurements (signal_level critical/elevated), not per-incident attribution; block_generic ('method unresolved') and IODA connectivity outages are excluded; some country-category cells are thin (read the per-cell counts — IR comms n=72, news n=116 and CN n=231/394 are robust; KH/MM have no categorised news, so no within-country contrast there). Live: /v1/measurement/category-techniques.
Read findingTwo ways to censor a network: VPN-blockers vs news-blockers
Volume hides intent: two networks can block the same AMOUNT and be doing opposite things. Voidly's new per-ISP category view (/v1/measurement/isp-categories) shows the SHAPE of a network's blocking, not just its size. Across 86 networks with enough categorised measurements, most block bluntly across the board — Venezuela's state AS8048 blocks 100% of measured domains in all nine categories (news 158/158, gambling 182/182, circumvention 90/90). But the 8 networks that block SELECTIVELY (a 40+ point gap between their most- and least-blocked category) reveal two mirror-image strategies. KZ AS207446 is a VPN-BLOCKER: 94% of circumvention tools blocked (46/49) but 0% of news (0/6) and gambling — censorship aimed at stopping people from routing around it. RU AS47541 is the OPPOSITE, a NEWS-BLOCKER: 100% of news (64/64) and communication tools blocked but only 9% of circumvention tools (5/54) — censorship aimed at controlling the message, escape hatch left open. The shape is practical: in a news-blocker a VPN probably works; in a VPN-blocker it probably won't — a volume-only ranking would call both 'moderate'. HONEST CAVEATS: block rate is over MEASURED domains per category (absence = unmeasured, not allowed); some cells are thin (KZ news/gambling n=6 each; the circumvention signal n=49 and the RU contrast n=54/64 are robust — always read the per-category count); ASN-tagged evidence skews toward CensoredPlanet DNS measurements that over-represent blocked endpoints, so most networks read 'blanket' and selective detection is a conservative floor; this is observed blocking shape, not attribution of policy to a named operator. Live: /v1/measurement/isp-categories?country=KZ&asn=207446.
Read findingWhy our category counts mirror the test list — a methodology honesty note
Voidly's category breakdowns ('Iran blocks 110 news sites', 'Russia leads on human-rights blocking') are real but answer a narrower question than they appear to: they describe what's blocked AMONG THE SITES TESTED, and the tested sites are a deliberately curated, politically-weighted list. The tell is in what's accessible: if measurement sampled the whole web, the confirmed-ACCESSIBLE set would look like the web (shopping, banking, health). It doesn't — in Iran the accessible domains are themselves dominated by news (94) and human rights (57), with commerce/health/government barely present (1-2 each). The accessible set and the blocked set are the same KIND of site because both are drawn from the same list. Iran isn't conspicuously leaving banking open; banking simply isn't measured. Why: Voidly aggregates OONI, which tests the Citizen Lab test lists — URLs SELECTED for their likelihood of being censored (news, human rights, political, LGBTQ+, religion, circumvention, gambling, adult). So the corpus's category mix is set partly by the list authors, not only the censor; 'NEWS is the most-blocked category' partly reflects that news is among the most heavily TESTED. This does NOT make any finding wrong — a domain confirmed blocked across >=3 networks is genuinely blocked. It changes the DENOMINATOR: read 'Iran blocks 110 news domains' as 'of the news domains on the test list, Iran blocks 110' — a lens, not a census. Cross-country comparisons stay fair (same global list); absolute 'fraction of the web' claims are what the data can't support. Same honesty as the confirmed-block-map-is-a-measurement-map finding. Live: /v1/measurement/category-leaders, /v1/measurement/intent-profile.
Read finding
Bring evidence into your work.
Read it, cite it or query it. Each path leads to the same source-linked record.
Report a story
Follow incident evidence and cite the record.
For journalists ↗Study the observations
Inspect methods, limitations and historical data.
For researchers ↗Give an agent a source
Connect MCP tools or use the REST interface.
For developers ↗Check accessibility
Inspect available country and domain observations.
For threat intelligence ↗Take the evidence with you.
Cite the exact resource you used. Preserve source attribution, observation dates and uncertainty.
For your tools
curl 'https://api.voidly.ai/data/incidents?country=IR&limit=10'
npx @voidly/mcp-server
Go deeper.
The full Atlas, grouped by what you need. Every drilldown remains one selection away.
Live monitoring
Forecasting
Analytics & methods
Models & transparency
Editorial
Read the development record.
Historical shipping notes are dated records, not current capability guarantees. Check the destination’s status and limitations.
Before you cite.
What does Atlas establish?
Atlas brings measurement records, incident classifications and source links together. An incident record is not automatically confirmed censorship. Read its evidence, status and limitations before citing it.
How fresh are these figures?
This page requests five-minute revalidation. Check the displayed response-read time; it is not an observation timestamp. The bundled OONI archive is historical; use data freshness and the source records to inspect coverage and observation dates.
Which sources contribute?
OONI, IODA, CensoredPlanet and Voidly probes contribute measurements or evidence. Citizen Lab supplies test-list context, not an independent confirming measurement. Different sources and their totals are not interchangeable.
How do I cite or integrate a record?
Follow an incident to its evidence and citation page. Citation exports include BibTeX and RIS. REST, MCP, Atom, RSS and JSON feeds provide machine-readable access; the API reference documents each surface and its limits.
Can I reuse the data?
Voidly publishes its dataset under CC BY 4.0 with attribution. Retain upstream source attribution and check the license attached to each upstream dataset. This does not license Voidly proprietary application code.