14. WW4: what's coming, and how mature it is

Short version: WW4 is real, it is a full ground-up rewrite in C++ (with Rust in parallel) rather than a new WW3 version, and as of October 2026 it is a driver skeleton with a test framework, a run-time configuration and placeholders for solvers and source terms, and no physics. Learn WW3. Watch WW4. Build your artefacts in the shape WW4's tests already have.

It exists

Office Note 525 is the single best thing to read if you want to understand where wave modelling is going. It is unusually candid: it publishes the disagreements inside the discussion group rather than papering over them. ON 528 closes Phase II.

Maturity: a snapshot

Checked against the repository on 2026-10-07 (v) (the previous snapshot, 2026-09-15, is in the right-hand column):

Signal 2026-10-07 2026-09-15
Default branch develop at 74ea792 develop at 12f363f
Commits on develop 39 37
Releases / tags none; VERSION reads 0.0.0 none; 0.0.0
Stars / forks / watchers 3 / 7 / 4 ⚠ 3 / 7 / 4
Open issues / open PRs 34 / 1 ⚠ 31 / 0
Last merge 2026-10-01, 74ea792, documentation style in ww4_utils 2026-09-15, 12f363f, "CMake-only compile system"
Top-level src/ tests/ tools/ templates/ externals/, plus AGENTS.md, ARCHITECTURE.md, INTENT.md same
src/ ww4_core/ (w4core_init, w4core_wave, w4core_finalize), ww4_utils/, ww4_progs/ww4_standalone.cpp same
tests/ GoogleTest; four declared levels, L1 and L2 present, L3 and L4 absent same

⚠ The star, issue and PR counts come from the repository's web page, whose commit counter read 36 on the same day; git rev-list --count develop is the number to trust. Reproduce the rest with:

git clone --filter=blob:none https://github.com/NOAA-EMC/WW4 && cd WW4
git rev-list --count develop; cat VERSION; git tag        # 39, 0.0.0, (nothing)
git log --format='%h %cs | %s' --since=2026-09-10 develop  # 12f363f, bdf3761, 74ea792
git fetch https://github.com/HendrikTolman-NOAA/WW4_HLT \
  FT-Runtime-Scheme-Selection-Design:factory               # the open factory branch
git grep -niI kokkos develop afc40c2                       # (nothing)

Thirty-nine commits, eleven months in, and no release. This is scaffolding and early core work, an init/wave/finalize driver with a standalone program around it, not a model you can run. Treat it as a project to follow, not a tool to adopt.

What has happened this year, in order (v): ca619d9 (merged 2026-07-22) brought the unit (L1) and integration (L2) tests to full coverage of the code that exists; an issue titled "CPU - GPU architecture" (opened 2026-07-15) proposed the CPU–GPU architecture, naming Kokkos as the data abstraction and MPI between nodes, and asked whether to keep one code base for CPU and GPU; f719269 (merged 2026-08-19) removed the Python dependence from the build; 12f363f (merged 2026-09-15) made the build CMake-only.

Since 2026-09-15 (v):

Around thirty open issues are design questions, not bugs.

⚠ Those numbers were true on one day. The 2026-09-15 snapshot itself was redrafted the same day, when the repository moved from 36 commits and 35 open issues to 37 and 31. Check them yourself before quoting them; that is exactly the kind of thing that goes stale fastest. Issue #49 in this repository records the 2026-10-07 check with its sources.

Why a new model rather than WW3 v8

The Phase I report lays out the drivers plainly:

The decision was a complete bottom-up rewrite in a new repository, explicitly modelled on how NOAA handled MOM6 (developed separately from MOM4 rather than as an increment). A new repo removes the obligation of backward compatibility and allows "house cleaning" of options that no longer have an owner.

Languages: the contentious part

The report says outright that language choice was the most contentious question, and that there is no community consensus. NOAA/NWS made the call as primary funder:

Language Role in WW4
C++ (likely with Kokkos) Initial core language. Conservative, proven, operational centres already have the workforce. Can be end-to-end.
Rust Named "the modern language of choice for WW4" by NOAA/NWS, for memory safety, fearless concurrency, and lower porting/O&M cost. Being built in parallel with C++.
Fortran Solver language only, plus a fast route to an initial operational capability. Also where unowned legacy options stay.
Python Scripting, workflow, data management, product generation, grid generation, graphics. Explicitly not a core or solver language: the report cites C++/Kokkos outperforming Python/GT4Py on GPUs.
Julia Considered and declined as a core language by NOAA/NWS: small user community, partial memory-safety benefit, workforce risk. Still permitted for non-operational solvers.

The chosen path is the "dual approach": build a C++ core to an operations-ready state in roughly two years, while incrementally building Rust alternatives; a Rust-cored WW4 for operations is a roughly five-year target. What the repository shows in October 2026 is consistent with that: the core is C++, and the "CPU - GPU architecture" issue proposed Kokkos. That issue is now closed without a written decision, and the code does not use Kokkos yet, so the "likely" in the table above is still a likely (v).

A design principle worth noting, because it's the thing that would let you contribute: WW4 is deliberately keeping a clean separation between core and solver code, with language bindings between them, so a contributor writing a new source-term parameterisation can do it in whichever language they're fluent in without learning the core language.

Yes, it is being written partly by AI agents

The WW4 repository contains an AGENTS.md describing "an agentic AI approach used to create, translate or refactor code using AI agents such as Copilot or Jules, the latter of which has been used extensively in developing the WW4 code from WW3." (v) The agent is also set up to enforce coding standards, generate doxygen documentation, and write unit tests, all of which are mandated for WW4.

Worth knowing, for two reasons. It's a large, visible, government-operational test of AI-assisted translation of scientific Fortran. And it means the provenance of any given line in WW4 is a live question you should keep in mind when reading it. Lesson 13 is this repo's own, much smaller, version of the same experiment, with the parity evidence versioned next to the code.

Timeline

From Office Note 525 (v), with the report's own caveat that timelines for a project like this are notoriously difficult, and a fourth column for what the repository actually shows:

Phase What When (ON 525) What happened (v)
I Initial choices complete (ON 525, Nov 2025) Done.
II Language test, governance setup, architecture design began 1 Oct 2025, 3–6 months Done: reported in NCEP Office Note 528 (2026).
III Core code development (EMC) open source, not yet open contribution In progress. src/ww4_core init/wave/finalize, ww4_standalone, the utils library, the L1/L2 test framework, the CMake-only build, the spectral-space configuration (bdf3761), and the run-time solver and source-term factory (open, afc40c2). The CPU–GPU architecture issue is closed without a recorded decision.
IV Initial Model Capability: single domain, CPU and GPU efficiency focus active community engagement expected summer/autumn 2026 Not visibly begun as of 2026-10-07: no physics, no data structure for the spectrum, no runnable single-domain model, no L3/L4 tests, no release. The first outside reviewers appeared on the factory branch's review. The date has slipped; nobody has said by how much.
V Initial Operational Capability, multi-domain
VI Complete first full code first public release hoped for summer 2027 First public release: expected January 2027 per the advisor communication behind this repo's proposal ⚠ no cited NOAA source; ON 525 said summer 2027, and the state of the repository makes January look ambitious: on 2026-10-07, three months before it, there is still no physics.

Those dates are for the C++ path. Rust may take up to five years.

What WW4's test levels mean for a WW3 port

WW4's tests/README.md declares a four-level strategy (v): L1 unit tests of single functions in isolation (L1_test_*), L2 integration tests of modules and their interfaces (L2_test_*), L3 functional tests of physics cases as a black box, and L4 regression tests of the full model. L1 and L2 exist, in GoogleTest, at full coverage of the code that exists; L3 and L4 do not yet, because there is no physics to test.

This repo copied that structure on purpose, and the proposal says why: do not compete with WW4; build artefacts in the shape WW4 can use. Until 14 October 2026 the W3SNL1 port in 12-porting-a-kernel-w3snl1.md came with L1_test_* GoogleTest suites that compared the Kokkos kernel against captured Fortran fixtures. The owner then ruled that the port has no tests of its own (ADR-0010): what is left is what this repo calls L2, in WW4's terms closer to L4: WW3's regtests rerun with the kernel on and off (scripts/ww3-gpu.sh --ww3-gpu --cpu, kokkos/tests/L2_replay.sh, the regtest matrix of regtests/, run by CTest) and the netCDF output judged with nccmp-tol. So an L1 suite for a kernel handed to WW4 would have to be written on WW4's side. The factory branch (afc40c2) already reserves the slot: src/ww4_core/source_terms/ww4_NL1/ and tests/ww4_core/L1_test_ww4_NL1.cpp, behind a calculate(std::span<double>) that has no notion yet of a batch of points, a device memory space or the precomputed tables ww_snl1_init builds; how that signature changes once WW4 has data structures decides whether a Kokkos kernel can be handed over without a copy. Its default spectral grid (36 directions, 50 frequencies, XFR 1.07) is also larger than the grids this repo has validated on, and the DIA kernel's level-0 scratch does not fit it on every GPU (kokkos/PORT_STATUS.md). When WW4 reaches the point of needing a DIA kernel and a way to prove it matches WW3, the regtest replays, the tolerances file and the parity report are the deliverables it can pick up, and if it never does, they are still the evidence the lab needs to put the kernel into operation. Either way the work is not wasted, which is the whole point of choosing the shape before choosing the kernel.

What this means for WW3: and for you

WW3 is not going away soon, but its end is now scheduled. The report is explicit: the cost of maintaining two models long-term will be mitigated by "formally sunsetting most support for WW3 once WW4 is mature, with a clearly communicated transition period." Code with no identified owner willing to port it stays in WW3 and is considered obsolete for WW4.

Practically:

One thing that must survive

The report singles out a property of WW3 that WW4 has to keep: full numerical convergence of its schemes, achieved through the limiter formulation of Tolman (2002b). Without it you cannot separate numerical error from physical error, which makes the model useless for science. It's a good reminder that "modernisation" has constraints that aren't about software at all.

→ 15-swan.md: the other model you should know.