# Rocket propellant ## Microsim ### Live player <div class="microsim-player"> <iframe src="https://editor.p5js.org/sciencenibber/full/DsIanlgNT" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe> </div> <div class="microsim-fallback"> <img src="Microsims/thumbs/Rocket_propellant.png" alt="Rocket_propellant microsim poster" style="width:100%;border:1px solid #4445;border-radius:6px;"> <p><em>Live microsim (desktop) · <a href="https://editor.p5js.org/sciencenibber/sketches/DsIanlgNT">open sketch in the p5.js editor</a></em></p> </div> **Editor URL:** https://editor.p5js.org/sciencenibber/sketches/DsIanlgNT **Description (100 words):** A live [[Block_diagram|block diagram]] of a cryogenic liquid bipropellant feed [[System|system]], drawn left-to-right from the helium pressurant bottle through the regulator into the fuel (LH2 / RP-1) and oxidizer (LOX) tanks, then through their turbopumps into the combustion chamber and de Laval nozzle. Animated tokens flow along every line — cool blue for helium, yellow for fuel, orange for ox — with token speed proportional to mass flow. Three sliders drive the simulation: chamber pressure P_c, mass ratio m0/mf, and specific impulse I_sp. A right-edge gauge column recomputes delta-v from the Tsiolkovsky equation, alongside exhaust velocity, propellant mdot, and helium-pressurant mass; an archetype tag names the rocket family the chosen I_sp matches. ```js // ===================================================================== // Rocket_propellant.js -- Wikitube microsim // Article: Rocket_propellant en.wikitube.io/wiki/Rocket_propellant // Room: Helium Pattern: G (block diagram, process chain) // --------------------------------------------------------------------- // Idea: a live block diagram of a cryogenic liquid bipropellant feed // system, with helium tank-pressurization shown as the system-of-systems // that makes the whole stage work. Boxes are subsystems. Arrows are // flows. Animated tokens move along arrows; their density encodes flow // rate. Three sliders drive the physics: chamber pressure, mass ratio // (m0 / mf), and specific impulse (I_sp). The Tsiolkovsky equation // // dV = v_e * ln(m0 / mf) = I_sp * g0 * ln(m0 / mf) // // is recomputed each frame and shown live in a gauge column on the // right edge, alongside helium-pressurant mass and propellant mdot. // // Subsystems shown (left to right, top to bottom): // * He pressurant bottle (COPV, ~4500 psi) // * pressure regulator (step-down to tank ullage pressure) // * fuel tank (LH2 or RP-1, top half) // * ox tank (LOX, bottom half) // * fuel turbopump and ox turbopump // * combustion chamber (with throat marker) // * de Laval nozzle (bell), exhausting hot gas to vacuum // // The helium line is drawn cool-blue. The fuel feed line is yellow. // The ox feed line is bright orange. The hot-gas exhaust is hot orange // with brighter tokens to suggest the exit Mach cone. Token speed on // every line is proportional to its physical mdot, so the eye sees // ox flowing faster than fuel (typical O/F mixture ratio 2.3 - 6). // // Helium-specific anchors (from Pass-1 transportation roundtable): // * He boil point 4.222 K, gamma = 5/3 (monatomic) -- only pressurant // that does not condense against LOX (90 K) or LH2 (20 K) ullage // * Saturn V S-IC: He spheres charged to 3200 psi pressurized LOX/RP-1 // * Modern COPVs store He at 4500 - 5500 psi at ~80% mass savings // versus all-metal Inconel 718 spheres // * He pressurant mass m_He ~ V_ullage * P_tank / (R_He * T) per stage // // Visual layout (720 x 520 canvas): // * top-left : HUD title + en.wikitube.io/wiki/Rocket_propellant // * top-right : control hints // * left half : block-diagram pipeline (boxes + arrows + tokens) // * bottom-left: three sliders (P_c [psi], mass ratio, I_sp) // * right edge : gauge column (dV, thrust, mdot, He mass) // * bottom-right: canonical equation // // Conventions (Wikitube Betterfire Standard v0): // * single ARTICLE constant at the top, single quotes // * p5.disableFriendlyErrors = true to keep the editor console clean // * non-ASCII (Greek delta, dot, arrows) lives in COMMENTS ONLY; // every text() string literal is ASCII (the editor preview pipeline // mangles non-ASCII in strings) // * Energy-room palette (P5_JS_EDITOR section 4): dark BG, HOT/COLD // tones, STRUCT grey, TRAJ accent // * all createSlider calls have .position(x, y).size(w) -- no defaults // ===================================================================== const ARTICLE = 'Rocket_propellant'; const TITLE = ARTICLE.replace(/_/g, ' '); p5.disableFriendlyErrors = true; // ----- Energy room palette (P5_JS_EDITOR section 4, line 165) -------- const BG = 18; const FG = 240; const DIM = [240, 240, 240, 140]; const HOT = [220, 110, 60]; // exhaust / oxidizer feed const COLD = [60, 130, 220]; // helium feed line const STRUCT = [120, 130, 150]; // box outlines, neutral structure const TRAJ = [240, 220, 80]; // fuel feed, gauges, accents const GAUGE = [120, 220, 140]; // delta-v / performance gauge const HOTBR = [255, 170, 100]; // brighter token color for exhaust // ----- Physics constants --------------------------------------------- const G0 = 9.80665; // m/s^2, standard gravity for I_sp -> v_e // ----- Subsystem-box rectangles in canvas px ------------------------- // Each box: {x, y, w, h, label, sub}. The system flows left-to-right // and converges at the combustion chamber. He bottle and regulator sit // at the top-left; tanks middle; pumps right of tanks; chamber centred // before the bell. Coordinates are tuned for a 720 x 520 canvas with a // left-side plot region of x in [20, 470], y in [70, 360]. const BOXES = [ { id: 'he', x: 30, y: 88, w: 90, h: 46, label: 'He bottle', sub: '4500 psi' }, { id: 'reg', x: 150, y: 88, w: 80, h: 46, label: 'regulator', sub: 'step down' }, { id: 'ft', x: 250, y: 88, w: 100, h: 60, label: 'fuel tank', sub: 'LH2 / RP-1'}, { id: 'ot', x: 250, y: 170, w: 100, h: 60, label: 'ox tank', sub: 'LOX' }, { id: 'fp', x: 380, y: 98, w: 60, h: 40, label: 'fuel pump', sub: 'turbo' }, { id: 'op', x: 380, y: 180, w: 60, h: 40, label: 'ox pump', sub: 'turbo' }, { id: 'cc', x: 200, y: 280, w: 100, h: 50, label: 'chamber', sub: 'P_c' }, // Nozzle bell drawn separately (not a rect) below the chamber. ]; // Line segments {from-box-id, to-box-id, kind}. kind picks color + // token speed scaling. 'he' lines = helium pressurant (cool blue), // 'fuel' = fuel feed (yellow), 'ox' = ox feed (orange). const LINES = [ { from: 'he', to: 'reg', kind: 'he' }, { from: 'reg', to: 'ft', kind: 'he' }, // pressurizes fuel tank { from: 'reg', to: 'ot', kind: 'he' }, // pressurizes ox tank { from: 'ft', to: 'fp', kind: 'fuel' }, { from: 'ot', to: 'op', kind: 'ox' }, { from: 'fp', to: 'cc', kind: 'fuel' }, { from: 'op', to: 'cc', kind: 'ox' } ]; // Token particles per line, used to animate flow rate. let tokens = []; // ----- Slider handles (bound in setup) ------------------------------- let pcSlider, mrSlider, ispSlider; // ----- Slider read-once cache (read in draw()) ----------------------- let P_c = 1200; // psi, chamber pressure let MR = 18.0; // mass ratio m0/mf (dimensionless), dry mass = 1 unit let I_sp = 330; // s, vacuum specific impulse function setup() { createCanvas(720, 520); pixelDensity(2); textFont('system-ui'); // Sliders: three of them, stacked at the bottom-left under the diagram. // Each slider has explicit .position() and .size() per Betterfire rule. pcSlider = createSlider(100, 4000, 1200, 10).position(20, 430).size(180); mrSlider = createSlider(2, 30, 18, 0.5).position(20, 460).size(180); ispSlider = createSlider(200, 470, 330, 5).position(20, 490).size(180); // Seed tokens evenly along each line so the system reads as flowing // from the very first frame. Token phase is a random [0, 1) so they // don't all line up. for (const ln of LINES) { const N = 7; for (let i = 0; i < N; i++) { tokens.push({ line: ln, phase: i / N }); } } } function draw() { background(BG); // Read sliders once per frame into named locals -- physics is then // readable as physics, not as UI plumbing (P5_JS_EDITOR section 4, // recommended control layout). P_c = pcSlider.value(); MR = mrSlider.value(); I_sp = ispSlider.value(); // Compute derived performance numbers. const v_e = I_sp * G0; // m/s, effective exhaust velocity const dV = v_e * Math.log(MR); // m/s, Tsiolkovsky delta-v // mdot scales roughly as P_c / (c* * A_t). Without a throat area, we // use a synthetic scaling for visual flow-rate so higher P_c flows // faster. The number on the gauge is illustrative, not literal. const mdot = 250 * (P_c / 1200); // kg/s, total propellant flow (illustrative) // Helium pressurant mass per stage. Rough first-order estimate using // ideal-gas isothermal blowdown at a notional V_ullage of 30 m^3 and // P_tank scaling with P_c via a fixed 1:5 step (regulator ratio). const R_He = 2077; // J/(kg*K), specific gas const for He const T_He = 250; // K, conservative on-board He temp const P_tank = (P_c / 5) * 6894.76; // Pa, tank ullage pressure (psi -> Pa) const V_ull = 30; // m^3, notional total ullage const m_He = (P_tank * V_ull) / (R_He * T_He); // kg of He needed drawBlocks(); drawLines(); drawTokens(mdot); drawNozzle(); drawExhaust(I_sp); drawSliderLabels(); drawGauges(dV, mdot, m_He, v_e); drawHUD(); } // ===================================================================== // Block diagram -- subsystem rectangles with two-line labels // ===================================================================== function getBox(id) { for (const b of BOXES) if (b.id === id) return b; return null; } function boxCenter(b) { return { x: b.x + b.w / 2, y: b.y + b.h / 2 }; } // Compute the connection point on the boundary of box b that lies along // the line from b's center toward target point (tx, ty). This makes // arrows terminate on box edges rather than punching through them. function boxEdgePoint(b, tx, ty) { const cx = b.x + b.w / 2; const cy = b.y + b.h / 2; const dx = tx - cx; const dy = ty - cy; if (dx === 0 && dy === 0) return { x: cx, y: cy }; // Scale so we hit the box rectangle. const sx = (dx === 0) ? Infinity : (b.w / 2) / Math.abs(dx); const sy = (dy === 0) ? Infinity : (b.h / 2) / Math.abs(dy); const s = Math.min(sx, sy); return { x: cx + dx * s, y: cy + dy * s }; } function drawBlocks() { push(); rectMode(CORNER); for (const b of BOXES) { // Box body -- faint fill + STRUCT outline. noFill(); stroke(...STRUCT); strokeWeight(1.5); rect(b.x, b.y, b.w, b.h, 4); // Two-line label inside the box. noStroke(); fill(FG); textAlign(CENTER, CENTER); textSize(11); text(b.label, b.x + b.w / 2, b.y + b.h / 2 - 7); fill(...DIM); textSize(9); text(b.sub, b.x + b.w / 2, b.y + b.h / 2 + 8); } pop(); } // ===================================================================== // Flow lines -- arrows between boxes, colored by flow kind // ===================================================================== function lineColor(kind) { if (kind === 'he') return COLD; if (kind === 'fuel') return TRAJ; if (kind === 'ox') return HOT; return STRUCT; } // Compute the (a, b) endpoints of a flow line on the boundaries of // its two boxes. Pure geometry, no drawing. function lineEndpoints(ln) { const A = getBox(ln.from); const B = getBox(ln.to); const cA = boxCenter(A); const cB = boxCenter(B); const a = boxEdgePoint(A, cB.x, cB.y); const b = boxEdgePoint(B, cA.x, cA.y); return { a, b }; } function drawLines() { push(); strokeWeight(2); for (const ln of LINES) { const { a, b } = lineEndpoints(ln); const col = lineColor(ln.kind); stroke(...col, 200); line(a.x, a.y, b.x, b.y); drawArrowhead(a, b, col); } pop(); } function drawArrowhead(a, b, col) { const dx = b.x - a.x; const dy = b.y - a.y; const len = Math.sqrt(dx * dx + dy * dy); if (len < 1) return; const ux = dx / len, uy = dy / len; // Place arrowhead slightly before endpoint so it sits inside the box edge. const tipX = b.x - ux * 2; const tipY = b.y - uy * 2; const ahLen = 8, ahWid = 4; const px = -uy, py = ux; // perpendicular unit vector const xL = tipX - ux * ahLen + px * ahWid; const yL = tipY - uy * ahLen + py * ahWid; const xR = tipX - ux * ahLen - px * ahWid; const yR = tipY - uy * ahLen - py * ahWid; noStroke(); fill(...col, 220); triangle(tipX, tipY, xL, yL, xR, yR); } // ===================================================================== // Animated tokens -- density and speed encode flow rate // ===================================================================== // Speed scaling per kind. He pressurant flows slowly compared to ox. function tokenSpeed(kind, mdot) { const base = (mdot / 500); // dimensionless ~ 0..2 if (kind === 'he') return 0.12 * base; if (kind === 'fuel') return 0.35 * base; if (kind === 'ox') return 0.55 * base; return 0.3 * base; } function drawTokens(mdot) { push(); noStroke(); for (const tok of tokens) { const { a, b } = lineEndpoints(tok.line); // Advance phase along [0, 1]; wrap. tok.phase += tokenSpeed(tok.line.kind, mdot) * (deltaTime / 1000); while (tok.phase >= 1) tok.phase -= 1; while (tok.phase < 0) tok.phase += 1; const x = lerp(a.x, b.x, tok.phase); const y = lerp(a.y, b.y, tok.phase); const col = lineColor(tok.line.kind); // Token glow halo + dot. fill(...col, 60); circle(x, y, 7); fill(...col); circle(x, y, 3); } pop(); } // ===================================================================== // Nozzle (de Laval bell) -- drawn below the combustion chamber // ===================================================================== function drawNozzle() { const cc = getBox('cc'); const cx = cc.x + cc.w / 2; const top = cc.y + cc.h; // Bell profile: a parabolic flare from throat to exit plane. const throatHalf = 14; const exitHalf = 38; const throatY = top + 6; const exitY = top + 78; push(); noFill(); stroke(...STRUCT); strokeWeight(1.5); // Left side of bell beginShape(); const STEPS = 24; for (let i = 0; i <= STEPS; i++) { const t = i / STEPS; const y = lerp(throatY, exitY, t); const r = throatHalf + (exitHalf - throatHalf) * Math.pow(t, 1.4); vertex(cx - r, y); } endShape(); // Right side of bell beginShape(); for (let i = 0; i <= STEPS; i++) { const t = i / STEPS; const y = lerp(throatY, exitY, t); const r = throatHalf + (exitHalf - throatHalf) * Math.pow(t, 1.4); vertex(cx + r, y); } endShape(); // Throat tick stroke(...TRAJ, 200); strokeWeight(2); line(cx - throatHalf - 4, throatY, cx - throatHalf + 1, throatY); line(cx + throatHalf - 1, throatY, cx + throatHalf + 4, throatY); // Throat label noStroke(); fill(...DIM); textSize(9); textAlign(LEFT, CENTER); text('throat', cx + throatHalf + 6, throatY); textAlign(LEFT, TOP); text('exit', cx + exitHalf + 6, exitY - 6); pop(); } // ===================================================================== // Exhaust plume -- animated hot-gas tokens flowing out of the bell // Density and tail length scale with I_sp (higher I_sp -> longer plume). // ===================================================================== let plumeTokens = []; function drawExhaust(I_sp_val) { const cc = getBox('cc'); const cx = cc.x + cc.w / 2; const exitY = cc.y + cc.h + 78; // Emit one new plume token per ~2 frames; cap at 60. if (plumeTokens.length < 60 && (frameCount % 2 === 0)) { plumeTokens.push({ y: exitY, x: cx + random(-32, 32), vy: random(2.6, 3.8), life: 1.0, heat: random(0.5, 1.0) }); } push(); noStroke(); for (let i = plumeTokens.length - 1; i >= 0; i--) { const t = plumeTokens[i]; t.y += t.vy * (I_sp_val / 330); // higher I_sp -> faster exit t.life -= 0.012; t.x += random(-0.6, 0.6); if (t.life <= 0 || t.y > height + 10) { plumeTokens.splice(i, 1); continue; } // Color: hot orange -> dim red as life decays. const r = lerp(HOTBR[0], 100, 1 - t.life); const g = lerp(HOTBR[1], 40, 1 - t.life); const b = lerp(HOTBR[2], 10, 1 - t.life); fill(r, g, b, 90 * t.life * t.heat); circle(t.x, t.y, 14 * t.life); fill(r, g, b, 200 * t.life); circle(t.x, t.y, 6 * t.life); } pop(); } // ===================================================================== // Slider labels (drawn over the canvas above each slider DOM element) // ===================================================================== function drawSliderLabels() { push(); noStroke(); fill(...DIM); textSize(10); textAlign(LEFT, BOTTOM); // Slider values are read from the cached locals at top of draw(). text('P_c = ' + nf(P_c, 0, 0) + ' psi', 220, 442); text('mass ratio m0/mf = ' + nf(MR, 0, 1), 220, 472); text('I_sp = ' + nf(I_sp, 0, 0) + ' s', 220, 502); pop(); } // ===================================================================== // Gauge column on the right edge -- the live readouts // ===================================================================== function drawGauges(dV, mdot, m_He, v_e) { push(); const gx = 480; const gy = 90; noStroke(); fill(...DIM); textAlign(LEFT, TOP); textSize(11); text('Performance', gx, gy - 18); // dV gauge -- color-coded vs. LEO target (~9400 m/s) drawGaugeBar(gx, gy + 0, 'delta-v', dV, 12000, 'm/s', GAUGE); drawGaugeBar(gx, gy + 44, 'exhaust v_e', v_e, 5000, 'm/s', TRAJ); drawGaugeBar(gx, gy + 88, 'mdot', mdot, 1000, 'kg/s', HOT); drawGaugeBar(gx, gy + 132, 'He mass', m_He, 300, 'kg', COLD); // Notes block: which rocket archetype the user is at. const archetype = classifyArchetype(I_sp); fill(...DIM); textSize(10); textAlign(LEFT, TOP); text('archetype:', gx, gy + 188); fill(FG); textSize(11); text(archetype, gx, gy + 202); pop(); } function drawGaugeBar(gx, gy, label, value, vmax, unit, col) { const w = 200, h = 10; push(); // Label and number noStroke(); fill(...DIM); textSize(10); textAlign(LEFT, BOTTOM); text(label, gx, gy - 2); textAlign(RIGHT, BOTTOM); fill(FG); text(nf(value, 0, 0) + ' ' + unit, gx + w, gy - 2); // Bar background noStroke(); fill(...col, 50); rect(gx, gy, w, h, 2); // Bar fill const frac = constrain(value / vmax, 0, 1); fill(...col, 220); rect(gx, gy, w * frac, h, 2); pop(); } // Map I_sp to a rocket archetype to help the reader build intuition. function classifyArchetype(isp) { if (isp < 240) return 'cold-gas / monoprop'; if (isp < 280) return 'solid (APCP)'; if (isp < 320) return 'kerolox (RP-1 / LOX)'; if (isp < 380) return 'methalox (CH4 / LOX)'; if (isp < 430) return 'hydrolox (LH2 / LOX)'; if (isp < 460) return 'hydrolox upper stage'; return 'nuclear thermal (NERVA)'; } // ===================================================================== // HUD -- title, URL, hints, equation. (Betterfire Standard rules 2-4.) // ===================================================================== function drawHUD() { push(); // Top-left: title + Wikitube URL noStroke(); fill(FG); textAlign(LEFT, TOP); textSize(22); text(TITLE, 14, 12); fill(...DIM); textSize(12); text('Wikitube microsim . en.wikitube.io/wiki/Rocket_propellant', 14, 40); // Top-right: control hints textAlign(RIGHT, TOP); fill(...DIM); textSize(10); text('slide P_c -> drives mdot and plume speed', width - 14, 12); text('slide m0/mf -> drives delta-v', width - 14, 24); text('slide I_sp -> picks propellant archetype', width - 14, 36); // Bottom-right: canonical Tsiolkovsky equation textAlign(RIGHT, BOTTOM); fill(FG); textSize(13); text('dV = I_sp * g0 * ln(m0 / mf) [Tsiolkovsky]', width - 14, height - 6); pop(); } // ===================================================================== // End of Rocket_propellant.js -- Wikitube microsim, Helium room, // Pattern G (block diagram, process chain). // ===================================================================== ``` ## Links (Wikipedia order) <!-- injected from _registry/childlinks/Rocket_propellant.json (2026-07-30T02:09:12Z) --> `Aluminium_powder` · `Ammonium_nitrate` · `Ammonium_perchlorate` · `Ammonium_perchlorate_composite_propellant` · `Angara_(rocket_family)` · `Ariane_5` · `Artemis_I` · `Artemis_II` · `Artemis_program` · `Atlas_V` · `Aviation_fuel` · [[Beryllium]] · `Brigham_Young_University` · `Carbon_monoxide` · `Centaur_(rocket_stage)` · [[Chlorine]] · `Chlorine_pentafluoride` · `Chlorine_trifluoride` · `Cold_gas_thruster` · `Combustion` · `Combustion_chamber` · `Comparison_of_orbital_launch_systems` · `Dawn_(spacecraft)` · `Delta-v` · `Delta_IV` · `Delta_IV_Heavy` · `Dinitrogen_tetroxide` · `Electric_field` · `Falcon_9` · `Falcon_Heavy` · `Flow_separation` · [[Fluorine]] · `Gunpowder` · `H-IIA` · `Hybrid-propellant_rocket` · `Hydrazine` · `Hydrogen_peroxide` · [[Ion]] · `Ion_thruster` · `Kerosene` · `Kinetic_energy` · `LGM-30_Minuteman` · `Launch_vehicle` · `Liquefied_natural_gas` · `Liquid-propellant_rocket` · `Liquid_hydrogen` · `Liquid_oxygen` · `Long_March_(rocket_family)` · `Long_March_6` · `Low_Earth_orbit` · `Magnetic_field` · `Mass` · `Mass_flow_rate` · `Monomethylhydrazine` · `Monopropellant` · `Multiple_independently_targetable_reentry_vehicle` · `New_Glenn` · [[Newton's_laws_of_motion]] · `Nitric_acid` · [[Nitrogen]] · `Nitrous_oxide` · `Nuclear_fission` · `Nuclear_propulsion` · `Nuclear_pulse_propulsion` · `Nuclear_thermal_rocket` · `Orbital_station-keeping` · `Outer_space` · `Oxidizing_agent` · [[Oxygen]] · `Ozone` · `Paraffin_wax` · `Peroxide` · `Polybutadiene_acrylonitrile` · `Potassium_nitrate` · `Potassium_sulfide` · `Project_Orion_(nuclear_propulsion)` · `R-36_(missile)` · `RD-180` · `RDX` · `RP-1` · `RS-25` · `RT-23_Molodets` · `Reducing_agent` · `Rochester_Institute_of_Technology` · `Rocket_Lab_Neutron` · `Rocket_engine` · `Rocket_engine_nozzle` · `Rotational_energy` · `Single-stage-to-orbit` · `Solar_thermal_rocket` · `Solid_rocket_booster` · `Song_dynasty` · `Soyuz_(rocket_family)` · `SpaceX_Starship` · `Space_Launch_System` · `Space_Shuttle` · `Spacecraft_electric_propulsion` · `Specific_energy` · `Specific_impulse` · `Stanford_University` · `Starlink` · `Stennis_Space_Center` · `Stoichiometry` · `Thermal_energy` · `Thermal_rocket` · `Thrust` · `Thrust-to-weight_ratio` · `Timeline_of_hydrogen_technologies` · `Tripropellant_rocket` · `Turbopump` · `UR-100N` · `University_of_Utah` · `Unsymmetrical_dimethylhydrazine` · `Upper_atmosphere` · `Utah_State_University` · `Water_rocket` · `Zenit_(rocket_family)` · `Zhuque-2` ## From the vault media library !Rocket propellant thumb.png *Rocket Propellant — from the vault's own media holdings, placed 2026-07-09. MTN / Wikitube.io original · CC BY-SA 4.0.* <!-- LOCAL-MEDIA-PASS:END --> > **Room:** [[Helium]] · **Status:** ✅ shipped ## Overview Rocket propellant is the reaction mass expelled by a rocket engine to produce thrust, encompassing both the fuel and oxidizer carried by the vehicle (or, for cold-gas and electric systems, a single working fluid). The performance of any propellant combination is governed by the Tsiolkovsky rocket equation, Δv = v_e · ln(m₀/m_f), where the effective exhaust [[Velocity|velocity]] v_e — equivalently the specific impulse I_sp multiplied by g₀ — sets the achievable change in velocity for a given mass ratio. Propellants are grouped by phase and storage: solid propellants such as APCP combine ammonium perchlorate, aluminum, and a polymeric binder cast into a grain; liquid bipropellants pair a fuel (RP-1, liquid hydrogen, methane, hydrazine) with an oxidizer (LOX, nitrogen tetroxide); hybrids burn a solid fuel with a liquid or gaseous oxidizer; cold-gas systems use a stored inert pressurant. Cryogenic stages depend on helium as a non-condensing tank pressurant because its 4.22 K [[Boiling_point|boiling point]] and γ = 5/3 prevent collapse against LOX (90 K) and LH₂ (20 K) ullage walls. Historical landmarks include Goddard's 1926 LOX/gasoline flight, the V-2's ethanol/LOX engine, the Saturn V F-1 (RP-1/LOX) and J-2 (LH₂/LOX), the Space Shuttle Main Engine, and modern staged-combustion methane engines such as Raptor and BE-4. Performance, storability, [[Density|density]], toxicity, and ignition reliability define the trade space across launch, in-space propulsion, and reentry. ## See also - Room hub: [[Helium]] - p5.js Editor conventions: P5 JS EDITOR - Wiki root: MAIN --- *Scaffolded by `generative-microsim` from row 98 of the Helium sheet on 2026-05-12T12:22:19Z.* <!-- LOCAL-MEDIA-PASS:START --> <!-- CRAFT-LINK:START g12 --> *Built to the [[WT!P5_js_Microsim_Master_Class|p5.js Master Class]].* <!-- CRAFT-LINK:END --> ## Wikipedia : Wikitube **Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Rocket_propellant) : [Wikitube](https://en.wikitube.io/wiki/Rocket_propellant) ## Previous hub tags Tree parents: [[Helium]] · [[Hydrogen]] · [[Oxygen]]. Legacy hubs: none. --- *Sources: 1 legacy note. Minted wave 1, 2026-07-30 (v1.6 order).*