Build on MaximaLabs
A first-class REST API, a zero-dependency Python SDK, and an Excel add-in — automation that isn't bolted on.
REST API
| POST /api/simulations | Create a simulation from a flowsheet JSON |
| GET | PUT /api/simulations/{id} | Fetch or update a simulation |
| POST /api/simulations/{id}/run | Enqueue a solve (async worker) |
| GET /api/simulations/{id}/status | Poll status, or subscribe over WebSocket |
| GET /api/simulations/{id}/streams | Solved stream table (SI units) |
| POST /api/ai/chat | AI copilot — generate / diagnose / advise |
| GET /api/components · /api/thermo-packages | Available components & thermo models |
| GET /api/simulations/{id}/cost · /sustainability | Capital cost · Scope 1/2/3 emissions |
| POST /api/simulations/{id}/optimize · /sensitivity | Optimization & case-study sweeps |
| GET/PUT /api/simulations/{id}/twin | Digital-twin tag mapping & live comparison |
All solves run as async jobs; results stream back over WebSocket. Every value is produced by the deterministic solver — the AI proposes, it never invents numbers.
Python SDK
A zero-dependency client (standard library only, no numpy/scipy/solver stack) — pip install flowsim-sdk gets you a real, independent package, not a slice of the monorepo. Build flowsheets, run simulations, and pull results, cost, and carbon from Python.
pip install flowsim-sdk
from flowsim.sdk import FlowSimClient, feed, unit, edge
fs = {
"thermo_package": "nrtl", "components": ["ethanol", "water"],
"nodes": [
feed("FEED", flow=10, temperature=350, pressure=101325,
composition={"ethanol": 0.3, "water": 0.7}),
unit("COL", "distillation", n_stages=8, feed_stage=4,
reflux_ratio=2.5, distillate_rate=3.0, pressure=101325),
unit("D", "product"), unit("B", "product"),
],
"edges": [edge("e1", "FEED", "COL"),
edge("e2", "COL", "D"), edge("e3", "COL", "B")],
}
client = FlowSimClient("https://maximalabs.io")
sim = client.run_and_wait("demo", fs)
print(client.streams(sim["id"]), client.cost(sim["id"]))Comprehensive coverage
Simulate & analyze
- ✓Create, run, and poll simulations (sync or async)
- ✓Stream tables, cost, sustainability, HX rating, safety, datasheets
- ✓Optimization & sensitivity/parametric sweeps
- ✓CSV report export
Collaborate & organize
- ✓Version snapshots — save, list, restore
- ✓Collaborators — invite editors/viewers
- ✓Projects & organizations — shared defaults, scenario grouping
- ✓Digital twin — read live comparisons, ingest readings, pull history
Every method is a thin wrapper over the same REST API the app itself uses — nothing the SDK does is a special, less-capable path.
In-browser Python notebook
Open the "Notebook" panel inside a flowsheet for a real Python cell running client-side via Pyodide (WASM) — no install, no server-side kernel. It only ever ships the thin flowsim-sdk client, not the solver itself (CoolProp has no WASM build), so every real computation — a run, a sensitivity sweep — goes out over the same REST/ARQ path the app's own Run button uses. Nothing is invented locally; results are always the deterministic solver's real output.
from flowsim.sdk.transport_pyodide import AsyncFlowSimClient
client = AsyncFlowSimClient() # same-origin, uses your session automatically
sim = await client.get_simulation(sim_id)
print(sim["name"], sim["status"])Excel add-in
Drive the same API from a spreadsheet with the xlwings add-in — for the engineers who live in Excel/VBA.
=FLOWSIM.RUN("http://host:8000", "my sim", A1) ' A1 = flowsheet JSON
=FLOWSIM.STREAM("http://host:8000", B1, "e_prod", "flow") ' B1 = returned sim id