Hyper-local weather radar you host yourself — a CARROT-Weather-style Expo app on a Python + Temporal tile pipeline. Pure NOAA data, sub-2-minute refresh, no aggregators, no API keys.
radar-ng pulls radar (NOAA MRMS), forecast (HRRR + Open-Meteo), alerts (NWS), lightning (Blitzortung), and tropical (NHC) straight from the public sources, renders map tiles on hardware you own, and serves them to a universal Expo app. The phone is the windshield; a Kubernetes + Temporal pipeline is the engine.
cd deploy
cp .env.example .env
# set two values in .env:
# NWS_USER_AGENT=(radar-ng, you@example.com)
# BASEMAP_PMTILES_URL= # newest date from https://build.protomaps.com/
docker compose run --rm basemap-bootstrap # one-time basemap fetch
docker compose up -dFirst radar frame lands ~2 min later. Point the app at http://<host>:8080 (or
set it in Settings). Deploying to your own Kubernetes cluster and running the
app are covered in GETTING_STARTED.md.
Prebuilt images: ghcr.io/mitchross/radar-ng-{tile-server,temporal-worker,open-meteo-worker}.
Every ingest step is a Temporal activity, scheduled by Temporal Schedules (no cron). The tile-server is Caddy — static tile serving off disk + immutable cache headers + one-port routing — in front of FastAPI/uvicorn. The component-by- component breakdown, the per-frame pipeline, and the caching story are in ARCHITECTURE.md.
| Doc | For |
|---|---|
| GETTING_STARTED.md | Run the stack (Compose or k8s) + the app |
| docs/configuration.md | Every env var + the basemap-date gotcha |
| docs/self-hosting.md | Docker Compose golden path |
| docs/kubernetes.md | Bring-your-own-cluster (Temporal, storage, probes) |
| docs/tuning.md | Faster / cheaper / fresher, knob by knob |
| docs/debug-harness.md | Inspect a live stack: freshness, latency, Temporal, disk |
| ARCHITECTURE.md | How it all fits together |
| CONTRIBUTING.md | Dev setup, verification, conventions |
All free, public, no keys: NOAA MRMS (radar) · NOAA HRRR + Open-Meteo (forecast) · NWS (alerts) · NHC (tropical) · Blitzortung (lightning) · Protomaps (basemap).
Expo SDK 56 / TypeScript · MapLibre · Skia · Python 3.12 (pygrib · numpy · Pillow · FastAPI) · Caddy 2 · Temporal · Open-Meteo · Protomaps · Kubernetes (Talos + ArgoCD) · OpenTelemetry.
See LICENSE.




