BowEcho: A Fast, Free, Native NEXRAD Level II Radar Viewer
BowEcho is a high-performance radar viewer designed to provide real-time access to super-resolution NEXRAD Level II data. It offers a seamless experience for analyzing weather patterns, tracking severe storms, and conducting detailed meteorological research.
Key Features:
Super-Resolution Display: Renders radar data at native resolution using a fast CPU rasterizer, preserving pixel-level detail.
Dealiased Velocity Processing: Reduces signal aliasing to provide more accurate velocity measurements.
Dual-Polarization Support: Displays dual-polarization products like ZDR and CC for enhanced storm analysis.
Derived Products: Includes severe weather indicators such as VIL, Echo Tops, and Storm-Relative Velocity.
Multi-Pane Sync: View multiple radar parameters simultaneously in a synchronized layout.
Vertical Cross-Sections: Create vertical slices through the storm to analyze structure and intensity.
Audience & Benefits:
Ideal for meteorologists, storm spotters, emergency responders, aviation professionals, and severe weather enthusiasts. BowEcho delivers real-time radar data directly from public AWS sources without requiring accounts or API keys. Its small footprint and Rust-based architecture ensure rapid performance, making it an invaluable tool for quick decision-making during critical weather events.
Install BowEcho via winget for a fast, dependency-free experience.
README
BowEcho
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.
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!ml or — the suffix 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 checksum so you can verify your download is
> byte-identical to what CI produced:
> (PowerShell) and compare. If
> Defender quarantines it, restore + add an exclusion, or report the false
> positive to Microsoft at
> — developer
> submissions of detections 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.
Trust and verification
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.
Compare 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.
Quick start (storm mode)
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).
Products
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.
Why it's fast
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.
Data & hazards
NEXRAD Level II from the public unidata-nexrad-level2 S3 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).
Build from source
git clone https://github.com/FahrenheitResearch/bowecho
cd bowecho
cargo run --release -p app_ui --bin bowecho
Rust stable (edition 2024). Debian/Ubuntu Linux builds need pkg-config libgtk-3-dev libgl1-mesa-dev libx11-dev libxi-dev libxkbcommon-dev.
Disclaimer
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.
Credits
Data sources
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.
Contributed work
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.
License
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.