Publish the weather for your launches.

Open-source packages that turn weather-model output into soaring forecasts and show live wind from your launch. You run them, and your pilots read the results on your site.

The station component, playing a synthetic test season.
One convective day from a committed test scenario, drawn from its published heights. The full Meteogram of the same day is further down the page.

From the providers to your page

The forecast engine turns ECCC and NOAA model files into JSON forecasts on static hosting you control. Station adapters combine the weather stations at your launches into one live feed.

From providers and stations to your pageForecast row: ECCC and NOAA model files feed the forecast engine, which publishes public JSON at stable paths. Station row: WindNerd, Tempest, and Campbell stations pass through vendor adapters into one documented contract, and a feed handler you mount serves them. The @azohra packages draw both on your own site or app, as Meteograms and live station displays.Forecast: model providers to open dataStation: weather stations to one feedECCC · NOAAHRDPS · RDPS · GDPSHRRR · GFS · NAMprovider model fieldsForecast enginemeteo forecast buildsamples each catalogued site,derives soaring quantitiespublishesPublished JSONstorage you controlpublic JSON at stable pathsversioned schema · append-only historyWeather stationsWindNerd · TempestCampbell · your ownany hardwareVendor adaptersone documented contractnormalized readings and history;outages report a reasonservesYour station feedcreateStationFeedHandlerGET /api/wind/feedthe whole fleet, one documentYour site or apppnpm add @azohra/*▸ Meteogram · scene → SVG▸ Station · live componentsyour palette, thresholds, policy

@azohra/meteo.briefing

Read what kind of day it is

The package reads a published forecast and returns typed findings about the day. The Meteogram draws the same forecast as a chart. Toggle a layer to see what it adds.

analyze
Thermal window, cap timing, wind exceedance
compare
Where models agree and diverge over one launch
history
How a model's successive runs converge
meteogram
Wind, stability, moisture, and the heights that limit a climb, hour by hour

A fair-weather convective day

A complete fair-weather convective cycle. This Meteogram shows one atmospheric profile in Etc/UTC. Morning stability gives way to a deep midday unstable column. The boundary layer, usable lift, and cloud base follow distinct arcs beneath light wind that veers gently and gains only a few km/h with height.

Pressure kPa 90.3 90 Precip mm/h 0.5 0 Cloud % 100 0 H M L Layers % w* m/s 3 0 CAPE J/kg 1500 0 900m 2953ft 1604m 5262ft 2308m 7572ft 3012m 9882ft 3716m 12192ft 4420m 14501ft 10 11 12 13 14 15 16 17 18 19 7° 9° 11° 16° 23° 25° 24° 17° 13° 9° launch 1050 m G7 G9 G11 G14 G18 G22 G20 G16 G11 G9 0° 10° 20°
Usable lift Cloud base Boundary layer Model boundary layer 0 °C Condensation LAPSE RATEVery unstableUnstableConditional strongConditionalNear neutralStableInvertedStrong inversion-3-2.5-2-1.5-1.200.5UnstableConditional instabilityStableInverted
The boundary-layer top, cloud base, and usable-lift top follow different paths because each measures a different limit.Units Altitude m MSL and ft MSL; wind barbs in km/h; surface strips as labelled

@azohra/meteo.station

Live wind from the launch's weather station

Adapters translate each vendor's station data into one documented contract. The components draw those readings directly on your page, without a vendor iframe.

mount
<meteo-station-card station-id="launch-ridge"> is the element your page mounts
bindings
Framework-free custom elements. The React binding renders the same DOM.
thresholds
{"unit":"kmh","values":[12,20,28]} sets this card's wind bands on the feed

@azohra/meteo.forecast

Publish forecasts anyone can read

meteo forecast build fetches each model's newest run, derives the soaring values, and writes static JSON to stable paths. Every document carries a schemaVersion, and any HTTP client can read it, curl included. You run the pipeline around it, with your own schedule, storage bucket, and credentials.

publish, then read it back · meteo.azohra.com/data-sample

# your sites.json in, derived forecasts out, on your schedule
$ meteo forecast build
# one site, one model, every forecast hour + derived quantities
$ curl -sS \
    https://meteo.azohra.com/data-sample/hrdps-continental/sites/test-hill.json \
    | jq '.hours[] | {validAt} + .derived'
# the stable paths, under any operator's root
<root>/models.json
<root>/<model>/manifest.json
<root>/<model>/sites/<slug>.json

Built for free flight

Clubs and pilots can publish their own forecasts and station pages with open tools they can inspect and reuse.

Made with love by Justin Watts.

0.x · one maintainer · learning in public