Global threat map. Learn wars, conflicts, military bases and history of nations.
# Add to your Claude Code skills
git clone https://github.com/unicodeveloper/globalthreatmapLast scanned: 4/27/2026
{
"issues": [
{
"type": "npm-audit",
"message": "ajv: ajv has ReDoS when using `$data` option",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "axios: Axios is Vulnerable to Denial of Service via __proto__ Key in mergeConfig",
"severity": "high"
},
{
"type": "npm-audit",
"message": "brace-expansion: brace-expansion: Zero-step sequence causes process hang and memory exhaustion",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "flatted: flatted vulnerable to unbounded recursion DoS in parse() revive phase",
"severity": "high"
},
{
"type": "npm-audit",
"message": "follow-redirects: follow-redirects leaks Custom Authentication Headers to Cross-Domain Redirect Targets",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "minimatch: minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern",
"severity": "high"
},
{
"type": "npm-audit",
"message": "next: Next.js self-hosted applications vulnerable to DoS via Image Optimizer remotePatterns configuration",
"severity": "high"
},
{
"type": "npm-audit",
"message": "picomatch: Picomatch: Method Injection in POSIX Character Classes causes incorrect Glob Matching",
"severity": "high"
},
{
"type": "npm-audit",
"message": "postcss: PostCSS has XSS via Unescaped </style> in its CSS Stringify Output",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "protocol-buffers-schema: Mafintosh's protocol-buffers-schema is vulnerable to prototype pollution",
"severity": "medium"
}
],
"status": "WARNING",
"scannedAt": "2026-04-27T06:28:40.625Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}A real-time global situational awareness platform that plots security events, geopolitical developments, and threat indicators on an interactive map. Think of it as an OSINT (Open Source Intelligence) command center.
Click on any country to view detailed conflict intelligence:
No comments yet. Be the first to share your thoughts!
Visualize global military presence:
npm install
.env.local file in the root directory:NEXT_PUBLIC_MAPBOX_TOKEN=your_mapbox_token_here
VALYU_API_KEY=your_valyu_api_key_here
NEXT_PUBLIC_APP_MODE=self-hosted
# Optional: Enable AI-powered location extraction for better accuracy
OPENAI_API_KEY=your_openai_api_key_here
Get your API keys:
Run the development server:
npm run dev
globalthreatmap/
├── app/
│ ├── layout.tsx # Root layout
│ ├── page.tsx # Main dashboard
│ ├── globals.css # Global styles
│ └── api/ # API routes
│ ├── events/ # Event fetching via Valyu
│ ├── entities/ # Entity research
│ ├── reports/ # Deep research reports
│ ├── countries/
│ │ └── conflicts/ # Country conflict intelligence
│ └── military-bases/ # Military base data
├── components/
│ ├── map/ # Map components
│ │ ├── threat-map.tsx # Main map component
│ │ ├── timeline-scrubber.tsx # Auto-pan controls
│ │ └── country-conflicts-modal.tsx # Conflict details modal
│ ├── feed/ # Event feed components
│ ├── search/ # Entity search components
│ ├── alerts/ # Alert management
│ └── ui/ # Base UI components
│ └── markdown.tsx # Markdown renderer
├── lib/
│ ├── valyu.ts # Valyu client & API functions
│ ├── geocoding.ts # Location extraction
│ └── event-classifier.ts # Event classification
├── stores/
│ └── map-store.ts # Map state (viewport, layers, bases)
├── types/ # TypeScript types
└── hooks/ # React hooks
The event feed displays real-time global events. You can:
The play/pause button in the bottom-left corner toggles automatic map panning:
Build comprehensive intelligence dossiers on any actor using Valyu's Deep Research API. Enter any entity - nations, militias, PMCs, cartels, political figures - and receive:
Reports take 5-10 minutes to generate but are extremely detailed and comprehensive, pulling from hundreds of sources across the web, academic papers, and proprietary databases. Perfect for OSINT analysts, researchers, and intelligence professionals who need exportable deliverables for briefings and further analysis.
Click any country on the map to view:
Create alert rules based on:
| Route | Method | Description |
|-------|--------|-------------|
| /api/events | GET | Fetch global events from Valyu |
| /api/events | POST | Fetch events with custom queries |
| /api/entities | GET/POST | Research entities and get locations |
| /api/deepresearch | POST | Create async deep research task with deliverables |
| /api/deepresearch/[taskId] | GET | Poll deep research task status and results |
| /api/reports | POST | Generate deep research reports |
| /api/countries/conflicts | GET | Get historical and current conflicts for a country |
| /api/military-bases | GET | Get US and NATO military base locations (1hr cache) |
This app uses Valyu for intelligence data:
Wikipedia is excluded from search results.
Global Threat Map supports two app modes controlled by the NEXT_PUBLIC_APP_MODE environment variable.
| Mode | Description |
|------|-------------|
| self-hosted | Default mode. No authentication required. All features are freely accessible. |
| valyu | OAuth mode. Users sign in with Valyu to access additional features. |
In self-hosted mode, the app runs entirely with your own Valyu API key:
NEXT_PUBLIC_APP_MODE=self-hosted
VALYU_API_KEY=your_valyu_api_key_here
In valyu mode, users authenticate with their Valyu accounts:
NEXT_PUBLIC_APP_MODE=valyu
# OAuth Configuration (contact contact@valyu.ai for credentials)
NEXT_PUBLIC_VALYU_AUTH_URL=https://auth.valyu.ai
NEXT_PUBLIC_VALYU_CLIENT_ID=your-client-id
VALYU_CLIENT_SECRET=your-client-secret
VALYU_APP_URL=https://platform.valyu.ai
NEXT_PUBLIC_REDIRECT_URI=http://localhost:3000/auth/valyu/callback
When running in valyu mode, certain features require authentication:
| Feat