OpenFLUME (Open FLUid Model Environment) is a finite-volume thermo-fluid network simulator that runs entirely in the browser. Inspired by NASA GFSSP and SINDA/FLUINT, it solves coupled mass, momentum, and energy equations on arbitrary pipe-and-node networks using a Newton–Raphson steady solver and a backward-Euler transient solver.
Try it in your browser → — no install, no account, nothing leaves your machine.
A local-first engineering tool for modeling 1-D fluid flow networks. It pairs a visual node-and-branch editor with a self-contained TypeScript solver library. The solver runs in a browser worker; an optional local companion server serves the app and discovers component files.
It is a lumped-parameter code. With momentumFlux and kineticEnergy enabled, it extends the network model with quasi-1-D compressible-flow effects, supporting subsonic and seeded supersonic solutions as well as friction-, heat-, and area-driven choking. Shock capture, Rankine–Hugoniot jumps, and acoustic wave propagation are out of scope. See Limitations below.
| Area | Summary |
|---|---|
| Solvers | Newton–Raphson steady-state solver with convergence aids for difficult cases. Backward-Euler transient solver with fixed or adaptive time steps. |
| Components | 19 branch types: areaChange, bend, capillaryChannel, cavitatingVenturi, checkValve, customResistance, dpTable, dynamicCheckValve, flowSource, heatedPipe, orifice, pipe, pump, rectChannel, regulator, reliefValve, resistance, userComponent, valve. |
| Fluids | Incompressible, ideal gas, compressible liquid, and real fluid via CoolProp with a generated 124-fluid HEOS catalogue. |
| Conjugate heat transfer | Coupled fluid–solid thermal modeling with conduction, convection, and radiation, plus a sourced catalogue of temperature-dependent material properties. |
| Compressible flow | Opt-in quasi-1-D compressible flow for every fluid model, with stagnation-enthalpy transport and per-branch Mach-number calculations. |
| Two-phase | Transient homogeneous-equilibrium model (HEM) for real fluids, with Miropolskii film boiling for conjugate heat transfer. |
| Reacting flows | Transient multi-species flow with node-level Arrhenius kinetics and CEA-coupled combustion junctions. |
| Microfluidics | Rectangular microchannels with the exact laminar duct law, and capillary channels: Washburn filling with displaced-gas resistance, capillary pumps, stop/burst and trigger valves, and air-trap detection, with an event log. |
| Transient momentum | Optional fluid inertia (L/A)·dṁ/dt on pipe branches and trapped-gas cushions P·V_gⁿ = const on internal nodes. |
| Workflow | Visual network editing with subnetworks and notes, selection repeat and pipe splitting for line discretization, parameter sweeps, named variants, convergence diagnostics, provenance-tracked run history, .fn text files, and 14 built-in examples. |
| Extensibility | Custom pressure-drop tables, resistance models, embedded user components, stateful lifecycle registers, stop conditions, and transient PID control. |
Requires Node.js 22 (see .nvmrc) and npm ≥ 10.8.
git clone https://github.com/OpenFLUME/OpenFLUME.git
cd OpenFLUME
npm install
npm run dev # opens http://localhost:5173Then run something immediately:
- Open the Examples ▾ dropdown in the toolbar.
- Select "Sanity: orifice hand-calc" and click Run. It converges to a closed-form result you can check by hand.
- Select "Tank blowdown" — a transient ideal-gas tank venting through an orifice — and click Run to see time-history charts.
The user's manual walks through this in detail, and OpenFLUME is also usable as a library; see §5.5 Using the Core as a Library.
Note: the package is not yet published to npm, so library imports resolve from the source tree (
../src/core) rather than a package specifier.
The core is also available as a Python package that bundles its own Node.js runtime, so no JavaScript tooling is needed:
pip install openflumeimport openflume as of
result = of.load("feed_system.fn").solve() # a model saved from the web app
print(result.converged, result.node("tank")["pressure"])See Python package for the API, parallel sweeps, and the trust model.
npm test # fast pull-request tests
npm run check # typecheck + fast tests + production build
npm run test:all # all Vitest files (expensive opt-in blocks still skipped)
npm run test:e2e # full end-to-end suite against a production preview buildSee CONTRIBUTING.md for the full test tiers and the pull-request gate.
The user manual provides the complete reference for network definitions, units and sign conventions, data structures and fields, component equations, solution methods, the interface, fourteen worked examples, and verification results.
| Document | Covers |
|---|---|
| User's manual | Everything. Start here. |
| Architecture | System structure, worker-based solving, testing strategy, and simulation variants |
| Combustion | CEA-coupled reacting junctions and species transport |
| Python package | pip install openflume: Python API, CLI, sweeps, numpy/pandas output |
| User code | Embedded components, registers, logic, controllers |
| Parameter bindings | Formula-bound fields and convection correlations |
| Fluid catalogue | The 124-fluid HEOS catalogue |
| Solid properties | Material catalogue and validity ranges |
| Solver convergence | Diagnosing a solve that will not converge |
The full index is in [docs/README.md](docs/README.md).
Verification evidence is split into three deliberately distinct classes, and every case is labeled with which one it belongs to:
- Analytic verification — closed-form comparison, where a discrepancy is a code defect.
- Code-to-code benchmarking — agreement with GFSSP or SINDA/FLUINT, which inherits the other code's assumptions.
- Validation against experiment — comparison to digitized published test data.
Seven validation reports are regenerated from live solves, not transcribed:
| Report | Contents |
|---|---|
| Incompressible hydraulics | Hagen–Poiseuille, Darcy–Weisbach, parallel splits, Hardy-Cross loops, pump operating point |
| Compressible flow | Case-for-case recreation of the NASA GFSSP TFAWS-2007 verification paper |
| Thermal network | Composite walls, radiation–convection equilibrium, lumped cooldown, ε–NTU exchangers |
| Fluid transient | Rigid-column surge, gas-spring oscillation, polytropic compression |
| Tank transient | Choked blowdown, dt convergence, two-tank equalization, fill heating |
| Combustion | CEA identities, frozen c, injector and chamber balances, quasi-1-D nozzle, regen wall stack |
| Microfluidics | Rectangular-duct and capillary closures; six published microfluidic networks rebuilt from their papers |
Experimental validation uses digitized data from NBS Report 9264 cryogenic chilldown, Hord's cavitation series, and NASA tank-pressurization tests, with per-corpus trust levels stated explicitly — calibration-grade runs are separated from diagnostic-only runs that may not be quoted as agreement. See §8 Verification and Validation for the full record, tolerances, and the correlation status table.
Continuous integration reruns the complete scientific validation suite weekly.
OpenFLUME was written by one engineer with heavy AI assistance, over a short calendar period. That is unusual for a code of this kind, and it is precisely why the verification record above is structured the way it is: when generating plausible-looking code is cheap, evidence is the only thing that distinguishes a correct solver from a convincing one.
The project is built so that you do not have to take any of it on trust:
- Every validation report is regenerated from live solves by a script in
[scripts/](scripts/), not written by hand. - Every numerical claim states its reference, tolerance, units, and assumptions.
- Benchmarks run against published NASA GFSSP and SINDA/FLUINT cases and against digitized experimental data with cited provenance.
- Correlations that are not validated are labeled as not validated. See §8.5 Correlation Status.
- The full validation suite runs in CI weekly, not just at release.
Check it rather than trust it. If you find a case where OpenFLUME disagrees with a reference you trust, please open an issue — a well-documented disagreement, with its reference and tolerance, is the single most useful contribution this project can receive.
The main scope limitations are:
- No shock capture — no Rankine–Hugoniot jump condition, so shock position, over-expanded operation, and supersonic → subsonic transitions are out of scope. Thrust is not computed.
- No acoustic wave propagation — lumped fluid inertia captures bulk surge, but there is no method-of-characteristics water-hammer solution.
- Cavitation only at the venturi closure — no general cavitation-inception check on pumps, valves, or low-pressure nodes.
- Turbomachinery is a pump curve — no compressor or turbine maps, and no shaft-work term in the energy equation.
- No general junction mixing — outside a declared CEA reacting junction, unlike fluids may not meet at a node; couple them through a solid wall.
- Two-phase is HEM — accurate for dispersed, high-mixing, or low-quality flows; under-predicts pressure drop at high void fraction. Lockhart–Martinelli multipliers are not yet implemented.
- User code is trusted, not sandboxed — embedded components execute with
new Function. This is not a security boundary. See SECURITY.md. - Steady closed ideal-gas loops are singular without a pressure anchor; use a small leak or run in transient mode.
The authoritative, fully-qualified list is §1.7 Scope Boundaries in the user's manual.
- Multi-fluid networks (isolated continua, mixed EOS classes) with per-branch fluid context for user components
- Kinetic-energy (stagnation-enthalpy) term in the energy balance, any EOS, steady or transient
- Compressible duct flow: Fanno/Rayleigh choking and quasi-1-D converging–diverging nozzles
- Reacting flows: transient species transport with stiff chemistry, and CEA-coupled reacting junctions
- Steady species transport and shifting-equilibrium downstream combustion
- Lockhart–Martinelli separated-flow pressure-drop multipliers
- Shock capture (Rankine–Hugoniot jump, over-expanded and separated nozzles, thrust)
- Distributed acoustic wave propagation (method of characteristics) for water hammer
- Cavitation-inception warnings on pumps, valves, and low-pressure liquid nodes
- Higher-order stiff chemistry integrator (Rosenbrock or BDF2+) to replace node-local BDF1
Contributions are welcome, particularly validation cases and disagreements with published references. Please read CONTRIBUTING.md before opening a pull request — numerical claims must state their reference, tolerance, and units, and contributions must not include export-controlled material.
Project policies: Code of Conduct · Security · Changelog
If this software contributes to your research, please cite it. See CITATION.cff for current metadata, or use:
Rising, J. (2026). OpenFLUME: Open FLUid Model Environment (v0.3.1). Zenodo. https://doi.org/10.5281/zenodo.22051608