# 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).*