Why this project exists
Free flight has shaped my aviation career, and this is a landmark project within it. Windgram turns the work of understanding model output into something I can give back: an open pipeline and library that clubs, pilots, and other publishers can inspect, adapt, and run for themselves.
Windgram produces versioned profile documents and renders them. A downstream application decides where, when, and for whom those documents are presented. acrophobia.ca was the first downstream publisher and applies its own access and presentation choices.
The open-pipeline bet
Windgram publishes shareable inputs, makes derivations executable, versions the resulting document, and lets more than one frontend draw it. Readers can check the number behind a mark, compare a profile with its archived run, and build another presentation from the same science.
An acknowledged lineage
This work descends from canadarasp. canadarasp ran this kind of publication for years and kept its operations open enough for this project to learn from; the first derivations here were faithful ports of its constants. That is a debt worth naming. The jobs and architectures now differ: canadarasp draws national maps from a standing server, while Windgram derives site columns, publishes portable documents, and supplies a reusable renderer.
Portable state
Portable documents keep renderer decisions reversible. The prototype stored display units, pre-smoothed height series, a Pacific daylight window, and thresholds that belonged to one chart.
The current contract inverts those defaults: SI values, unsmoothed derived series, every forecast
hour, published source fields, slugs as identity, declared field semantics, and a schemaVersion on
every document. Presentation choices—timezone, window, palette, smoothing, overlays, and interaction—
belong to the renderer or the downstream application.
Authority across the document boundary
Every published quantity has exactly one authority — the pipeline or the package, never both. Authority by quantity in the documentation overview is that split’s home; the figure below shows where each value lives.
Authority across the document boundary
The pipeline publishes authoritative values; the package derives views and projections from the document.
The pipeline derives stored quantities that need provider inputs or cross-run authority. The npm package derives pure functions, typed statements, and a parameterized usable-lift projection from the published document.
The versioned JSON between the pipeline and package carries model and site identity, times, units, declared provider semantics, source fields, and pipeline-derived values. The model catalogue states what each model can and cannot publish. Missing capability remains an honest absence, not a zero invented by a frontend.
Publishing
The pipeline fetches provider data, derives profiles, and publishes static artifacts. The package validates those artifacts and turns them into a scene or SVG. Club sites, personal publishers, and other downstream applications choose their schedule, hosting, location catalogue, access, retention, alerts, and presentation.
The documentation overview maps these responsibilities. Executable authority lives in
pipeline/src/windgram/derive.py for
pipeline derivations,
toolkit/ for the
contract and renderer, and
models.json for the model
catalogue.