Skip to main content
This guide covers everything you need to set up WorldMonitor locally, from prerequisites and installation to understanding the project structure and API dependencies.

Tech Stack

Map Rendering Architecture

The map uses a hybrid rendering strategy optimized for each platform: Desktop (deck.gl + MapLibre GL):
  • WebGL-accelerated layers handle thousands of markers smoothly
  • MapLibre GL provides base map tiles (OpenStreetMap)
  • GeoJSON, Scatterplot, Path, and Icon layers for different data types
  • GPU-based clustering and picking for responsive interaction
Mobile (D3.js + TopoJSON):
  • SVG rendering for battery efficiency
  • Reduced marker count and simplified layers
  • Touch-optimized interaction with larger hit targets
  • Automatic fallback when WebGL unavailable

Key Libraries

  • deck.gl: High-performance WebGL visualization layers
  • MapLibre GL: Open-source map rendering engine
  • D3.js: SVG map rendering, zoom behavior (mobile fallback)
  • TopoJSON: Efficient geographic data encoding
  • ONNX Runtime: Browser-based ML inference
  • Custom HTML escaping: XSS prevention (DOMPurify pattern)

No External UI Frameworks

The entire UI is hand-crafted DOM manipulation, no React, Vue, or Angular. This keeps the bundle small (~250KB gzipped) and provides fine-grained control over rendering performance.

Build-Time Configuration

Vite injects configuration values at build time, enabling features like automatic version syncing: This ensures the displayed version always matches the published package, no manual synchronization required.

Installation

WorldMonitor has three setup tracks depending on what you’re doing.

1. App-only local dev

Runs the Vite dashboard with no required environment variables. Optional API keys (see below) unlock extra layers and feeds.
Variant dashboards run from the same checkout: npm run dev:tech, dev:finance, dev:commodity, dev:happy, and dev:energy.

2. Contributor / full codegen dev

Needed when you touch .proto contracts or regenerate clients. Requires Go 1.21+ (for the buf CLI and sebuf protoc plugins) and Node.js 22+.
Run make generate before building or pushing whenever you modify .proto files — CI’s proto-check.yml fails if generated output drifts from committed files. See Adding Endpoints for the full proto workflow.

3. Self-hosted Docker stack

The full self-hosted stack (dashboard + Railway-style relay + Redis + seed scripts) requires Node.js 22+, Docker or Podman, and secrets with no safe defaults — RELAY_SHARED_SECRET, REDIS_PASSWORD, and REDIS_TOKEN must be set before docker compose up. See the SELF_HOSTING.md guide in the repository for the complete walkthrough.

API Dependencies

The dashboard fetches data from various public APIs and data sources:

Optional API Keys

Some features require API credentials. Without them, the corresponding layer is hidden: The dashboard functions fully without these keys. Affected layers simply don’t appear. Core functionality (news, markets, earthquakes, weather) requires no configuration.

Project Structure

The flat api/*.js proxies described in older revisions have been replaced by proto-generated domain gateways. See the Architecture doc for the full request path.

Data Attribution

This project uses data from the following sources. Please respect their terms of use.

Aircraft Tracking

Data provided by The OpenSky Network. If you use this data in publications, please cite:
Matthias Schafer, Martin Strohmeier, Vincent Lenders, Ivan Martinovic and Matthias Wilhelm. “Bringing Up OpenSky: A Large-scale ADS-B Sensor Network for Research”. In Proceedings of the 13th IEEE/ACM International Symposium on Information Processing in Sensor Networks (IPSN), pages 83-94, April 2014.

Conflict & Protest Data

Financial Data

  • Stock Quotes: Powered by Finnhub (primary), with Yahoo Finance as backup for indices and commodities
  • Cryptocurrency: Powered by CoinGecko API
  • Economic Indicators: Data from FRED, Federal Reserve Bank of St. Louis

Geophysical Data

Infrastructure & Transport

Other Sources

Acknowledgments

Original dashboard concept inspired by Reggie James (@HipCityReg), with thanks for the vision of a comprehensive situation awareness tool. Special thanks to Yanal at Wingbits for providing API access for aircraft enrichment data, enabling military aircraft classification and ownership tracking. Thanks to @fai9al for the inspiration and original PR that led to the Tech Monitor variant.

Limitations & Caveats

This project is a proof of concept demonstrating what’s possible with publicly available data. While functional, there are important limitations:

Data Completeness

Some data sources require paid accounts for full access:
  • ACLED: Free tier has API restrictions; Research tier required for programmatic access
  • OpenSky Network: Rate-limited; commercial tiers offer higher quotas
  • Satellite AIS: Global coverage requires commercial providers (Spire, Kpler, etc.)
The dashboard works with free tiers but may have gaps in coverage or update frequency.

AIS Coverage Bias

The Ships layer uses terrestrial AIS receivers via AISStream.io. This creates a geographic bias:
  • Strong coverage: European waters, Atlantic, major ports
  • Weak coverage: Middle East, open ocean, remote regions
Terrestrial receivers only detect vessels within ~50km of shore. Satellite AIS (commercial) provides true global coverage but is not included in this free implementation.

Blocked Data Sources

Some publishers block requests from cloud providers (Vercel, Railway, AWS):
  • RSS feeds from certain outlets may fail with 403 errors
  • This is a common anti-bot measure, not a bug in the dashboard
  • Affected feeds are automatically disabled via circuit breakers
The system degrades gracefully. Blocked sources are skipped while others continue functioning.

License

World Monitor is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only). Commercial use is permitted under the AGPL when you comply with its copyleft and source-availability terms. Separate commercial licensing is available as an alternative option for private-source or custom contractual terms. See the License page for full details.

Author

Elie Habib
Built for situational awareness and open-source intelligence gathering.