# Hydrogen production
## Microsim
### Live player
<div class="microsim-player">
<iframe src="https://editor.p5js.org/sciencenibber/full/igQKlUTcC" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<div class="microsim-fallback">
<img src="Microsims/thumbs/Hydrogen_production.png" alt="Hydrogen_production 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/igQKlUTcC">open sketch in the p5.js editor</a></em></p>
</div>
**Editor URL:** https://editor.p5js.org/sciencenibber/sketches/igQKlUTcC
**Description (100 words):**
A stock-and-flow diagram of the world hydrogen economy. Four production pathways on the left (Grey SMR, Blue SMR+CCS, Green electrolysis, and an Other residual) push tokens along arrows into a central H2 inventory; four demand pathways on the right (Ammonia, Refining, Methanol, [[Steel]]) drain it. Three sliders set the production mix and a fourth scales demand. Live gauges show production, demand, CO2 emissions weighted by per-pathway carbon intensity, electrolysis grid demand, and net flow. The central reservoir bar rises when production beats demand and falls when it lags. A reset button snaps the inventory back to 50 Mt for a fresh run.
```js
// =====================================================================
// Hydrogen_production.js -- Wikitube microsim
// Article: Hydrogen_production
// en.wikitube.io/wiki/Hydrogen_production
// Room: Helium Pattern: K (stock-and-flow, system dynamics)
// ---------------------------------------------------------------------
// Idea: the world hydrogen economy modeled as a single inventory stock
// fed by four production pathways and drained by four demand pathways.
// The reader drives the production mix with three sliders (grey SMR,
// blue SMR+CCS, green electrolysis) and a demand-growth multiplier,
// then watches:
//
// * the central H2 inventory rise and fall (Mt H2)
// * the CO2 emission gauge (Mt CO2 / yr) which weights each pathway
// by its carbon intensity
// * the green-grid electricity demand gauge (TWh / yr) which scales
// with green electrolysis output
// * animated tokens flowing along each arrow whose density encodes
// the volumetric flow rate
//
// Production pathway carbon intensities (kg CO2 / kg H2):
// * Grey steam methane reforming (SMR) ~9.5
// * Blue SMR with carbon capture (CCS) ~1.5
// * Green renewable electrolysis ~0.0
// * Other gasification + pink + turquoise (mix) ~8.0
//
// Demand pathway baseline shares (Mt H2 / yr, 2022 totals):
// * Ammonia (Haber-Bosch) ~33
// * Refining (hydrocracking, HDS) ~41
// * Methanol ~15
// * Direct-reduced-iron steel + other ~6
//
// Stock-and-flow dynamics (Pattern K, forward Euler):
//
// dS/dt = production - demand
// S(t+dt) = S(t) + (sum_i p_i - sum_j d_j) * dt
//
// where S is the H2 inventory (Mt), p_i are the four production rates,
// and d_j are the four demand rates. Numerical integration runs at the
// frame rate with dt = min(deltaTime / 1000, 0.05) so a paused tab
// cannot blow up the integrator on resume.
//
// Canonical equation shown bottom-right is the green-hydrogen route --
// water electrolysis -- because that is the route the slider directly
// drives and the one that couples the H2 economy to the renewable
// grid (and indirectly to the helium cryogenic infrastructure that
// liquefies LH2 at 20.3 K):
//
// 2 H2O -> 2 H2 + O2 (Delta_G = 237 kJ/mol, E_cell = 1.23 V)
//
// Visual layout (720 x 520 canvas):
// * top-left: HUD title + en.wikitube.io/wiki/Hydrogen_production
// * top-right: reader hints (drag sliders, click reset)
// * left column: 4 source stocks (Grey, Blue, Green, Other)
// * center: large H2 inventory stock with fill bar
// * right col: 4 demand stocks (Ammonia, Refining, Methanol, Steel)
// * arrows: animated token flows between stocks
// * bottom: CO2 / electricity / production / demand gauges,
// four sliders, 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 (Delta, lambda, dots, 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 carry .position(x, y).size(w) -- no floats
// =====================================================================
const ARTICLE = 'Hydrogen_production';
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]; // warm: high-carbon (grey SMR)
const WARM = [200, 150, 80]; // mid-carbon (other, blue)
const COLD = [60, 130, 220]; // cool: low-carbon (blue)
const COLDER = [80, 200, 140]; // greener: electrolysis (green)
const STRUCT = [120, 130, 150]; // structural grey: stock outlines
const TRAJ = [240, 220, 80]; // accent: live readouts
const GAUGE = [120, 220, 140]; // gauge fill
const SCRATCH = [120, 120, 120, 90]; // grid / scratch lines
// ----- Production-pathway carbon intensity (kg CO2 / kg H2) -----------
const CI_GREY = 9.5;
const CI_BLUE = 1.5;
const CI_GREEN = 0.0;
const CI_OTHER = 8.0;
// ----- Other pathway (gasification + pink + turquoise) fixed rate -----
// Not exposed as a slider -- it is the "everything else" residual.
const R_OTHER = 8.0; // Mt H2 / yr
// ----- Electrolysis grid intensity (MWh / t H2 -> TWh / Mt H2) --------
// 50 MWh per tonne H2 is a representative alkaline / PEM figure.
const GRID_PER_GREEN = 50.0; // TWh / yr per Mt H2 / yr of green output
// ----- Baseline demand shares (Mt H2 / yr) ----------------------------
const D_AMMONIA = 33.0;
const D_REFINING = 41.0;
const D_METHANOL = 15.0;
const D_STEEL = 6.0;
const D_BASELINE = D_AMMONIA + D_REFINING + D_METHANOL + D_STEEL; // 95 Mt
// ----- Stock dynamics state ------------------------------------------
let stockH2 = 50.0; // Mt H2 currently in inventory
let tokens = []; // active flow tokens for animation
// ----- Sliders (all created in setup; values read once per frame) -----
let rGreySlider, rBlueSlider, rGreenSlider, dGrowthSlider, resetBtn;
function setup() {
createCanvas(720, 520);
pixelDensity(2);
textFont('system-ui');
// Slider column at the bottom of the canvas. Each slider has
// .position(x, y) and .size(w) per Betterfire Standard rule 6.
const sliderY0 = height - 95;
rGreySlider = createSlider(0, 80, 60, 1)
.position(14, sliderY0)
.size(150);
rBlueSlider = createSlider(0, 80, 10, 1)
.position(184, sliderY0)
.size(150);
rGreenSlider = createSlider(0, 80, 12, 1)
.position(354, sliderY0)
.size(150);
dGrowthSlider = createSlider(0.5, 2.0, 1.0, 0.05)
.position(524, sliderY0)
.size(150);
resetBtn = createButton('reset inventory')
.position(14, sliderY0 + 40);
resetBtn.mousePressed(() => {
stockH2 = 50.0;
tokens.length = 0;
});
}
function draw() {
background(BG);
// ----- read controls once per frame into named locals -----
const rGrey = rGreySlider.value();
const rBlue = rBlueSlider.value();
const rGreen = rGreenSlider.value();
const growth = dGrowthSlider.value();
const dt = Math.min(deltaTime / 1000, 0.05);
const production = rGrey + rBlue + rGreen + R_OTHER;
const demand = D_BASELINE * growth;
const co2Rate = CI_GREY * rGrey
+ CI_BLUE * rBlue
+ CI_GREEN * rGreen
+ CI_OTHER * R_OTHER; // Mt CO2 / yr
const gridRate = GRID_PER_GREEN * rGreen; // TWh / yr
// ----- integrate the H2 inventory ODE -----
// dS/dt = production - demand (Mt / yr units; dt scaled below)
// We let dt encode a "fictional accelerated year" so the bar moves
// visibly: 1 real second corresponds to ~5 simulated years.
const SIM_YEARS_PER_SEC = 5.0;
stockH2 += (production - demand) * dt * SIM_YEARS_PER_SEC;
stockH2 = constrain(stockH2, 0, 200);
// ----- spawn flow tokens proportional to each flow rate -----
spawnFlowTokens(rGrey, rBlue, rGreen, R_OTHER,
D_AMMONIA * growth, D_REFINING * growth,
D_METHANOL * growth, D_STEEL * growth,
dt);
updateTokens(dt);
// ----- draw the world -----
drawSourceStocks(rGrey, rBlue, rGreen, R_OTHER);
drawInventoryStock();
drawDemandStocks(growth);
drawTokens();
drawGauges(production, demand, co2Rate, gridRate);
drawSliderLabels(rGrey, rBlue, rGreen, growth);
drawHUD();
}
// =====================================================================
// Stock layout geometry
// =====================================================================
// Source stocks (left column): x = 14, 4 boxes vertically
// Inventory stock (center): large rounded rect, the H2 reservoir
// Demand stocks (right column): x = right edge, 4 boxes vertically
// =====================================================================
const SRC_X = 14;
const SRC_Y0 = 70;
const SRC_W = 110;
const SRC_H = 56;
const SRC_GAP = 12;
const DST_X = 596;
const DST_Y0 = 70;
const DST_W = 110;
const DST_H = 56;
const DST_GAP = 12;
const INV_X = 280;
const INV_Y = 130;
const INV_W = 160;
const INV_H = 200;
// Returns the y-center of source/destination row i (0..3).
function srcCY(i) { return SRC_Y0 + i * (SRC_H + SRC_GAP) + SRC_H / 2; }
function dstCY(i) { return DST_Y0 + i * (DST_H + DST_GAP) + DST_H / 2; }
// =====================================================================
// Source stocks (production pathways)
// =====================================================================
function drawSourceStocks(rGrey, rBlue, rGreen, rOther) {
const rates = [rGrey, rBlue, rGreen, rOther];
const labels = ['Grey SMR', 'Blue SMR+CCS', 'Green electrolysis', 'Other (gasif. + pink)'];
const cols = [HOT, COLD, COLDER, WARM];
const ciStr = ['9.5 kg CO2/kg H2', '1.5 kg CO2/kg H2',
'0.0 kg CO2/kg H2', '8.0 kg CO2/kg H2'];
for (let i = 0; i < 4; i++) {
const y = SRC_Y0 + i * (SRC_H + SRC_GAP);
drawStockBox(SRC_X, y, SRC_W, SRC_H, cols[i], rates[i] / 80,
labels[i], rates[i].toFixed(0) + ' Mt/yr', ciStr[i]);
}
}
// =====================================================================
// Inventory stock (the central H2 reservoir)
// =====================================================================
function drawInventoryStock() {
push();
// outer box
noFill();
stroke(...STRUCT);
strokeWeight(2);
rect(INV_X, INV_Y, INV_W, INV_H, 8);
// fill bar (bottom-up)
const fillFrac = constrain(stockH2 / 200, 0, 1);
const fillH = fillFrac * (INV_H - 8);
noStroke();
fill(GAUGE[0], GAUGE[1], GAUGE[2], 160);
rect(INV_X + 4, INV_Y + INV_H - 4 - fillH, INV_W - 8, fillH, 6);
// 100 Mt reference line
stroke(SCRATCH);
strokeWeight(1);
const yRef = INV_Y + INV_H - 4 - (100 / 200) * (INV_H - 8);
line(INV_X, yRef, INV_X + INV_W, yRef);
noStroke();
fill(...DIM);
textSize(9);
textAlign(RIGHT, CENTER);
text('100 Mt', INV_X - 4, yRef);
// Labels
noStroke();
fill(FG);
textAlign(CENTER, TOP);
textSize(13);
text('Global H2 inventory', INV_X + INV_W / 2, INV_Y - 22);
textAlign(CENTER, BOTTOM);
fill(...TRAJ);
textSize(15);
text(nf(stockH2, 0, 1) + ' Mt H2', INV_X + INV_W / 2, INV_Y + INV_H + 18);
pop();
}
// =====================================================================
// Demand stocks (consumption pathways)
// =====================================================================
function drawDemandStocks(growth) {
const rates = [D_AMMONIA * growth, D_REFINING * growth,
D_METHANOL * growth, D_STEEL * growth];
const labels = ['Ammonia (Haber-Bosch)', 'Refining (HDS)',
'Methanol', 'Steel (DRI) + other'];
const cols = [WARM, HOT, COLD, COLDER];
for (let i = 0; i < 4; i++) {
const y = DST_Y0 + i * (DST_H + DST_GAP);
drawStockBox(DST_X, y, DST_W, DST_H, cols[i], rates[i] / 80,
labels[i], rates[i].toFixed(0) + ' Mt/yr', 'consumer');
}
}
// =====================================================================
// Shared stock-box renderer
// =====================================================================
function drawStockBox(x, y, w, h, col, fillFrac, title, valStr, subStr) {
push();
// frame
noFill();
stroke(...STRUCT);
strokeWeight(1.5);
rect(x, y, w, h, 5);
// fill bar (left-to-right)
const f = constrain(fillFrac, 0, 1);
noStroke();
fill(col[0], col[1], col[2], 140);
rect(x + 3, y + 3, (w - 6) * f, h - 6, 3);
// title
noStroke();
fill(FG);
textAlign(LEFT, TOP);
textSize(10);
text(title, x + 5, y + 4);
// value
fill(...TRAJ);
textSize(12);
text(valStr, x + 5, y + 18);
// subtitle
fill(...DIM);
textSize(9);
text(subStr, x + 5, y + h - 13);
pop();
}
// =====================================================================
// Flow tokens -- one per parcel of H2 moving along an arrow.
// Each token has: pathway index, side ('src' or 'dst'), age (0..1
// along the arrow), and a small jitter so they do not stack visually.
// =====================================================================
function spawnFlowTokens(rGrey, rBlue, rGreen, rOther,
dAm, dRe, dMe, dSt, dt) {
// Spawn rate is proportional to flow rate. Cap total tokens to keep
// the per-frame budget bounded.
if (tokens.length > 220) return;
// Sources -> inventory
const srcRates = [rGrey, rBlue, rGreen, rOther];
for (let i = 0; i < 4; i++) {
if (random() < srcRates[i] * dt * 0.6) {
tokens.push(makeToken('src', i));
}
}
// Inventory -> demand
const dstRates = [dAm, dRe, dMe, dSt];
for (let i = 0; i < 4; i++) {
if (random() < dstRates[i] * dt * 0.6) {
tokens.push(makeToken('dst', i));
}
}
}
function makeToken(side, idx) {
return {
side: side,
idx: idx,
age: 0.0,
jit: random(-3, 3)
};
}
function updateTokens(dt) {
// 0.4 means a token traverses an arrow in ~2.5 seconds.
const SPEED = 0.4;
for (const t of tokens) t.age += SPEED * dt + 0.01 * dt;
for (let i = tokens.length - 1; i >= 0; i--) {
if (tokens[i].age >= 1.0) tokens.splice(i, 1);
}
}
function drawTokens() {
noStroke();
for (const t of tokens) {
const xy = tokenXY(t);
const col = tokenColor(t);
// halo
fill(col[0], col[1], col[2], 70);
circle(xy.x, xy.y, 7);
// core
fill(col[0], col[1], col[2], 230);
circle(xy.x, xy.y, 3.5);
}
}
// Returns the (x, y) of token t at its current age along the arrow.
function tokenXY(t) {
if (t.side === 'src') {
const x0 = SRC_X + SRC_W;
const y0 = srcCY(t.idx);
const x1 = INV_X;
const y1 = INV_Y + INV_H / 2;
return lerpPoint(x0, y0, x1, y1, t.age, t.jit);
} else {
const x0 = INV_X + INV_W;
const y0 = INV_Y + INV_H / 2;
const x1 = DST_X;
const y1 = dstCY(t.idx);
return lerpPoint(x0, y0, x1, y1, t.age, t.jit);
}
}
// Lerp from (x0, y0) -> (x1, y1) with a perpendicular jitter offset.
function lerpPoint(x0, y0, x1, y1, age, jit) {
const x = lerp(x0, x1, age);
const y = lerp(y0, y1, age);
// perpendicular unit vector (-dy, dx)/||...||
const dx = x1 - x0, dy = y1 - y0;
const m = Math.sqrt(dx * dx + dy * dy) || 1;
return { x: x + (-dy / m) * jit, y: y + (dx / m) * jit };
}
function tokenColor(t) {
if (t.side === 'src') {
return [HOT, COLD, COLDER, WARM][t.idx];
} else {
return [WARM, HOT, COLD, COLDER][t.idx];
}
}
// =====================================================================
// Gauges: production, demand, CO2, electricity
// =====================================================================
function drawGauges(production, demand, co2Rate, gridRate) {
// Gauges along the top of the canvas, centered between source and
// demand columns, above the inventory stock.
push();
textAlign(LEFT, TOP);
textSize(11);
fill(...DIM);
text('Production: ', INV_X - 60, 14);
text('Demand: ', INV_X - 60, 30);
text('CO2 emissions: ', INV_X - 60, 46);
text('Grid demand (green): ', INV_X - 60, 62);
fill(FG);
textSize(11);
text(nf(production, 0, 1) + ' Mt H2 / yr', INV_X + 60, 14);
text(nf(demand, 0, 1) + ' Mt H2 / yr', INV_X + 60, 30);
text(nf(co2Rate, 0, 1) + ' Mt CO2 / yr', INV_X + 60, 46);
text(nf(gridRate, 0, 1) + ' TWh / yr', INV_X + 60, 62);
// Net flow color cue: green if surplus, orange if deficit.
const net = production - demand;
fill(net >= 0 ? GAUGE : HOT);
textAlign(LEFT, TOP);
textSize(11);
text((net >= 0 ? '+' : '') + nf(net, 0, 1) + ' Mt / yr',
INV_X + 60, 78);
fill(...DIM);
text('Net: ', INV_X - 60, 78);
pop();
}
// =====================================================================
// Slider labels (drawn on canvas below the slider strip)
// =====================================================================
function drawSliderLabels(rGrey, rBlue, rGreen, growth) {
push();
noStroke();
fill(...DIM);
textAlign(LEFT, BOTTOM);
textSize(10);
const y = height - 100;
text('Grey SMR (' + rGrey.toFixed(0) + ' Mt/yr)', 14, y);
text('Blue SMR+CCS (' + rBlue.toFixed(0) + ' Mt/yr)', 184, y);
text('Green electro (' + rGreen.toFixed(0) + ' Mt/yr)', 354, y);
text('Demand growth (' + growth.toFixed(2) + 'x)', 524, y);
pop();
}
// =====================================================================
// HUD
// =====================================================================
function drawHUD() {
// Top-left: title + Wikitube URL (Betterfire Standard rule 2)
noStroke();
fill(FG);
textAlign(LEFT, TOP);
textSize(22);
text(TITLE, 14, 12);
fill(...DIM);
textSize(12);
text('Wikitube microsim . en.wikitube.io/wiki/Hydrogen_production',
14, 40);
// Top-right: control hints (Betterfire Standard rule 3)
textAlign(RIGHT, TOP);
textSize(10);
fill(...DIM);
text('drag sliders to set production mix', width - 14, 14);
text('reset clears inventory to 50 Mt', width - 14, 26);
text('tokens flow at the rate of each arc', width - 14, 38);
// Bottom-right: canonical equation (Betterfire Standard rule 4)
textAlign(RIGHT, BOTTOM);
fill(FG);
textSize(12);
text('2 H2O -> 2 H2 + O2 (Delta_G = 237 kJ/mol, E_cell = 1.23 V)',
width - 14, height - 6);
}
// =====================================================================
// End of Hydrogen_production.js -- Wikitube microsim, Helium room,
// Pattern K (stock-and-flow / system dynamics).
// =====================================================================
```
## Links (Wikipedia order)
<!-- injected from _registry/childlinks/Hydrogen_production.json (2026-07-30T02:09:12Z) -->
`AES_Corporation` · `Activated_carbon` · `Air_Products` · `Algae` · `Aluminium_alloy` · `American_Chemical_Society` · `American_Institute_of_Chemical_Engineers` · `Ammonia` · `Ammonia_production` · `Anaerobic_digestion` · `Anthracite` · `Aromatization` · `Artificial_photosynthesis` · `Bacteria` · `Bar_(unit)` · `Biogas` · `Biohydrogen` · `Biomass` · `Biomass_(energy)` · `Bioreactor` · `Blast_furnace` · `By-product` · `CNBC` · `Carbon_Brief` · `Carbon_black` · `Carbon_capture_and_storage` · `Carbon_monoxide` · `Chemical_decomposition` · [[Chlorine]] · `Chlorine_production` · `Coal` · `Coal_gasification` · `Coke_(fuel)` · `Combustion` · `Compressed_hydrogen` · `Copper–chlorine_cycle` · `Decomposition` · `Electrolysis` · `Electrolysis_of_water` · `Electrolytic_cell` · `Elements_(journal)` · `Energy_Reports` · `Energy_transition` · `Enzyme` · `Ethanol` · `Exothermic_reaction` · `Formic_acid` · `Gasification` · `Glycerol` · `Green_hydrogen` · `Greenhouse_gas_emissions` · `Haber_process` · `Hannah_Ritchie` · `Heating_oil` · `Heliostat` · `High-pressure_electrolysis` · `High-temperature_electrolysis` · `Hofmann_voltameter` · `Hybrid_sulfur_cycle` · `Hydrodesulfurization` · [[Hydrogen]] · `Hydrogen_analyzer` · `Hydrogen_economy` · `Hydrogen_embrittlement` · `Hydrogen_safety` · `Hydrogen_storage` · `Hydrogen_sulfide` · `Hydrogen_technologies` · `Industrial_gas` · `International_Energy_Agency` · `Iron_oxide` · `Iron_oxide_cycle` · `Kola_Superdeep_Borehole` · `Kværner_process` · `Landfill_gas` · `Light` · `Lignite` · `Liquid_hydrogen` · `Lithosphere` · `Mark_Z._Jacobson` · `Methane` · `Methanol` · `Microbial_fuel_cell` · `Midcontinent_Rift_System` · `Naphtha` · `Natural_hydrogen` · `Next_Generation_Nuclear_Plant` · [[Nickel]] · `Niobium_nitride` · `Norway` · `Nuclear_power` · `Overpotential` · `Oxide` · [[Oxygen]] · `Petroleum_coke` · `Photoelectrochemical_cell` · `Photosynthesis` · [[Plasma_(physics)]] · `Platinum_group` · `Polyphosphate` · `Potassium_carbonate` · `Pressure_swing_adsorption` · `Pressure_vessel` · `Primary_energy` · `Pyrolysis` · `Radiolysis` · `Renewable_energy` · `Sodium_hydroxide` · `Sodium_silicate` · `Solar_cell` · `Solar_power` · `Solar_thermal_collector` · `Solid_oxide_electrolyzer_cell` · `South_Africa` · `Spain` · `Specific_energy` · `Standard_temperature_and_pressure` · `Steam_reforming` · `Stoichiometry` · [[Sulfur]] · `Sulfuric_acid` · `Sulfur–iodine_cycle` · `Superheated_steam` · `Syngas` · `Teknisk_Ukeblad` · `Thermal_efficiency` · `Thermochemical_cycle` · `Timeline_of_hydrogen_technologies` · `United_States_Army_Research_Laboratory` · [[Voltage]] · `Water` · `Water_splitting` · [[Wayback_Machine]] · `World_War_I` · `Xylose` · `Yield_(chemistry)`
## From the vault media library
!Hydrogen production thumb.png
*Hydrogen Production — 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
Hydrogen production is the family of industrial processes that manufacture molecular hydrogen (H2) from feedstocks such as [[Natural_gas|natural gas]], coal, biomass, or water. Global output reached roughly 95 million tonnes in 2022, almost all of it consumed by ammonia synthesis (Haber-Bosch), oil-refinery hydrocracking, methanol manufacture, and direct-reduced-iron steelmaking. About 95% of current supply comes from fossil sources via steam methane reforming, in which methane and steam react over a nickel catalyst at 700-1100 C, CH4 + H2O to CO + 3 H2, followed by the water-gas shift CO + H2O to CO2 + H2. Coal gasification and partial-oxidation routes contribute most of the remainder. Water electrolysis splits H2O into H2 and O2 with theoretical Gibbs free [[Energy|energy]] of 237 kJ/mol and reversible cell [[Voltage|voltage]] of 1.23 V at 25 C; practical alkaline, PEM, and solid-oxide electrolyzers operate at 1.6-2.0 V, with efficiencies of 60-80% on a higher-heating-value basis. A color taxonomy classifies output by carbon intensity: grey (fossil, about 9-12 kg CO2 per kg H2), blue (fossil with carbon capture), green (renewable electrolysis, near-zero), pink (nuclear electrolysis), turquoise (methane pyrolysis), and white (geologic). Emerging methods include thermochemical sulfur-iodine cycles, photoelectrochemical splitting, and dark fermentation. Liquefaction to LH2 ([[Boiling_point|boiling point]] 20.3 K) shares cryogenic infrastructure with helium and is a major helium pre-cooling load; the hydrogen and helium economies are technologically coupled at storage, transport, and refrigeration layers.
## See also
- Room hub: [[Helium]]
- p5.js Editor conventions: P5 JS EDITOR
- Wiki root: MAIN
---
*Scaffolded by `generative-microsim` from row 112 of the Helium sheet on 2026-05-14T12:24:58Z.*
<!-- LOCAL-MEDIA-PASS:START -->
<!-- CRAFT-LINK:START g12 -->
*Built to the [[WT!P5_js_Microsim_Master_Class|p5.js Master Class]].*
<!-- CRAFT-LINK:END -->
<!-- COMPENDIUMLINK:BEGIN g19 — generated from _registry/plans/THURY_COMPENDIUM_SECTIONS.md; do not hand-edit inside -->
*Linked from the [[WT!Thury_Hydrodynamics_Compendium|Thury Hydrodynamics Compendium]], section 12, The hydrogen economy.*
<!-- COMPENDIUMLINK:END -->
## Wikipedia : Wikitube
**Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Hydrogen_production) : [Wikitube](https://en.wikitube.io/wiki/Hydrogen_production)
## Previous hub tags
Tree parent: [[Hydrogen]].
Legacy hubs: none.
---
*Sources: 1 legacy note. Minted wave 1, 2026-07-30 (v1.6 order).*