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.
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.
@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.
@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- Configure your launchessites.json lists each launch. The engine fetches, derives, and publishes on your schedule.Read the reference
- Model cataloguemodels.json declares each model's grid, cadence, capabilities, and lifecycle, including what it does not publish.Read the reference
- Contract, schemas, and unitsEvery document has a published JSON Schema, so readers in any language can validate it. Values use SI units and declared semantics.Read the reference
- Forecast historyAppend-only monthly archives sit beside every current run, so you can compare a forecast with what was published earlier.Read the reference
@azohra/meteo.grib and @azohra/meteo.j2k
Read the provider bytes yourself
The engine reads provider files with two pure-TypeScript decoders. Each is published as its own package, and both match the reference codecs exactly.
pnpm add @azohra/meteo.gribGRIB2 in pure TypeScriptDecodes rotated lat-lon and Lambert grids, complex packing, and multi-field messages, with helpers for NOMADS .idx byte ranges. It exists because no maintained JavaScript decoder covered the grids ECCC and NOAA ship. Decoded values match ecCodes bit for bit.Read the @azohra/meteo.grib docspnpm add @azohra/meteo.j2kJPEG 2000 for ECCC's GRIB2Decodes the JPEG 2000 codestreams inside ECCC's GRIB2 files. It covers exactly the subset those feeds use, and anything outside it fails with a named error. Each step cites its clause of the standard. @azohra/meteo.grib uses it in production.Read the @azohra/meteo.j2k docs
Both decoders also run in the browser. See what the core never does.
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
ECCC-derived profiles retain the ECCC source attribution. NOAA products are public domain. Code is MIT licensed.