Real-time global monitoring dashboard with a composable applet architecture.
Netr is a high-performance, extensible intelligence dashboard that aggregates live data from dozens of open sources — earthquakes, flights, news, markets, cyber threats, weather, infrastructure status, and more — into a single customizable board.
Originally inspired by koala73/worldmonitor. Netr is a ground-up rewrite that replaces the monolithic SPA with a modular applet-based architecture, delivering dramatically better performance and extensibility.
| Area | Original | Netr |
|---|---|---|
| Framework | React (virtual DOM diffing) | Solid.js (fine-grained reactivity, no VDOM) |
| Map engines | 4 (Deck.gl + MapLibre + D3 + Globe.gl) | 1 (Deck.gl + MapLibre, unified) |
| CSS | 366KB monolithic stylesheet | Tailwind CSS 4 (~15KB gzipped) |
| Architecture | 155-panel monolith, all mounted at once | Composable applets — only active panels consume resources |
| State | Single god-object AppContext | Applet-local signals + typed EventBus |
| Polling | 30+ independent setInterval loops | Visibility-gated polling per applet with auto-cleanup |
| Backend | 26 Vercel Edge Functions | Single Hono server on Cloudflare Workers |
| Build output | Single bundle | 66 code-split chunks (applets: 2-4KB gzipped each) |
| Map lib loading | Eager (800KB+ upfront) | Lazy — loaded only when map applet is on board |
The Netr SDK is a batteries-included toolkit for building applets in minutes, not hours:
Hooks:
usePolling(fetcher, interval)— auto-cleaning interval fetch with loading/error statesuseMapLayer(services, id, layerFn)— reactive Deck.gl layer lifecycle on the shared mapuseEventBus(services, channel, handler)— typed pub/sub with auto-unsubscribeuseAppletState(props, defaults)— persist applet config to IndexedDB across reloadsuseFilter(items, filterFn)— reactive list filtering
Components:
AppletShell— standard frame with header, toolbar slot, and scrollable bodyDataList— virtualized list with built-in loading, error, and empty statesStatGrid— numeric KPI gridFilterBar— pill-based category filterBadge,Sparkline,TimeAgo,LoadingState,ErrorState
Layer Factories:
createScatterLayer(),createPathLayer(),createArcLayer(),createGeoJsonLayer()- Pre-configured with dark-theme defaults, just pass your data
Utilities:
timeAgo,formatNumber,formatAltitude,formatSpeed,colorScale,debounce,generateId
A typical applet is 80-150 lines of code. See docs/applet-development.md for a full tutorial.
| Category | Applets |
|---|---|
| Geospatial | Live Map, Geocoder Search, Country Profile, Timezone Clock, Coordinate Converter, POI Bookmarks, Geofence Editor, Distance Measure |
| Intelligence | Live News, Conflict Tracker, Sanctions List, OSINT Feed, Threat Alerts, Refugee Tracker, Cyber Threat Map, Election Monitor, Protest Tracker |
| Markets | Stock Ticker, Crypto Prices, Forex Rates, Commodity Prices, Economic Calendar, Market Heatmap, Bond Yields, Trade Flow Map |
| Infrastructure | Flight Tracker, Vessel Tracker, Internet Outages, Power Grid, Subsea Cables, Satellite Tracker, Port Congestion, Rail Traffic, Pipeline Monitor |
| Environment | Earthquake Monitor, Weather Radar, Wildfire Tracker, Hurricane Tracker, Volcano Monitor, Air Quality, Sea Temperature, Drought Monitor, Flood Alerts |
| Analytics | Event Timeline, Anomaly Detector, Correlation Matrix, Data Export |
| Utility | Notepad, Embed iFrame, RSS Reader, Countdown Timer, System Status |
git clone https://github.com/hakaitech/netr.git
cd netr
# Development — hot-reload for frontend and backend
docker compose upThat's it. Vite HMR on localhost:5173, API on :8787.
Source files are bind-mounted, so edits in src/ and server/src/ reflect instantly — no rebuild needed.
# Production — optimized single container
docker compose --profile prod up --buildThe production image builds the Vite frontend, serves it through nginx on port 80, and runs the Hono API internally. One container, one port.
| Mode | Frontend | API | URL |
|---|---|---|---|
docker compose up |
Vite HMR on :5173 |
tsx watch on :8787 |
localhost:5173 |
--profile prod |
nginx on :80 |
Node on :8787 (internal) |
localhost |
git clone https://github.com/hakaitech/netr.git
cd netr
# Install dependencies
npm install
cd server && npm install && cd ..
# Start backend (port 8787)
cd server && npm run dev:node &
# Start frontend (port 5173)
npm run devOpen http://localhost:5173. Pick a preset board or build your own from the catalog.
Requirements: Node 22+, npm 10+
# Start dev environment
docker compose up
# Start dev environment in background
docker compose up -d
# View logs
docker compose logs -f frontend-dev
docker compose logs -f api
# Rebuild after dependency changes (package.json)
docker compose up --build
# Production build & run
docker compose --profile prod up --build
# Stop everything
docker compose down
# Stop and remove volumes
docker compose down -vNetr is designed to be extended. Two paths:
Create a new directory under src/applets/, export a manifest and a default Solid component, register it in builtin-registry.ts. Done.
Bundle your applet as an ESM module, host it anywhere, and load it at runtime via the plugin registry. No rebuild required.
Full guides:
| Layer | Technology |
|---|---|
| UI Framework | Solid.js |
| Map Engine | Deck.gl + MapLibre GL |
| Grid Layout | GridStack.js |
| Styling | Tailwind CSS 4 |
| Icons | Lucide |
| Backend | Hono on Cloudflare Workers |
| Build | Vite |
| Persistence | IndexedDB via idb-keyval |
Netr aggregates data from these open services. We are grateful for their public APIs:
| Service | Data | License / Terms |
|---|---|---|
| USGS Earthquake Hazards Program | Real-time earthquake feed (GeoJSON) | Public domain |
| OpenSky Network | Live aircraft positions (ADS-B) | OpenSky Terms |
| CARTO Basemaps | Dark Matter map tiles | CC BY 3.0 |
| NASA FIRMS | Active fire / hotspot data | Public domain |
| NOAA / NHC | Hurricane & tropical cyclone tracks | Public domain |
| OpenWeatherMap | Weather data | OWM Terms |
| CoinGecko | Cryptocurrency market data | CoinGecko Terms |
| ACLED | Armed conflict & protest events | ACLED Terms |
| Smithsonian / GVP | Global volcanism data | Public |
| TeleGeography | Submarine cable data | TeleGeography Terms |
Note: Many applets currently use realistic mock data. As you connect real API keys and endpoints, the live data will flow through the same SDK hooks — just swap the fetcher function.
This project was inspired by and builds upon the work of koala73/worldmonitor — an AI-powered global monitoring system. Netr takes the original concept and reimagines it with a focus on performance, modularity, and extensibility.
MIT