New

Live push updates over WebSocket — /v2/ws delivers the catalog, alerts, storm cells, and lightning the moment they change, so your client can stop polling for them.

Self-Hosted Weather Radar

LibreWXR is a free, open-source weather radar API you can host yourself. It's a drop-in replacement for Rain Viewer with real radar composites, always-on global observed precipitation (NOAA RRQPE), a chain of regional high-resolution NWP models, ECMWF IFS as the global model layer, global WMO weather alerts, and GOES GLM lightning strikes — and all of it can be pushed live over a WebSocket channel.

Loading frames 0/0
Loading...

Features

Rain Viewer Compatible

Drop-in v2 API replacement. Works with any app or library that supports Rain Viewer tiles.

Multi-Region Radar

Real radar composites via NOAA MRMS (US), MSC (Canada), EUMETNET OPERA (Europe, 27 countries) plus DPC for native Italian coverage, MARN/SNET (El Salvador), CWA QPESUMS (Taiwan), JMA HRPN (Japan), MET Malaysia (Peninsular Malaysia + Borneo + Singapore), and PAGASA (Philippines).

Regional NWP Chain

High-resolution rapid-refresh NWP layered specificity-first: HRRR (CONUS + Alaska), HRDPS (Canada), DMI DINI + ICON-EU (Europe), AROME Outre-Mer (Caribbean, French Guiana, SW Indian Ocean, New Caledonia, French Polynesia), WRF-SMN (Argentina), and JMA MSM (Japan + Korean Peninsula + Taiwan). Soft-feathered at every domain edge.

Global Observed Precipitation

NOAA RRQPE (Enterprise Rain Rate GLB-5) provides always-on global observed precipitation across the 60S-70N band, filling past/current frames wherever no finer radar region claims the pixel. ECMWF IFS 9 km model data covers what RRQPE doesn't — poleward of the band, the fringe excluded by RRQPE's coverage polygon, and when RRQPE declines — and powers the nowcast blend.

Real Satellite Imagery

NOAA GMGSI hourly global mosaic (GOES-East + GOES-West + Meteosat-9 + Meteosat-10 + Himawari-9), rendered as a VIS-over-LW composite with a natural day/night terminator. Daytime shows continents and clouds as they appear from space; night side falls through to longwave IR cloud tops.

Weather Alerts

Global WMO CAP weather alerts (severe storm warnings, watches, advisories) returned as GeoJSON for any map library. NWS point-endpoint integration for US locations surfaces non-polygon alerts too.

Precipitation Nowcasting

Experimental 60-minute forecast using optical flow radar extrapolation with configurable blend modes: pure radar, blended radar-to-model, or pure model. The model side is taken from the active NWP chain — HRRR over CONUS, ICON-EU/DINI over Europe, WRF-SMN over the S. American Cone, JMA MSM over Japan + adjacent East Asia, IFS elsewhere.

Motion Arrows

Dark Sky-style arrows showing storm movement direction and speed, derived from optical flow. Available globally for both radar and ECMWF data.

Snow Detection

Per-pixel snow and rain classification. Regional NWPs (HRRR, WRF-SMN, DMI DINI, ICON-EU, JMA MSM) classify natively from their own 2-metre temperature field; ECMWF IFS snowfall ratio fills everywhere else.

15 Color Schemes

All Rain Viewer color schemes (NEXRAD III, Universal Blue, TITAN, Dark Sky, Rainbow, and more), the discrete 5-dBZ stepped Datameteo Valerio scale contributed by Datameteo Educational, and the high-resolution Viper HD palette by Ben Mitchell of WxTools, plus the MRMS CREF operational palette, the 33/40 Max Storm stepped palette, and a Windy-inspired palette by Gerrit Grunwald.

Multi-Worker Deployment

The data pipeline runs as its own service beside a pool of render workers that share state via memmap. Scales tile rendering across every core in the rack — no GIL bottleneck.

Memory Efficient

Radar frames, NWP grids, cloud, and nowcast data all use memory-mapped files. Smart fetch skips redundant downloads, saving ~90% of bandwidth per cycle.

Privacy First

Zero client logging. No IPs, user agents, or request details are recorded. You control the data.

No GDAL Required

Pure Python with numpy. No system geo libraries needed. Simple Docker deployment.

Free & Open Data

Radar data from this API is available under CC-BY-4.0. Free to use with attribution to LibreWXR.

MCP Server

Built-in Model Context Protocol server for AI agents and automation. Exposes precipitation nowcast, active-alerts, storm-cell, and lightning-strike tools over HTTP for n8n-style clients or stdio for local agents like Claude Desktop. Ships when the optional [mcp] extra is installed. See the MCP Server guide

Storm-Cell Detection

Convective cells detected on radar frames each cycle via connected-component labeling. Overlay them on tiles with ?cells=light|dark, parallel to the motion-arrows parameter. Each cell shows as a circle (sized by area) with a motion arrow showing storm direction and speed. See the Storm-Cell Detection guide.

Lightning Strikes

NOAA GOES GLM total-lightning flash points (GOES-East + GOES-West), fetched on their own 5-minute loop. Overlay them on radar tiles with ?lightning=dots or ?lightning=bolts — each frame shows the strikes that happened during its own 10-minute window, so timeline playback replays the storm. Also served as GeoJSON at /v2/lightning and through the MCP get_recent_lightning tool. US public domain.

Live Push Updates

An additive WebSocket channel at /v2/ws pushes the weather-maps catalog, weather alerts, storm cells, and lightning strikes the moment they change — no polling required. Lightning arrives as a snapshot plus a live delta stream, and the HTTP API stays fully Rain Viewer-compatible. On by default, and used by the bundled examples with automatic polling fallback.

Quick Start

Deploy your own instance with Docker in about a minute:

git clone https://github.com/JoshuaKimsey/LibreWXR.git
cd LibreWXR
cp .env.example .env
docker compose pull
docker compose up -d

The published image (ghcr.io/joshuakimsey/librewxr) runs a data-pipeline service beside a pool of render workers that share state via memory-mapped files. Tile rendering scales across every core with no GIL bottleneck. The defaults — 16 render workers, with 12 GB pipeline and 18 GB renderer memory caps — target a multi-core host; set LIBREWXR_WORKERS and the compose memory limits in .env for a smaller box.

Building from a checkout instead: docker compose up -d --build.

Either way, the server starts serving tiles immediately and historical frames backfill in the background.

Older COMPOSE_PROFILES=single deployments keep working as a compatibility alias (1 render worker, legacy cache defaults).

Using the API

LibreWXR exposes a Rain Viewer v2 compatible API, plus a few extensions of its own (weather alerts, lightning strikes, motion arrows, live push updates over WebSocket, an MCP server for AI agents). Point any Rain Viewer client at your instance:

# Metadata endpoint (timestamps + tile paths)
GET https://api.librewxr.net/public/weather-maps.json

# Radar tile
GET https://api.librewxr.net/v2/radar/{timestamp}/{size}/{z}/{x}/{y}/{color}/{smooth}_{snow}.png

# Satellite tile (NOAA GMGSI VIS-over-LW composite)
GET https://api.librewxr.net/v2/satellite/{timestamp}/{size}/{z}/{x}/{y}/0/0_0.png

# Weather alerts (GeoJSON FeatureCollection — global by default, lat+lon, or bbox)
GET https://api.librewxr.net/v2/alerts
GET https://api.librewxr.net/v2/alerts?lat=39.7&lon=-104.9
GET https://api.librewxr.net/v2/alerts?bbox=-95,30,-90,35

# Lightning strikes (GeoJSON FeatureCollection — full window, lat+lon+radius, or bbox)
GET https://api.librewxr.net/v2/lightning
GET https://api.librewxr.net/v2/lightning?lat=39.7&lon=-104.9
GET https://api.librewxr.net/v2/lightning?bbox=-95,30,-90,35

# WebSocket push channel (live updates -- topics: weather-maps, alerts, storm-cells, lightning)
WS wss://api.librewxr.net/v2/ws?topics=weather-maps

# Health check
GET https://api.librewxr.net/health

# MCP server endpoint (Model Context Protocol -- AI agents, JSON-RPC over HTTP)
POST https://api.librewxr.net/mcp/

For Leaflet, the tile URL pattern is:

# Radar tiles
https://api.librewxr.net/v2/radar/{timestamp}/256/{z}/{x}/{y}/10/1_1.png

# With motion arrows (light for dark maps, dark for light maps)
https://api.librewxr.net/v2/radar/{timestamp}/256/{z}/{x}/{y}/10/1_1.png?arrows=light

# With storm-cell overlay (detected cells + motion arrows at each centroid)
https://api.librewxr.net/v2/radar/{timestamp}/256/{z}/{x}/{y}/10/1_1.png?cells=light

# With lightning strikes (dots or bolt glyphs, drawn on the frame they happened in)
https://api.librewxr.net/v2/radar/{timestamp}/256/{z}/{x}/{y}/10/1_1.png?lightning=dots

# Combined: motion arrows + storm cells
https://api.librewxr.net/v2/radar/{timestamp}/256/{z}/{x}/{y}/10/1_1.png?arrows=light&cells=light

# Satellite tiles (timestamps from satellite.infrared in metadata)
https://api.librewxr.net/v2/satellite/{timestamp}/256/{z}/{x}/{y}/0/0_0.png

See the full documentation for a web integration guide, configuration reference, and Rain Viewer migration instructions. Try the interactive examples to see LibreWXR in action, or browse the source on GitHub.

Data Sources

Radar composites:

Regional NWP models (layered ahead of the global ECMWF IFS model layer):

Global observed layer (always-on):

Global model layer:

Satellite imagery:

Weather alerts:

Lightning:

All data sources are freely available from government-funded institutions. ECMWF IFS data is provided by Open-Meteo under the CC-BY-4.0 license.

Data Licensing

API Data (CC-BY-4.0, with one carve-out) — Radar data, satellite tiles, and all other data served by the public LibreWXR API at api.librewxr.net is available under the Creative Commons Attribution 4.0 International (CC-BY-4.0) license. You are free to use, share, and adapt this data for any purpose, including commercial use, provided you give appropriate credit to LibreWXR. The underlying data from government agencies (NCEP MRMS, IEM, ECCC, EUMETNET OPERA, MARN/SNET El Salvador, CWA Taiwan, JMA Japan, MET Malaysia, PAGASA Philippines, NOAA RRQPE, ECMWF IFS, NOAA GMGSI, NOAA GOES GLM) is public domain or freely available under their respective terms — the CC-BY-4.0 license applies to the aggregated composite data as served by this API instance, not to the original government data.

Italy (ITCOMP region only) is the exception: tiles that include native Italian radar data from DPC inherit the upstream CC-BY-SA 4.0 share-alike obligation. If you redistribute or build derivative works from DPC-derived tiles, you must do so under the same CC-BY-SA 4.0 terms and credit "Radar-DPC" as the data source. This is the only source in the LibreWXR stack with a share-alike clause; every other layer is permissive.

Software (AGPL-3.0-or-later) — The LibreWXR software itself is licensed under AGPL-3.0-or-later. If you modify and host LibreWXR, you must make your source code changes available under the same terms.

Self-Hosted Instances — You may choose your own data licensing terms for data served by your own LibreWXR instance. The AGPL-3.0-or-later license for the software applies regardless.

Open Source

LibreWXR is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). Contributions are welcome on GitHub.

Powered by LibreWXR

Built something on the LibreWXR API? Join the Discussion to get listed.