World Monitor: one AGPL codebase behind six news dashboards, a terminal client and a Tauri app
Real-time global intelligence dashboard that synthesizes 500+ curated news feeds into AI briefs, with dual map engines, country instability scoring, and a finance radar.
At a glance
- What is it?
- koala73/worldmonitor is a TypeScript situational awareness dashboard that merges news feeds, maps, markets and conflict signals. It runs with zero configuration, but most of its depth sits behind optional keys, and a self-hosted Docker stack will not start until you generate three secrets.
- Who is it for?
- World Monitor fits analysts, newsrooms and hobbyists who want a self-hostable news and conflict dashboard they can read in a browser, a desktop app or a terminal, and who accept AGPL terms. It is a poor fit for anyone wanting a native phone app or instability scores for countries outside the 31 Tier-1 set.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.
Star history
- koala73/worldmonitor90,597 ★ · +14,790
| Repository | 2026-07-28 | 2026-11-13 |
|---|---|---|
| koala73/worldmonitor | 75.8k | 90.6k |
14,790 Stars in the last 108 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
Six public sites and one desktop binary come from the same build
World Monitor is not one website. The same repository produces worldmonitor.app plus tech, finance, commodity, happy and energy variants, each a public deployment marked Stable. The desktop app follows the opposite rule: there is deliberately no per-variant download. One Tauri binary covers Windows, macOS on Apple Silicon, macOS on Intel and a Linux AppImage, and you switch to the tech, finance, commodity, energy or happy view inside the app. All of these ship from one release process, and issues against any of them are triaged from the same backlog. For a developer, each variant has its own dev script, so you can work on one view without touching the others:
npm run dev:tech # tech.worldmonitor.app
npm run dev:finance # finance.worldmonitor.app
npm run dev:commodity # commodity.worldmonitor.app
npm run dev:happy # happy.worldmonitor.app
npm run dev:energy # energy.worldmonitor.appThe terminal dashboard runs live data with no API key
Beyond the browser and desktop app, World Monitor has a terminal surface that needs nothing but npx:
npx worldmonitorIt shows the same live data in a shell: world map, news, markets, conflict, military flights, cyber, climate, prediction markets and live TV, with mouse support and colour themes, and no API key. The worldmonitor npm package also provides a command-line client, installed with npm install -g worldmonitor or brew install worldmonitor, and it is published from the cli/ directory on every cli-v* tag. For programmatic access there are SDKs for Python (worldmonitor-sdk), Ruby (worldmonitor) and Go (sdk/go), and a hosted MCP server at https://worldmonitor.app/mcp. On a self-hosted stack, operator keys for MCP and REST are passed through the X-WorldMonitor-Key header and set in WORLDMONITOR_VALID_KEYS.
Node.js 18 from Debian stops npm install on vendor/braces
Running from source requires Node.js 24, the version pinned in .nvmrc. This is a hard requirement rather than a suggestion. Debian 12 and Raspberry Pi OS ship Node.js 18 with npm 9.2.0, and there npm install stops with Invalid comparator: file:vendor/braces. The Dockerfile copies vendor/braces, vendor/stream-json and vendor/vercel-og into the image before npm ci, so those local packages are part of every build. The fix is nvm, where nvm install inside the checkout reads .nvmrc, or a download from nodejs.org. Once Node.js 24 is in place, the quick start is four commands:
git clone https://github.com/koala73/worldmonitor.git
cd worldmonitor
npm install
npm run devThe app opens on localhost:3000 and runs with no environment variables. DEV_PORT in .env.local changes the port; values that are not integers in 1 to 65535 fall back to 3000. The Docker image builds on node:24-alpine for the same reason.
Every key is optional, and each missing key switches a feature off
The zero-configuration start hides a trade. Every entry in .env.example is optional, and the dashboard works without them, but the corresponding features are disabled. You copy the file to .env.local and fill in only what you need:
cp .env.example .env.localSome of those limits are concrete. AI summarization through OpenRouter uses OPENROUTER_API_KEY, and the free tier is 50 requests per day. Anonymous headline translation has daily budgets counted on cache misses: 300 per client IP and 5000 across all anonymous callers by default, set through TRANSLATE_ANON_IP_DAILY_MISS_LIMIT and TRANSLATE_ANON_GLOBAL_DAILY_MISS_LIMIT. Signed-in Pro users, operator keys, the desktop sidecar and Ollama are not counted. Without Upstash Redis, anonymous translation is refused outright, so a bare self-hosted instance loses that feature even if an LLM is configured.
docker compose refuses to start without three generated secrets
The Docker route is a self-contained stack of the app, Redis and an AIS relay, and it is stricter than the dev server. docker-compose.yml marks REDIS_TOKEN, WM_SESSION_SECRET and RELAY_SHARED_SECRET as required, and compose stops with an error until each is set. The suggested way to generate each one is:
openssl rand -hex 32After that, the stack comes up with:
docker compose up -d --buildThe container listens on 8080 internally and is mapped to WM_PORT, which defaults to 3000. LOCAL_API_CLOUD_FALLBACK is set to false, so a Docker install does not quietly lean on the hosted service. Inside the image, a multi-stage build compiles the TypeScript API handlers into ESM bundles, then runs nginx for static files and node for the API under supervisord. Local secrets belong in docker-compose.override.yml, which is gitignored, and SELF_HOSTING.md covers the rest.
AI summaries can run on Ollama or any OpenAI-compatible endpoint
The AI layer is pluggable. The project states that everything can run with Ollama and no API keys, and the stack lists Ollama and OpenRouter on the server side plus Transformers.js in the browser. For a self-hosted Docker stack, the LLM provider is any OpenAI-compatible endpoint set with LLM_API_URL, LLM_API_KEY and LLM_MODEL, alongside OPENROUTER_API_KEY. Forecast enrichment has its own routing, and the override precedence is explicit: a combined-stage override beats a critical-signal override, which beats a global forecast override, which beats the built-in defaults. Setting FORECAST_LLM_COMBINED_PROVIDER_ORDER=openrouter is one example. The consequence for a self-hoster is that no summaries appear until one of these providers is configured, and an OpenRouter free-tier key caps you at 50 requests per day.
The Country Instability Index covers only 31 Tier-1 countries
The analytical features are where World Monitor differs from a plain feed reader. Curated news feeds across global and regional categories are AI-synthesized into briefs. Cross-stream correlation looks for convergence between military, economic, disaster and escalation signals. Maps run on two engines sharing one layer catalog: a 3D globe on globe.gl and Three.js, and a WebGL flat map on deck.gl and MapLibre GL. The finance radar tracks stock exchanges, commodities, crypto and a market composite. The Country Instability Index has a hard boundary, though. It publishes live CII v14 scores, bands and an approximate 24-hour movement for 31 Tier-1 countries. If the country you follow is outside that set, there is no score for it, and the 24-hour figure is labelled approximate, so treat it as a direction rather than a measurement.
AGPL licensing and a release every few days
World Monitor is licensed AGPL-3.0-only, with the full source in the repository along with SECURITY.md, ARCHITECTURE.md and SELF_HOSTING.md. Development pace is fast: v2.11.4 shipped on October 24, 2026, v2.11.6 on October 25, v2.11.7 on November 1, and the last push landed on November 2, 2026. The stable surfaces are the six web deployments, the desktop binaries and the npm package. There is no Android or iOS app among them; deployment targets include a PWA, so a phone user reaches it through the web app. The UI is multilingual with native-language feeds and right-to-left support, and the README itself is available in Chinese, Japanese and Russian.
Editorial conclusion
World Monitor fits analysts, newsrooms and hobbyists who want a self-hostable news and conflict dashboard they can read in a browser, a desktop app or a terminal, and who accept AGPL terms. It is a poor fit for anyone wanting a native phone app or instability scores for countries outside the 31 Tier-1 set. Before self-hosting, check that your machine runs Node.js 24, decide which optional API keys your use actually needs, and generate the three secrets docker-compose.yml requires.
Frequently asked questions
Is World Monitor open source?
Yes. World Monitor is published at github.com/koala73/worldmonitor under the AGPL-3.0-only license, and the web variants, desktop binaries and npm package are all built from that repository.
How to install World Monitor from GitHub?
Install Node.js 24, clone https://github.com/koala73/worldmonitor.git, run npm install and npm run dev, then open localhost:3000. Node.js 18 from Debian 12 fails with Invalid comparator: file:vendor/braces.
What is World Monitor?
World Monitor is a real-time global intelligence dashboard combining AI-synthesized news briefs, 3D and flat maps, cross-stream conflict signals, a Country Instability Index for 31 Tier-1 countries and a finance radar.
How to use World Monitor?
Open worldmonitor.app or one of its variants in a browser, download the Tauri desktop app, or run npx worldmonitor for the terminal dashboard. The terminal dashboard needs no API key.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/koala73-worldmonitor)Star history chart for your README
[](https://hysenlabs.com/projects/koala73-worldmonitor)Was this useful?