Installation
nwp-compose installs entirely in user space. There is no system package, no service, and no
elevated step. If you can git clone and write to a directory, you can install it.
Prerequisites
Section titled “Prerequisites”- Python 3.12+ — required by the pinned
cylc-flow(8.6.4). 3.12 is the floor; newer minors work. - git and a POSIX shell (bash/zsh). macOS and Linux are first-class; Windows users should use WSL.
No compiler, no root, no Docker daemon.
Install
Section titled “Install”-
Clone and run the idempotent setup script:
Terminal window git clone https://github.com/NCAR/nwp-compose.gitcd nwp-compose./setup.shsetup.shcreates a.venv/, installs the pinnedcylc-flow==8.6.4, and runspip install -e .so thenwp-composeconsole script is available on PATH inside the venv. -
Activate the environment:
Terminal window source .venv/bin/activate -
Confirm:
Terminal window cylc --version # → 8.6.4nwp-compose --help # → the CLI surfacenwp-compose doctor # → preflight: is this node ready to run?
Installing from NCAR Nexus (internal)
Section titled “Installing from NCAR Nexus (internal)”NCAR users on-network can pip install nwp-compose from the internal
Nexus package index instead of cloning — useful
for dropping the tool into an existing environment. This is the internal
distribution channel while the project is pre-release; it is NCAR-network only
(VPN off-site) and unreachable from cloud clusters (e.g. AWS ParallelCluster), where
you should use the git-clone + setup.sh path above.
-
Store your Nexus password once (needs the
keyringpackage):Terminal window pip install keyringkeyring set http://nexus.rap.ucar.edu:8081 "$USER" -
Point pip at the Nexus PyPI group in
~/.config/pip/pip.conf:[global]extra-index-url = http://<user>@nexus.rap.ucar.edu:8081/repository/pypi-all/simpletrusted-host = nexus.rap.ucar.edutimeout = 2[auth]keyring-provider = keyring -
Install into your activated environment:
Terminal window pip install nwp-composeThe
pypi-allgroup proxies public PyPI too, so this pullscylc-flowand every other dependency in one resolve. You still need a Cylc-capable environment to run workflows —pip install nwp-composegives you the CLI and the engine, but the model binaries (MPAS/WRF) are staged separately on your cluster.
Shared-filesystem and quota overrides
Section titled “Shared-filesystem and quota overrides”On HPC login nodes, $HOME is often small or on slow NFS, and a Cylc virtual environment is
200–400 MB. nwp-compose honors environment overrides so state never has to live where it would
bust a quota. Set these before setup.sh / your first run:
| Override | Redirects | Default |
|---|---|---|
NWPC_VENV_DIR |
the .venv/ location |
<repo>/.venv |
XDG_CACHE_HOME |
the gist/HTTP cache | ~/.cache/nwp-compose |
XDG_DATA_HOME |
the plugin component dir | ~/.local/share/nwp-compose |
CYLC_RUN_DIR |
where Cylc writes run dirs | ~/cylc-run |
# Example: keep everything on scratch, off a quota-limited homeexport NWPC_VENV_DIR=/scratch/$USER/nwpc/venvexport XDG_CACHE_HOME=/scratch/$USER/.cacheexport CYLC_RUN_DIR=/scratch/$USER/cylc-run./setup.shWhy Cylc is pinned
Section titled “Why Cylc is pinned”cylc-flow==8.6.4 is pinned for reproducibility. Newer 8.x versions are likely fine, but Cylc has
had behavioral shifts between minors, so bumping the pin is a reviewed change, not an automatic
upgrade. (Jinja2 is correspondingly pinned <3.2 to match Cylc’s own constraint.)
- Quick start — generate and run a forecast in five commands.
- Tutorial: your first forecast — the guided version.

