Open-source global intelligence platform. Real-time signals from 300+ sources across 184 nations — verified, enriched, and mapped.
Home Base · API Docs · Self-Host Guide · Contributing
WorldPulse monitors the world so you don't have to. It ingests signals from wire services, government feeds, OSINT APIs, and specialized data sources — then classifies, geolocates, verifies, and maps every event in real-time.
The kind of situational awareness that used to cost six figures, now open-source and free.
- 300+ verified sources — AP, Reuters, USGS, NOAA, ACLED, OpenSanctions, GDELT, and more
- 50,000+ intelligence signals indexed and growing continuously
- AI-powered verification — cross-source correlation, reliability scoring, deduplication
- Interactive world map — live conflict, hazard, cyber, and maritime layers on MapLibre GL
- Real-time updates — WebSocket-powered, signals appear within 60 seconds
- Open API — build on top of WorldPulse, no API key required for public data
- Self-hostable —
docker compose upand you're running
- Node.js 20+
- pnpm 9+
- Docker + Docker Compose
git clone https://github.com/World-Pulse/WorldPulse.git
cd WorldPulse
pnpm installdocker compose up -d postgres rediscp apps/api/.env.example apps/api/.env.local
cp apps/scraper/.env.example apps/scraper/.env.local
cp apps/web/.env.example apps/web/.env.localpnpm db:migrate
pnpm db:seedpnpm dev- Web app at http://localhost:3000
- API server at http://localhost:3001
- Scraper runs as a background process
WorldPulse/
├── apps/
│ ├── web/ # Next.js 15 frontend
│ ├── api/ # Fastify API + WebSocket server
│ └── scraper/ # Signal intelligence pipeline
├── packages/
│ ├── types/ # Shared TypeScript types
│ ├── ui/ # Shared component library
│ └── config/ # ESLint/TS configs
└── infrastructure/
└── docker/ # Docker configs, init scripts
| Layer | Technology |
|---|---|
| Frontend | Next.js 15, TypeScript, Tailwind CSS |
| API | Fastify, TypeScript, WebSocket |
| Database | PostgreSQL 16 + PostGIS |
| Cache | Redis 7 |
| Maps | MapLibre GL (no proprietary APIs) |
| Search | Pinecone (semantic) + Meilisearch (full-text) |
| Scraper | Node.js, 30+ source adapters |
| AI | Anthropic (verification), Ollama (local classification) |
The scraper monitors 300+ verified global sources:
- Wire Services: AP, Reuters, AFP, BBC, Bloomberg, Al Jazeera
- Government Feeds: USGS, NOAA, WHO, NWS, NASA, FEMA
- OSINT Sources: ACLED (conflict), OpenSanctions, IODA (outages), OTX (cyber threats)
- Specialized: GDELT, maritime AIS, aviation ADS-B, ProMED (disease)
Every signal passes through a 5-stage enrichment pipeline: extraction, classification, geolocation, cross-source correlation, and reliability scoring.
- MapLibre GL globe — no proprietary API keys
- Satellite, dark, and terrain basemap switcher
- 3D tilt with NavigationControl
- Live overlay layers: conflict, natural hazards, cyber threats, maritime/aviation
- Click any signal for a full verification timeline
- Supercluster for marker grouping at all zoom levels
Dedicated deep-dive dashboards for specialized analysis:
- /cyber-threats — APT activity, CVEs, ransomware tracking
- /sanctions — OFAC, EU, UN watchlist entries
- /finance — Market signals, central bank events, economic indicators
- /space-weather — Solar flares, geomagnetic storms, NOAA alerts
- /internet-outages — BGP disruptions, submarine cable cuts
- /governance — Democracy indices, policy changes by country
- /food-security — Famine early warning, crop disruptions
- /digital-rights — Internet shutdowns, surveillance events
- /undersea-cables — Global cable infrastructure monitoring
- AI content farm detection — 3,000+ flagged domains
- Reliability scores on every signal (0–1 scale, color-coded)
- Source trust tiers: Wire Service > Official > Verified Media > Community
- WebSocket-powered live updates
- Command palette (Cmd+K / Ctrl+K) for instant navigation
- Category and severity filters
- Redis-cached public feeds (30s TTL)
No API key required for public endpoints. Full REST API + WebSocket.
| Plan | Rate Limit | History | Price |
|---|---|---|---|
| Free | 60 req/min | 7 days | $0 |
| Pro | 300 req/min | 90 days | $12/mo |
Base URL: https://api.world-pulse.io/api/v1
GET /feed/signals Live signal feed
GET /signals List signals (filterable)
GET /signals/:id Signal detail + verification trail
GET /signals/map Geo-located signals for map rendering
GET /search?q=... Full-text + semantic search
GET /api/v1/public/signals Public API (no auth, CORS enabled)
wss://api.world-pulse.io/ws
Subscribe: { "type": "subscribe", "payload": { "channels": ["breaking"] } }
Receive: { "event": "signal.new", "data": { "signal": {...} } }
Full API documentation: docs/api.md
git clone https://github.com/World-Pulse/WorldPulse.git
cd WorldPulse
cp .env.production.example .env.production
# Edit .env.production with your values
docker compose -f docker-compose.prod.yml up -dWorldPulse is now running on port 80. Point a reverse proxy with TLS at it and you're production-ready.
Full self-hosting guide: docs/self-hosting.md
WorldPulse welcomes contributions of all kinds.
Good first issues are labeled and ready for new contributors: browse them here.
- Bug reports — Open an issue
- Feature requests — Start a discussion
- Code — Fork, branch, PR. See CONTRIBUTING.md
- New sources — Propose or build a scraper adapter for a data source we're missing
- Documentation — Improve guides, add examples, fix typos
git clone https://github.com/<your-fork>/WorldPulse.git
cd WorldPulse
pnpm install
docker compose up -d postgres redis
pnpm db:migrate && pnpm db:seed
pnpm dev- TypeScript strict mode
- Conventional commits (
feat:,fix:,docs:,chore:) - Tests required for new pipeline features
- Discord: discord.gg/worldpulse
- GitHub Discussions: World-Pulse/WorldPulse/discussions
Now: Expanding source coverage, mobile app, contributor onboarding
Next: Communities, expert verification program, Telegram channel monitoring
Later: Satellite imagery integration, real-time radio intercepts, native iOS/Android
See ROADMAP.md for details.
MIT — see LICENSE for details.