Skip to content

Forecast: engine and CLI

@azohra/meteo.forecast is the forecast engine. It downloads provider data from ECCC and NOAA, samples it at each launch in your site catalogue, derives soaring quantities, and publishes the results as versioned JSON documents. It also appends each run to gzip history archives with sidecar indexes. @azohra/meteo.briefing reads everything the engine publishes.

The engine reads three kinds of provider data: whole GRIB2 files from the ECCC Datamart, byte ranges of NOAA GRIB2 files located through their .idx indexes, and NetCDF files from NOAA’s object store. GRIB2 decoding goes through @azohra/meteo.grib.

The package needs Node 22 or later. It ships the meteo binary, whose commands take the form meteo <capability> <command>:

Terminal window
pnpm add @azohra/meteo.forecast
pnpm exec meteo forecast build --model hrrr-conus --sites ./sites.json --output ./public/data --dry-run
pnpm exec meteo forecast terrain --sites ./sites.json

In a checkout of this repository, run mise run //forecast:build first, then use node forecast/dist/cli.js forecast ... in place of pnpm exec meteo.

Each build downloads real provider data. The feed reference records each model’s transport and how much it transfers. Schedule a model’s build no more often than that model publishes a new run.

This package is the engine. The project runs no production instance. An operator runs their own instance from a repository of their own, which holds the build schedule, the site catalogue, and the storage bucket with its credentials. The reference operator’s pipeline is azohra/acrophobia-forecasts.

Every instance publishes the same document shapes at the same paths, so anything built with @azohra/meteo.briefing works against any of them.

Read these pages in order to go from nothing to a scheduled, published forecast:

StepPageWhat you do
1Configure launchesWrite the site catalogue the engine builds forecasts for
2Choose modelsPick models by spatial resolution and schedule, and find the slug --model takes
3Run one modelRun a first build for one model and your launches
4Environment and credentialsSet the environment variables the engine reads: the published root, S3 credentials, host overrides
5Schedule buildsRebuild each model when its provider publishes a new run
6Tune the wireRead the transport report every build prints and decide whether to change connections or hosts
7Publish static outputCopy manifests and forecast documents to storage you control and serve them publicly, privately, or behind a membership gate
PageCovers
Forecast architectureHow provider data becomes published documents, module by module
Meteogram derivationsThe equations, constants, and fallbacks behind each published derived quantity
The mountain the model seesWhy model terrain differs from the real launch, and what relief and land cover add
Model capabilitiesWhat each model’s fields mean, and which fields a model states it does not publish
Forecast model feedsDated provider facts: verified paths, schedules, fields, retention, transport, and licensing
Provider transportsHow the engine fetches whole ECCC files, NOAA byte ranges, and whole GOES granules
Builder contractThe eight invariants every builder must honour, for people writing builders