A moka pot cut in half on a gas ring, drawn the way a parts diagram draws one: the near side of the casting taken off so the water, the funnel, the puck and the column are all visible at once.
The thing worth knowing, and the reason the piece exists:
The water in a moka pot does not boil.
It cannot. Boiling means water’s own vapour pressure has caught up with the pressure pushing down on it, and the pressure pushing down on it is the vapour plus the air you sealed into the boiler when you screwed the top on. While any of that air is still in there, total pressure is strictly greater than vapour pressure, there is no bulk boiling anywhere in the vessel, and the water simply sits there — quiet, above 100 °C, and getting pushed up a funnel it is not boiling into.
The demo puts that on screen as a number called to boiling, in kelvin. It starts at 80 and it is still positive four minutes later with the boiler at 116 °C and coffee coming out of the spout. It reaches zero exactly once.
The gurgle
It reaches zero when the funnel’s foot clears the surface.
Up to that moment the tube has been drinking from a depth. After it, the tube is drinking from a headspace, and steam is about twenty times less viscous than water — so through the same puck it moves about twenty times the volume for the same pressure drop, and it takes the sealed air out with it. The air is what was holding total pressure above vapour pressure. Within a few seconds there is none left, the margin closes, and the last twenty millilitres in the bottom of the boiler flash all at once.
That is the noise. It is the first and only boiling in the whole brew, it arrives about ten seconds before the pot is dry, and everything after it is steam stripping a spent puck. Take it off when it starts to gurgle is not lore — it is the moment the machine stops being one kind of machine and starts being another.
The first drop is not hot
Air expands long before water evaporates. On the canonical run — a cold fill to the valve, a middling ring — the sealed air alone clears the delivery threshold while the boiler is still in the forties, and the first thing that reaches the collector does so at 60 °C, a hundred seconds in, with thirty-eight degrees still to go before the water could boil even at atmospheric pressure.
That is not a rounding error at the start of the pour. It is 78 mL of the 232 mL the pot delivers: a third of the cup, extracted under 92 °C, sour, and already in there before the pot is up to temperature.
It speeds up, and that is worse
Heat input is roughly constant and the water being heated keeps leaving, so the same watts warm less and less mass. Temperature accelerates, vapour pressure accelerates harder, and the pot runs hardest in its last fifteen seconds — at the highest temperature of the entire brew, through a puck that has already given up everything worth having. The pressure trace in the demo is the shape of that: a long shallow climb, a spike, and a crash at the gurgle.
So the cup arrives in four layers, and the demo’s bottom bar draws them:
| ring | under 92 °C | 92–100 °C | over 100 °C | after the gurgle |
|---|---|---|---|---|
| cold fill, 520 W | 78 mL | 40 mL | 100 mL | 14 mL |
| cold fill, 300 W | 104 mL | 55 mL | 59 mL | 15 mL |
| cold fill, 900 W | 55 mL | 29 mL | 133 mL | 14 mL |
| hot fill, 520 W | 0 mL | 0 mL | 218 mL | 14 mL |
There is no setting of the ring that fills the pot and keeps the pour inside the window. A hot fill buys away the whole sour band and pays for it in the scorched one. A low flame trades scorched for sour. Turning it up does both, faster. The only control that actually works is the one that is not on the pot: take it off at the first drop and you get 45 mL that is almost entirely in the window — and 45 mL is a fifth of a pot. Yield against temperature, and the moka pot gives you no way to have both. That is the whole argument, and it is why moka coffee tastes the way it does.
The valve, and why the fill line is where it is
The safety valve in this drawing lifts at 3 bar absolute. A normal brew peaks around 2.1 and never troubles it; tamp the puck fine and open the ring and the pressure walks straight up to it, because a puck that will not pass water is a puck the boiler has to out-push.
The valve is drawn on the side away from the handle and, deliberately, above the fill line. A valve with water over it vents water — same orifice, about two thousand times the mass per unit volume — and it barely drops the pressure at all. The line stamped inside the boiler is not advice about how much coffee you want. It is there to leave the valve something compressible to blow off.
Honest about the geometry
The vessel’s volume is not quoted anywhere, it is integrated out of the
silhouette this file draws (ROW_VOL), so the water level in the picture is
the water volume in the model and neither can drift from the other. At
2.8 mm per pixel that gives a boiler of 352 mL, a fill line at 259 mL, a
collector of 287 mL and a 100 mm base — a pot between a four-cup and a six-cup,
and within a few millimetres of a real one on every outside dimension.
The number the pixel grid handles worst is the funnel’s clearance. One pixel is 2.8 mm and the foot cannot sit closer than one, so the dead volume beneath it — the water that is physically unreachable and stays in the pot — comes out at 17.7 mL where a real six-cup loses about half that to clearance and makes up the rest in puck retention. The model charges 18 mL to retention separately, so the total loss is right even though the split is coarse.
Everything else is a relation rather than a constant: Tetens for vapour pressure, ideal gas for the sealed air, Darcy through the puck with viscosity doing the work at the transition to steam, and an energy balance that pays latent heat for every millilitre of headspace the departing water opens up. The casting’s own 230 J/K is in there too, which is why taking the pot off the heat does not stop it: the metal has nowhere to put that heat except into the water it is standing in.
The loops
- charge — on the heat and going nowhere. The boiler nearly full, dissolved air coming out of solution along the bottom, the funnel already standing full of water, and nothing at all in the cup.
- brew — steady delivery. The stream fountaining off the column’s cap into a pool that is visibly rising while the level below is visibly falling.
- sputter — the foot has cleared. Steam up the tube instead of water, pale foam on the puck, a plume out of the lip. The one loop that is a warning.
- vent — the safety valve lifted, from the run where a tamped-fine puck takes the boiler to 3 bar.
Reuse
export/pot-<loop>-<n>.png— 1× frames (64×92, transparent background). Render at integer scales with nearest-neighbour filtering.export/pot-sheet.png— every frame in one strip, in loop order.export/pot@6x.png— prescaled hero, mid-brew.
Source
No .aseprite — the canonical source is source/sputter.mjs, which is both the
thermodynamics and the pixel drawing. Nothing is keyframed: the section is
composed per pixel by a materialAt(x, y, state) that is a pure function, and
every loop’s slow state (level, pressure, phase) is a real instant sampled out
of a real run. Only the fast state — bubbles, droplets, flame, the steam
plume — cycles, because a loop whose water level fell would jump on the wrap.
node source/render.mjs # export/, media/ loops, thumb, demo copy
node scripts/screenshot-demo.mjs # media/ demo shots
(needs site/node_modules installed — the scripts resolve Chromium through
site/scripts/lib/chromium.mjs.)
validateGeometry() is the cheap guard, and both scripts run it. It checks that
the walls are still walls, that level → volume → level round-trips, that the pot
is still a plausible pot, that the collector can hold what the boiler gives up —
and then that the model still behaves: that the first drop arrives under
92 °C, that the boiler passes 100 without running away past 125, that a normal
brew never lifts the valve, that a tamped one always does, and that the gurgle
is an event rather than a phase. Change a row constant and it will tell you the
picture and the physics have come apart.