Skip to main content

Logo forcingkit

Python Code style: ruff License: Apache 2.0

Animation of the HRRR 10 m wind from the NY Bight to Cape Cod, every 3 hours from 2026-09-22 00:00 to 2026-09-29 12:00 UTC
HRRR 10 m wind served by forcingkit through the 26-27 September 2026 nor'easter, NY Bight to Cape Cod, from the calm of 22 September to the calm of 29 September, every 3 hours (peak 25.9 m/s). The forcingkit viewer's time slider, played.

Spatiotemporal forcing for computational Earth-system models: selects, regrids and serves model-ready time series with provenance.

forcingkit sits between operational and archive data providers (NOAA HRRR, NECOFS, NOAA OFS, HYCOM, NDBC, CO-OPS) and model codes such as Oceananigans.jl. It delivers a model's parent ocean on true z levels (/api/v1/obc) and its HRRR surface atmosphere on a regular grid (/api/v1/atmosphere), plus station observations for validation, as schema-versioned Zarr stores that record their sources.

Documentation: https://forcingkit.docs.lhzn.io.

Goals

The primary goal of forcingkit is to provide clean, standardized ocean and atmospheric forcing boundaries for high-fidelity coastal hydrodynamic models. We achieve this by:

  • Operating as an invisible, self-managing proxy service that orchestrates downloading and caching of remote data.
  • Stripping away the quirks of individual forecasting nodes by harmonizing temporal alignment, grid structures, and variable naming conventions.
  • Generating deterministic cache hashes to ensure simulation runs are 100% physically reproducible over time.

Features

  • Decoupled System Architecture: The microservice guarantees reproducible datasets by deterministic hashing, providing standardized local representations of external APIs.
  • Continuous Coupled Hindcasts: Support for 45-to-60-day continuous hindcasts by dynamically stitching historical and operational HYCOM experiments.
  • Temporal Alignment: Automated CF-compliant hourly interpolation across heterogeneous upstream timestamps and grid frequencies.

Current Coverage

  • Oceanic Forcing: NYOFS, NECOFS, DBOFS, HYCOM (global, 1994 to present).
  • Atmospheric Forcing: HRRR (3 km, hourly, 2014-07-30 to present), regridded to 0.03 degrees.

Roadmap

  • Coverage first: a second global parent (Copernicus GLO12, GLORYS12 for 1993 on, NOAA RTOFS), the remaining NOAA forecast systems (West Coast, Gulf, Chesapeake, Great Lakes, Alaska), the Doppio reanalysis for 2007 to 2024 in the Northeast, HRRR Alaska and ECMWF IFS for the atmosphere, and a first European ocean source from Copernicus Marine (IBI or the North West Shelf).
  • Resolution second: the NYOFS fine grid, the Monterey Bay nests of WCOFS, and SFBOFS inside San Francisco Bay.
  • NYOFS and DBOFS as z-v3 parents: both on true depths with geographic axes.
  • Forecast mode and cache policy: HRRR forecast cycles, and invalidation of forecast-built stores when a newer cycle is published.

The full list, with what each candidate offers, is at https://forcingkit.docs.lhzn.io/roadmap.html. Contributions are welcome; see CONTRIBUTING.md.

Architecture overview

The service exposes HTTP APIs (via FastAPI/Uvicorn) which:

  1. Deterministically hash bounding boxes and time windows to generate an automated local Zarr cache (~/.cache/forcingkit).
  2. Dispatch fetch operations via tiered fallback chains for high-availability. (e.g. DBOFS or NYOFS -> NECOFS -> HYCOM for the parent ocean).
  3. Standardize dimensions, bounds, floating-point precision, and timezone offsets, providing a direct ingestion path for downstream coupled engines.

Setup

uv sync
pre-commit install

# Development (single worker, run from the repository root):
uv run uvicorn service.forcingkit_serve.main:app --port 9598

# Service launcher (supports --host/--port/--workers/--reload):
uv run python service/run_server.py --host 0.0.0.0 --port 9598 --workers 4

Docker Environment

The Dockerfile defaults to ubuntu:24.04, which is multi-arch. This service is CPU-only, so the default works unchanged on x86_64 and on arm64 edge hardware; BASE_IMAGE exists for cases that need a different base.

# x86_64 and arm64 alike (default)
docker build -t forcingkit .

docker run --rm -p 9598:9598 forcingkit

On NVIDIA Jetson under JetPack 7 (L4T R39, Ubuntu 24.04), keep the default base. An earlier revision of this file recommended --build-arg BASE_IMAGE=nvcr.io/nvidia/l4t-base:r36.2.0; that was wrong on two counts. The l4t-* image family was never published beyond r36.4.0 (JetPack 6.1), so there is no R39 equivalent to move to, and this service needs no CUDA in the image regardless. Where a CUDA base genuinely is required, the JetPack 7 path is the unified nvcr.io/nvidia/cuda:<ver>-*-ubuntu24.04 images, which carry real arm64 manifests, combined with CDI device injection (--device nvidia.com/gpu=all). Note that --gpus all is rejected on Tegra.

Licensing

This project is licensed under the Apache 2.0 License.

Metadata

Release files for forcingkit 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for forcingkit 0.7.0
File Size Uploaded
forcingkit-0.7.0.tar.gz 6.0 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for forcingkit 0.7.0
File Interpreter ABI Platform
forcingkit-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 6.1 MB

Release files / forcingkit-0.7.0.tar.gz

Download URL forcingkit-0.7.0.tar.gz
Size 6.0 MB
Tags Source
SHA-256 checksum
How to use checksums
0856ae0feb8e9aa3791d829af2edd4277a282edadad4c10a41ac4bac2d9b877e
BLAKE2b-256 checksum
How to use checksums
0d5feaaa3c6e9b71e57aef1c9ae37501aae023cb1e2011499cc0c258269862a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / forcingkit-0.7.0-py3-none-any.whl

Download URL forcingkit-0.7.0-py3-none-any.whl
Size 109.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
00c26a70a1e248e1a0b09dbc7faaa49a7a5bc0261b05f9f1e4920eb4d537ff0d
BLAKE2b-256 checksum
How to use checksums
60e2cf36d7bddd6b83b9a167f435da0938bcc346879e2741c2d2d6b4666ac187
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page