Starling Lab is a real-time simulator of the cardiovascular system. Turn the physiological knobs — heart rate, contractility, blood volume, vessel tone — and watch cardiac output, blood pressure, the ECG and the pressure waveforms respond exactly the way a real circulation would.
Nothing is scripted. Every number emerges from a closed-loop model integrated at two thousand steps a second.
Version 1.0 · One purchase covers Mac and iPad
Works entirely offline · No account · No data collected

Cardiovascular physiology is one of the hardest topics students face, because it is dynamic and coupled: change one thing and five others move, often in directions nobody predicted. A static diagram cannot show that, and a single equation shows only one link of the chain.
The wet labs and hardware simulators that can show it are expensive, bookable only inside a university, and gone the moment the class ends. Starling Lab puts that same cause-and-effect learning on hardware students and teachers already own — online or off.
Starling Lab runs a closed-loop mathematical model of the whole circulation — four heart chambers, the pulmonary loop and seven systemic organ beds — solved with a fourth-order Runge–Kutta integrator at 2 kHz. You control the causes; the app shows the effects.
You set the causes
The model returns the effects
The panel says it out loud: “Pressures are outputs of the circulation, not settings.” They emerge from conservation of volume, pressure–volume relations and Ohm's law for flow — the same handful of laws the real circulation runs on. The app is named for Ernest Starling, whose law of the heart falls out of the model on its own.
The ECG runs at the real calibration — 25 mm/s, 10 mm/mV — with PR, QRS and QT measured off the trace as you change the underlying cardiac properties. Below it, one pressure channel per level of the circulatory tree, each with its systolic, diastolic and mean.

25 mm/s and 10 mm/mV, with the calibration pulse on the left of the strip and the rhythm named beside the rate.
PR, QRS and QT come off the trace. Move dromotropy and watch the PR and QRS follow; move lusitropy and watch the QT.
HR, ABP, PAP, CVP, PCWP, CO, SV and EF along the top, so the haemodynamic picture is one glance wide.
A six-second sweep by default, with fixed or auto scaling per channel — freeze the axis to compare two states honestly.
Channel presets
The heart is steered by its five cardiac properties — the tropies. Each runs from −100 % to +100 %: positive mimics sympathetic stimulation, negative mimics vagal tone, β-blockade or disease. Each slider names the parameter it is actually moving, so nothing is hidden behind a friendly label.
| Property | Controls | Underlying parameter | What you see change |
|---|---|---|---|
| Chronotropy | Rate | HR_eff | Multiplies the intrinsic sinus rate, and everything that follows from it. |
| Bathmotropy | Excitability | PVC odds/beat | Push it up and premature ventricular contractions start appearing on the strip on their own. |
| Dromotropy | Conduction | PR, QRS | The PR interval and the QRS width widen or narrow with it. |
| Inotropy | Contractility | E_es,LV | End-systolic elastance: stroke volume, ejection fraction and the height of the ventricular trace. |
| Lusitropy | Relaxation | τ, EDPVR | Relaxation time constant and end-diastolic stiffness: filling, and the QT on the ECG. |
Sinus rate has its own slider from 30 to 200 bpm, with one-tap Brady 45, Rest 72 and Tachy 150 presets — and chronotropy multiplies it, so intrinsic rate and autonomic drive stay two separate things, as they are in the body.
You do not have to build a disease slider by slider. The teaching presets load a whole physiological state at once — then leave every control free, so the class can take it apart and ask why each number landed where it did.

Select Neurogenic shock (loss of sympathetic tone) and the monitor answers immediately: heart rate 56, arterial pressure 61/24, cardiac output 3.8 L/min, left ventricle 75/0. Nothing was typed in — the preset set the causes, and the model produced that picture.
From there the interesting question is the one a diagram cannot answer: why is this hypotension different from the haemorrhagic one? Load them both and compare the filling pressures.
Tap any district and the inspector opens on its local flow, its share of cardiac output, and the pressure drop across its capillary bed. Then you get its microcirculation to yourself.
Resistance goes as the fourth power of the diameter. Poiseuille is not a formula you are asked to trust here; it is the slider you are holding.
The non-geometric part: neurohumoral and metabolic tone, set independently of caliber, so you can separate the two causes that a single "resistance" number normally hides.
From fully open to fully closed, gating how much of the capillary bed is actually perfused. Watch the capillary pressure drop change as the gate shuts.
The liver even carries its real plumbing: dual inflow from the hepatic artery and the portal vein, so what you do to the gut arrives downstream in the liver — visibly, in the flow numbers.

Six independent sliders across the whole tree. The same word "vasoconstriction" produces opposite effects depending on which vessel you constrict — take arterioles up and capillary pressure falls; take venules up and it rises. That second one is oedema, and here you can watch it happen.
Cerebral circulation
0,74 L/min at rest
Pulmonary loop
4,94 L/min at rest
Four chambers · coronaries
0,26 L/min at rest
Hepatic + portal system
0,30 L/min at rest
Splanchnic bed → portal vein
1,10 L/min at rest
Renal circulation
1,16 L/min at rest
Systemic · high-capacity
0,95 L/min at rest
Cutaneous · thermoregulation
0,42 L/min at rest

A proper Mac app with a real menu bar and a three-column layout: districts and readouts on the left, the circulation in the middle, the controls on the right. Nothing is hidden behind a tab you have to remember.




The left column keeps the whole-body picture on screen while you work — true beat means taken over the last completed cycle, not a running average that lags behind what you just did.
Cardiovascular physiology, pathophysiology and pharmacology, with the coupling made visible rather than described.
Biology and pre-health students who need intuition for the system, not just the formulas that describe pieces of it.
A live demonstration tool for lectures, labs and flipped-classroom exercises — load a scenario and let the class predict the rest.
Anyone who wants to genuinely understand how the heart and the circulation work, without booking a laboratory.
Big, legible traces and a landscape full-screen layout on iPad make it a natural lecture tool: project it, change one variable live, and let the class predict the rest before you let go of the slider.
Starling Lab is a native SwiftUI app for macOS and iPadOS, sold as a single universal purchase — buy it once and it is yours on both. On iPad it runs landscape and full screen, built around wide side-by-side traces.
No internet connection is required for any feature. Nothing to set up, no account to create: open it and the circulation is already running.
A model is honest about its own edges, and version 1.0 says where they are — in the app, right next to the numbers they affect.
A haemorrhage shows no reflex tachycardia, because the reflex is not in the model yet. That is deliberate for teaching — you see the raw mechanical consequence first, before the body’s answer to it — and the app says so on the panel rather than letting you assume otherwise.
The pulmonary loop receives the entire cardiac output and is modelled as a whole in version 1.0, so it has readouts but no per-caliber controls of its own.
Because we never collect any. The App Store privacy label reads Data Not Collected.
There is nothing to sign up for and nothing to sign in to. The app has no backend at all.
The App Store privacy label reads "Data Not Collected", and it is accurate. The only thing stored is your own local preferences, on your device.
Every feature works offline. The app makes no requests, so nothing about you can be sent anywhere.
No analytics, no advertising frameworks, and no telemetry. We do not know who uses the app, when, or how.
Understand the circulation — don't just memorize it.
Starling Lab is an educational model, not a medical device. It simulates an average resting adult and is intended for learning and teaching only. Every physiological value it produces is a plausible textbook magnitude generated by the model, not a clinical measurement, and nothing in the app should be relied upon for any clinical decision.