- site
- crosswire.online
- platform
- Web
- languages
- English · Spanish · French · German · Portuguese · Italian · Japanese · Korean · Chinese · Arabic · Hindi · Russian · Turkish · Dutch · Polish · Swedish
- audience
- News readers, expats and travellers, journalists and media researchers, and educators teaching media literacy
- status
- Live — free, no account, no ads
Crosswire.online

crosswire.online puts the live front pages of news outlets side by side, so you can see how the same day is being framed in different countries — and across the political spectrum.
The name comes from the journalism practice of cross-referencing narratives across regions. It answers questions like: how is this story leading in Germany versus the UK? What is above the fold in Spain, and is it the same story in France?
How it works
Pick a country — from the picker, or from the interactive 3D globe — and Crosswire renders those outlets’ actual homepages side by side through a server-side proxy. Not scraped headlines: the real front pages, as their readers see them.
Features
- 907 outlets across 186 countries — the full directory is published as open data under CC BY 4.0
- Political spectrum presets — curated Left · Center · Right comparisons in 36 countries, with per-outlet leaning labels drawn from AllSides, Ad Fontes and Media Bias/Fact Check, and the sourcing documented publicly
- Translate in place — any proxied front page can be machine-translated into 16 languages without leaving the comparison
- Layouts — two, three or four columns, relaxed or compact
- Favourites — save outlets across countries to browser storage; no account required
- Outlet profiles — a page per outlet with its leaning, type and description
- Self-healing previews — a weekly job probes every outlet through the production proxy; ones that can no longer be rendered are automatically skipped and shown as a fallback card with a direct link
Tech stack
- Next.js 15.5 with the App Router, React 19, TypeScript, Tailwind CSS 4
- three.js with react-globe.gl for the globe, lazy-loaded as an opt-in browse mode
- Deployed on Cloudflare Pages. The runtime split is deliberate: the home route and the proxy run at the edge, everything else is statically generated, which keeps the worker inside Cloudflare’s size limit
- The proxy handles charset detection, bot-wall detection, user-agent escalation and edge caching with a stale-on-error reserve
- No database and no CMS — the outlet directory is typed data in the repo
I wrote up the engineering problems in Building Crosswire.online.
Built and operated by Nexo Apex SL.