A fast, free, native NEXRAD Level II radar viewer.
Live super-resolution base data, dealiased velocity, dual-pol, derived severe-weather
products, synced multi-pane, and vertical cross-sections — in a single small download.
BowEcho decodes raw NEXRAD Level II data straight from the public AWS archive and live chunk feed (no account, no API key) and renders it with a fast CPU rasterizer that preserves the native super-resolution pixel pattern. It is built in Rust for speed: products switch instantly, panning stays fluid, and first pixels from a fresh volume arrive in well under a second on typical connections.
Grab the latest build from the Releases page:
| Platform | File |
|---|---|
| Windows x64 | bowecho-windows-x64.zip |
| Windows x64, CPU from ~2015+ | bowecho-windows-x64-v3.zip (AVX2: ~20-30% faster radar rendering) |
| Windows ARM64 | bowecho-windows-arm64.zip |
| macOS Apple Silicon | bowecho-macos-apple-silicon.zip |
| macOS Intel | bowecho-macos-intel.zip |
| Linux x64 | bowecho-linux-x64.tar.gz |
| Linux ARM64 | bowecho-linux-arm64.tar.gz |
Windows: download the ZIP, extract it, and run bowecho.exe. The executable
is fully self-contained (no installer or runtime dependencies); the archive
keeps the README and license/attribution notices beside it. The release also
publishes a byte-identical architecture-specific .exe because that exact name
is part of the in-app updater contract. Windows builds are Authenticode-signed
when the release job has the Azure Trusted Signing credentials; otherwise they
are explicitly unsigned and SmartScreen may show "Windows protected your PC"
the first time. Check the signature and matching checksum as described below.
Antivirus false positives. Windows Defender's machine-learning heuristics sometimes flag new, unsigned Rust executables with names like
Trojan:Script/Sabsik.fl.A!mlorWacatac.B!ml— the!mlsuffix means "ML guess", not a matched virus signature, and it's a well-known false positive for freshly compiled open-source binaries. Every BowEcho release is built by GitHub Actions directly from the tagged source in this repository (the full build log is public under the Actions tab), and each asset ships with a.sha256checksum so you can verify your download is byte-identical to what CI produced:Get-FileHash bowecho-windows-x64.zip(PowerShell) and compare. If Defender quarantines it, restore + add an exclusion, or report the false positive to Microsoft at https://www.microsoft.com/en-us/wdsi/filesubmission — developer submissions of!mldetections are typically cleared within days. You can always audit and build from source instead (see below).
macOS: unzip and open BowEcho.app. Tagged release apps are required to be
signed, notarized, stapled, and validated; a tagged build fails instead of
publishing an unsigned Mac archive. Manually dispatched test artifacts are not
that release guarantee. If Gatekeeper still shows a first-run warning after a
manual download, right-click the app and choose Open once (or run
xattr -d com.apple.quarantine BowEcho.app in Terminal).
Linux: extract the tarball and run its bowecho executable, for example
tar -xzf bowecho-linux-x64.tar.gz && ./bowecho-linux-x64/bowecho (needs
X11/Wayland, OpenGL, and GTK 3.24; these are standard on most desktop
distributions). The README and complete release notices stay in that directory.
BowEcho releases are produced by GitHub Actions from the exact tagged source in
this repository. Each downloadable asset is published with a .sha256 file so
users can verify that a local download matches the CI-built artifact.
Get-FileHash .\bowecho-windows-x64.zip -Algorithm SHA256Compare the hash with the matching .sha256 file on the release page. For
signing status, false-positive guidance, and responsible disclosure, see
docs/SIGNING.md and SECURITY.md.
The docs/ tree also preserves curated AI-assisted engineering records:
design rationale, literature checks, adversarial verification notes, and
handoffs. See
docs/ai-assisted-engineering-process.md
for what is intentionally kept public and
docs/public-docs-hygiene.md for the publication
checklist.
- Launch BowEcho. Pick a radar site from the sidebar (or right-click any site marker on the map) — the latest volume loads automatically.
- The LIVE chip means auto-refresh is on; new volumes stream in as the radar scans. ARCHIVE/STALE chips tell you when you're not looking at current data.
- Arrow keys: ←/→ cycle products, ↑/↓ change tilt. Scroll to zoom, drag to pan.
- Quad view: sidebar → Layout 4 for synced REF / VEL / CC / ZDR. Click any pane to focus it (blue border), then the sidebar or arrow keys retune that pane — its own product and a pinned tilt. The main (top-left) pane drives everything that isn't pinned.
- Inspector: hover for the data card (value, range/azimuth, beam height, Vrot). Shift+click pins it to a spot — it sticks through pan/zoom and updates every volume. Velocity products draw an inbound/outbound arrow.
- Cross-section: tick Cross-section in the sidebar, click two points, and a vertical slice (RHI) renders below the map — reflectivity, or dealiased velocity when a velocity product is selected.
- Declutter: Hide below applies a render-time threshold (on velocity it clamps |v|, so couplets pop while the noise around zero disappears).
Base / dual-pol: Reflectivity, Velocity (with region-based dealiasing),
Storm-relative velocity, Spectrum Width, ZDR, CC (ρhv), PHI, KDP — each with a
purpose-built color table (plus GR2-style presets, user-imported .pal
tables, and a colorblind-safe velocity option).
Derived: Composite Reflectivity, Echo Tops, VIL, VIL Density, Azimuthal Shear (LLSD rotation), Radial Divergence — computed volume-locally in tens of milliseconds and selectable like any product.
Models workspace: a plot-first local/remote workflow turns supported Rusty Weather and imported stores into arbitrary geographic-domain maps, soundings and profiles, point time series, exact native-index windows, selected pressure-level windows, and capability-declared temporal/diurnal products. Typed ensemble statistics are shown only when the exact run/hour publishes them; BowEcho does not infer members or missing products. Every remote result keeps its signed model, run, valid-time, grid, query, recipe, provenance, and attribution identity through the map, native plot, and local cache paths.
Model analysis: Windows > Formula Lab opens a first-class dockable
workspace for safe custom diagnostics. Its stored-model source follows the
same model/run/time selection as Models; compatible quick starts and the field
browser use the variables actually present in that timestep, so the workflow
is not tied to WRF or one download profile. A raw WRF source additionally
unlocks grid-aware horizontal and vertical calculus. Normal extensionless
wrfout_* names from every domain are accepted. Results enter the shared
Models viewer, radar-map layer, and native plot workflow with an automatic
color scale spanning the finite output range; an exact saved color binding
takes precedence when one exists.
Community Cache (opt-in): BowEcho can use signed, content-addressed Rusty Weather query objects from a bounded local cache, an optional R2 hot-object endpoint, and a configured HTTPS origin. Operational requests always stay on local → R2 → Hetzner/Rusty Weather HTTPS. Separately opted-in cold historical profile and point objects (initially at most 64 KiB) may be recovered or seeded through an encrypted TURN-only Community Cache after local/R2 miss; larger products use archival HTTPS fallback. Direct peer connectivity is permanently excluded. Origin key rotation, expiry eviction, metered pause, quotas, cost stops, and the server kill switch all fail closed. See the Community Cache guide for the trust boundary, privacy model, eligible products, and configuration.
Private WRF and ArWen publication: owners can explicitly freeze and publish a rights-confirmed processed generation to a trusted Rusty Weather HTTPS origin. This is a separate, authenticated owner workflow, never an automatic share or peer transfer. See Owner generation publication for the confirmation, provenance, recovery, and revocation contract. BowEcho can recognize and process ArWen-generated wrfout data, but the released app does not embed or launch the ArWen simulation controller.
Scientific guides: the Formula Lab reference documents syntax, units, source capabilities, numerical operators, examples, resource limits, and provenance. The WRF simulated-radar guide covers recipes, moments, refresh behavior, dual-pol physics, CfRadial output, and current limitations. The SimSat guide covers WRF/HRRR inputs, products, atmosphere/cloud controls, caches, plotting, and its honest radiative-rendering boundaries. The WRF command-line guide covers deterministic inspect/render/watch/verify workflows for humans, automation agents, and GPUWM forecast runners. The radar command-line guide documents reproducible Level-II inspection, rendering, and receipt verification, while the satellite command-line guide covers native history catalog/fetch plus stored-run inspect/render/verify workflows.
Storm analysis: NSSL-style mesocyclone/TVS detection (Stumpf et al. 1998; Mitchell et al. 1998) with time-association (CPLT → MESO), SCIT storm cell tracks with motion extrapolation (Johnson et al. 1998), maximum expected hail size (Witt et al. 1998), live draggable cross-sections, and GRLevelX placefiles (icon sheets, Object blocks, auto-refresh). An experimental Vertical Wind Profile (VWP) retrieves winds from dealiased radial velocity in the loaded PPI volume and exposes its sampling and fit-quality diagnostics.
Velocity dealiasing offers four engines: optimized Region Global (the default Py-ART-style same-sweep network solve), opt-in RIFT (Region Global plus conservative gate-resolution refinement), Region Fast (the legacy/local same-tilt solver), and Analyst v4 (a higher-cost whole-volume solver with temporal and environmental anchors). Raw-velocity mode always carries a "folds possible" tag plus near-Nyquist warnings in the inspector. The algorithms and their references are documented in docs/products-guide.md.
Display: 1/2/4-pane synced grids with per-pane products and honest per-pane readouts, optional GR2-style smoothing (zero panning cost), and an azimuthal-equidistant projection so range and azimuth are true at every latitude.
- Native Rust, lean CPU rasterizer, full quality at every zoom.
- Parallel block-bzip decompression pipelined with parsing — first pixels in tens of milliseconds once data arrives.
- One bounded render worker serves every pane (no thread oversubscription), with keyed moment/sample caches shared across panes.
- View-pure geometry (basemap projection, hazard tessellation) is cached per view, so idle repaints cost almost nothing.
- Honest stage timings in the status bar: lookup, fetch, decode, render, texture, cache.
- NEXRAD Level II from the public
unidata-nexrad-level2S3 archive and the real-time chunk feed. No keys, no accounts, no middleman servers. - EUMETNET ORD archive days can be listed and loaded in bounded UTC-hour and 20-scan phases with visible progress and cancellation. The 20 objects exposed by MeteoGate are elevation coverages, not a 20-scan archive limit.
- Live Polish POLRAD dual-polarization CMAX grids from the IMGW-PIB public datastore: KDP, RHOHV, ZDR, and PHIDP where each site publishes them. These are two-dimensional maximum-projection layers, not polar volumes; they do not contain recoverable tilts or vertical storm structure.
- Live NWS warnings/advisories and SPC mesoscale discussions overlay as clickable polygons with product-aware fills.
- Multi-radar overlays: load neighboring sites on the same map with independent refresh, opacity, and visibility.
- Mobile/research radars: open DOW, COW, and RaXPol data natively — DORADE sweepfiles and deployment zips decode straight to the map (transition-ray filtering, staggered-PRT Nyquist, CFAC corrections), and a GR2A-style polling URL follows field feeds live. When a FARM facility radar is deployed and plotting, BowEcho lights a LIVE chip and plays the quicklook loop (quicklooks courtesy of the FARM facility).
git clone https://github.com/FahrenheitResearch/bowecho
cd bowecho
cargo run --release -p app_ui --bin bowechoRust stable (edition 2024). Debian/Ubuntu Linux builds need pkg-config libgtk-3-dev libgl1-mesa-dev libx11-dev libxi-dev libxkbcommon-dev.
BowEcho is an enthusiast/analyst tool, not a warning service. Never use it as a substitute for official National Weather Service warnings and guidance. During severe weather, follow your local NWS office and emergency management.
- NOAA / National Weather Service — NEXRAD Level II radar, MRMS, GOES imagery and GLM lightning, and SPC/WPC forecast products.
- EUMETNET OPERA and the participating national meteorological services — European weather radar via the OPERA Development Radar Data (ORD) service, including Spain's AEMET radar network (opened through ORD in June 2026). ORD radar data is licensed CC BY 4.0; BowEcho displays it with attribution to OPERA and the originating national services.
- IMGW-PIB POLRAD — Polish dual-polarization CMAX grids from the IMGW-PIB public datastore, under the published reuse terms. Required source notice: “Źródłem pochodzenia danych jest Instytut Meteorologii i Gospodarki Wodnej – Państwowy Instytut Badawczy”. For processed IMGW-derived output: “Dane Instytutu Meteorologii i Gospodarki Wodnej – Państwowego Instytutu Badawczego zostały przetworzone”.
- National open-data radar feeds: SMHI (Sweden), FMI (Finland), DWD (Germany), DMI (Denmark), CHMI (Czechia), SHMÚ (Slovakia), GeoSphere Austria, the Estonian Environment Agency, Romania's ANM (Data: Administrația Națională de Meteorologie (ANM) România), JMA (Japan — radar and Himawari satellite), Italy's Dipartimento della Protezione Civile with the ARPA Piemonte and ARPA Lombardia regional services, Taiwan's Central Weather Administration, and Australia's Bureau of Meteorology (via NCI).
- Crowd-sourced weather reports from mPING (NOAA National Severe Storms Laboratory / University of Oklahoma). Convective outlooks from ESTOFEX.
- U.S. Census Bureau cartographic boundary data: 2024 state/county boundaries and the 2023 1:500,000 place-boundary set used for embedded U.S. map geometry and town labels.
- Natural Earth public-domain country, regional administrative, and populated-place data used by the embedded global basemap.
- Annotation graphics vocabulary contributed by GBW Overlay — grayskieswx (YouTube). The map annotation tools' front glyphs, hatch fills, warning-polygon styling, and icon designs reimplement his renderer's geometry in Rust, shared by the author for this purpose.
- Research-radar color tables ("research" badge in the pickers) from GURT V3 — the Graphic Utility Radar Toolkit by ambient330 (Graphic-Utility-Radar-Toolkit-V3, MIT license), used with appreciation. The GURT reflectivity, velocity, spectrum width, CC, ZDR, and KDP ramps are ported value-for-value, tuned for DOW/COW mobile-radar (X-band) work.
Dual-licensed under MIT or Apache-2.0, at your option. License and attribution notices for derived and embedded third-party work (including SHARPpy, the sounding-window port, Py-ART-derived dealiasing, fonts, and basemap data) are collected in THIRD-PARTY-NOTICES.md.
