# Half-life <!-- MICROSIMGEN:BEGIN v1.7 — generated by g08_place_microsims.py; three.js first (§15); do not hand-edit inside --> ## Microsims — three.js ### Half-life (three.js) <div class="microsim-player"> <iframe src="https://wikitube-3d-microsims.netlify.app/Half-life.html" width="100%" height="620" frameborder="0" loading="lazy" sandbox="allow-scripts allow-same-origin" title="Half-life — three.js microsim"></iframe> </div> **Open it full-screen:** [Half-life.html](https://wikitube-3d-microsims.netlify.app/Half-life.html) · library `threejs` · route `microsim/threejs/` ## Microsims — p5.js ### Half-life (p5.js) <div class="microsim-player"> <iframe src="https://editor.p5js.org/sciencenibber/full/-WqeWsWnK" width="100%" height="480" frameborder="0" loading="lazy" sandbox="allow-scripts allow-same-origin" title="Half-life — p5.js microsim"></iframe> </div> *A 400-nucleus lattice decays as the half-life slider sweeps sixteen decades, overlaying the empirical curve on analytic exp(−λt) with a 0.5 crossing.* **Open in the editor:** [&#9654; fork this sketch](https://editor.p5js.org/sciencenibber/sketches/-WqeWsWnK) · library `p5js` ### Related microsims Live sims on neighbouring articles — 1 of them inside this article's own Wikipedia link tree: - [[Alpha_particle]] *(in tree)* - [[Lifting_gas]] - [[Noble_gas]] - [[Nuclear_magnetic_resonance]] *Sim hosted off-article; the article owns the reference, not the runtime (WIKI_RULES §10.4). Placed by `g08_place_microsims.py`.* <!-- MICROSIMGEN:END --> ## Microsim ### Live player <div class="microsim-player"> <iframe src="https://editor.p5js.org/sciencenibber/full/esnTAjQ1K" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe> </div> <div class="microsim-fallback"> <img src="Microsims/thumbs/Half-life.png" alt="Half-life 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/esnTAjQ1K">open sketch in the p5.js editor</a></em></p> </div> **Editor URL:** https://editor.p5js.org/sciencenibber/sketches/esnTAjQ1K **Description (100 words):** A 30 x 20 lattice of 600 cyan nuclei sits next to a live decay-curve plot. Each frame, every undecayed nucleus rolls against the per-step probability p = 1 - exp(-lambda * dt); the ones that fail turn grey and emit an orange alpha-puff ring. On the right, a translucent blue curve shows the canonical mean N(t) = N_0 * exp(-lambda * t), while the yellow trace records the actual stochastic sample so the reader can watch the random walk fluctuate around the mean as N shrinks. Magenta dashed crosshairs mark the t_half landmark at (t_half, N_0 / 2). Two sliders set the half-life (log scale, 0.1 s to 32 s) and the simulation rate (0.1x to 8x); a reset button reseeds the lattice. ```js // ===================================================================== // Half-life.js -- Wikitube microsim // Article: Half-life en.wikitube.io/wiki/Half-life // Room: Helium Pattern: E (particle population) // + Pattern D (decay curve) // --------------------------------------------------------------------- // Idea: 600 unstable nuclei arranged in a 30 x 20 lattice on the left // half of the canvas. Each frame, every undecayed nucleus has an // independent per-step decay probability // // p_step = 1 - exp(-lambda * dt) // // (NOT the small-dt approximation lambda * dt -- that breaks visibly // when t_half is short; cf. P5_JS_EDITOR section 5, "Nuclear // microsims".) // // The right half is a live decay-curve plot: number-undecayed // N(t) versus time, with the canonical exponential overlay // // N(t) = N_0 * exp(-lambda * t) // // drawn as a translucent reference curve. The reader watches the // stochastic sample (drawn as a yellow trajectory) sit on top of the // smooth exponential, and sees how the random sample fluctuates // around the mean for small N. // // Canonical relations: // // t_half = ln(2) / lambda // lambda = ln(2) / t_half // mean lifetime tau = 1 / lambda // activity A(t) = lambda * N(t) // // Half-life landmarks (just for the slider hint text): // // polonium-214 164 microseconds (alpha) // oxygen-15 122 seconds (beta+, PET) // fluorine-18 109.7 minutes (beta+, PET) // technetium-99m 6.0 hours (gamma, SPECT) // iodine-131 8.02 days (beta-, thyroid) // tritium (3H) 12.32 years (beta-, -> He-3) // carbon-14 5,730 years (radiocarbon) // uranium-235 7.04e8 years (alpha, chain) // uranium-238 4.47e9 years (alpha, chain) // // The most direct helium link: tritium beta-decays to helium-3 with // t_half = 12.32 yr, making decayed-tritium the dominant terrestrial // source of He-3 for neutron detectors and dilution refrigerators. // // Discovery: Ernest Rutherford (1907), from radium-daughter activity // measurements. The exponential form has been re-derived in every // first-order rate context since -- pharmacokinetics, RC discharge, // chemical kinetics, capacitor leakage. Same equation everywhere. // // Visual layout (720 x 520 canvas): // * top-left: HUD title + en.wikitube.io/wiki/Half-life subtitle // * top-right: control hints // * left half: 30 x 20 nucleus lattice; intact = cyan, decayed = grey ghost // a brief yellow flash + radial alpha particle puff at each decay // * right half: time-axis decay-curve plot // - smooth exponential reference (translucent) // - sampled trajectory (yellow), redraw on reset // - horizontal dashed line at N_0 / 2 // - vertical dashed line at t = t_half // * bottom: live readout (intact / decayed / t / lambda / activity) // + canonical equation t_half = ln(2) / lambda // * controls: half-life slider (log scale), time-rate slider, reset button // // 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 lambda, dots, arrows) lives in COMMENTS ONLY; // every text() string literal is ASCII (editor preview pipeline // mangles non-ASCII in user-facing strings) // * Energy-room palette (P5_JS_EDITOR section 4): dark BG, HOT/COLD // tones, STRUCT grey, TRAJ yellow accent // * sliders all use .position(x,y).size(w) -- no floating defaults // ===================================================================== const ARTICLE = 'Half-life'; 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: alpha-puff at decay event const COLD = [60, 130, 220]; // cool: intact nucleus const COLDER = [40, 80, 180]; // deeper cool: nucleus highlight const STRUCT = [120, 130, 150]; // structural grey: decayed ghost const TRAJ = [240, 220, 80]; // sampled-trajectory yellow const SCRATCH = [120, 120, 120, 90]; // grid / scratch lines const ACCENT = [200, 100, 220]; // t_half landmark line // ----- Lattice geometry ----------------------------------------------- const GRID_NX = 30; // 30 columns const GRID_NY = 20; // 20 rows -> 600 nuclei const N0 = GRID_NX * GRID_NY; // initial population // ----- Plot geometry (right half of canvas) -------------------------- let latticeX, latticeY, latticeW, latticeH; // left-half lattice rect let plotX, plotY, plotW, plotH; // right-half curve rect // Plot data ranges: x in seconds, y in counts. // T_MAX adapts so the curve never runs off the right edge (5 * t_half). let T_MAX = 5; // ----- Simulation state ---------------------------------------------- let tHalf = 4.0; // seconds; slider-driven let lambdaDecay = Math.log(2) / 4.0; let timeScale = 1.0; // simulation-seconds per wall-second; slider-driven let nuclei = []; // array of {x, y, alive, deathT, flashT, vx, vy, fade} let simTime = 0; // simulation seconds elapsed let intact = N0; let decayed = 0; let trajectory = []; // array of {t, n} sampled each frame -- the yellow curve // ----- DOM controls (set in setup, kept in module scope) ------------- let halfLifeSlider, timeRateSlider, resetButton; // ----- Decay-flash particles (radial puffs at each decay event) ------ let puffs = []; // array of {x, y, t0, life} function setup() { createCanvas(720, 520); pixelDensity(2); textFont('system-ui'); // ------------ layout: lattice on the left, plot on the right ------ // HUD reserves y=0..60 at the top, controls reserve y=460..520 at bottom. latticeX = 14; latticeY = 64; latticeW = 320; latticeH = 360; plotX = 360; plotY = 70; plotW = width - plotX - 14; // ~346 px wide plotH = 354; // ------------ build the nucleus lattice -------------------------- buildLattice(); // ------------ DOM controls --------------------------------------- // Half-life slider: log-scale, 0.5 s to 30 s (slider raw value is log10(t_half * 10)) // We use plain range and treat it as log inside. halfLifeSlider = createSlider(-1.0, 1.5, Math.log10(tHalf), 0.001); halfLifeSlider.position(70, 470); halfLifeSlider.size(180); // Time-rate slider: simulation seconds per wall-second, linear 0.1 .. 8.0 timeRateSlider = createSlider(0.1, 8.0, 1.0, 0.05); timeRateSlider.position(380, 470); timeRateSlider.size(140); // Reset button resetButton = createButton('reset'); resetButton.position(560, 467); resetButton.size(60, 22); resetButton.mousePressed(resetSimulation); } function draw() { background(BG); // ------- pull current slider values ------------------------------ // Half-life: raw slider value is log10(t_half in seconds) const newTHalf = Math.pow(10, halfLifeSlider.value()); if (Math.abs(newTHalf - tHalf) > 1e-6) { tHalf = newTHalf; lambdaDecay = Math.log(2) / tHalf; T_MAX = 5 * tHalf; // re-fit plot x-axis } timeScale = timeRateSlider.value(); // ------- advance simulation -------------------------------------- // dt clamp per P5_JS_EDITOR Nuclear section: never integrate > 0.05 s // per frame, so a paused tab can't blow up the integrator on resume. const dtWall = min(deltaTime / 1000, 0.05); const dtSim = dtWall * timeScale; simTime += dtSim; // Stochastic decay step (per Nuclear-section guidance, line 312). const pStep = 1 - Math.exp(-lambdaDecay * dtSim); for (let i = 0; i < nuclei.length; i++) { const n = nuclei[i]; if (!n.alive) continue; if (random() < pStep) { n.alive = false; n.deathT = simTime; n.flashT = 0.0; n.vx = random(-1, 1); n.vy = random(-1, 1); intact--; decayed++; // Spawn an alpha-puff particle (visual flourish). puffs.push({ x: n.x, y: n.y, t0: simTime, life: 0.45 }); } else { // intact: gentle breathing animation so the lattice doesn't feel frozen } } // Sample trajectory (one point per frame, capped). trajectory.push({ t: simTime, n: intact }); if (trajectory.length > 4000) trajectory.shift(); // Decay puff aging (drop expired entries from the tail). // Note: puffs are append-only and shrink only when the oldest expires; // since dtSim is monotonic the head is always the oldest. while (puffs.length && simTime - puffs[0].t0 > puffs[0].life) puffs.shift(); // ------- draw ----------------------------------------------------- drawLattice(); drawDecayPlot(); drawHUD(); drawControlLabels(); } // ===================================================================== // Lattice (left half) -- 30 x 20 nuclei // ===================================================================== function buildLattice() { nuclei = []; const dx = latticeW / (GRID_NX + 1); const dy = latticeH / (GRID_NY + 1); for (let row = 0; row < GRID_NY; row++) { for (let col = 0; col < GRID_NX; col++) { nuclei.push({ x: latticeX + dx * (col + 1), y: latticeY + dy * (row + 1), alive: true, deathT: 0, flashT: 0, vx: 0, vy: 0, fade: 0 }); } } } function drawLattice() { // Lattice container outline noFill(); stroke(...SCRATCH); strokeWeight(1); rect(latticeX - 4, latticeY - 4, latticeW + 8, latticeH + 8); // Nuclei noStroke(); for (let i = 0; i < nuclei.length; i++) { const n = nuclei[i]; if (n.alive) { // intact -- cyan filled circle with a thin highlight fill(...COLD); circle(n.x, n.y, 7); fill(160, 220, 255, 200); circle(n.x - 1.2, n.y - 1.2, 2.4); } else { // decayed -- grey ghost, slightly faded const ageSinceDeath = simTime - n.deathT; const ghostAlpha = constrain(map(ageSinceDeath, 0, 1.5, 200, 90), 90, 200); fill(STRUCT[0], STRUCT[1], STRUCT[2], ghostAlpha); circle(n.x, n.y, 5); } } // Decay puffs (alpha-particle visual, painted on top of lattice) for (let i = 0; i < puffs.length; i++) { const p = puffs[i]; const age = simTime - p.t0; const f = age / p.life; // 0..1 if (f < 0 || f > 1) continue; const r = lerp(4, 28, f); const a = lerp(220, 0, f); noFill(); stroke(HOT[0], HOT[1], HOT[2], a); strokeWeight(2); circle(p.x, p.y, r * 2); } } // ===================================================================== // Decay curve (right half) -- N(t) overlay, with t_half landmark // ===================================================================== function drawDecayPlot() { // Plot rect outline noFill(); stroke(...SCRATCH); strokeWeight(1); rect(plotX, plotY, plotW, plotH); // Axes labels noStroke(); fill(...DIM); textAlign(CENTER, TOP); textSize(10); text('time (s)', plotX + plotW / 2, plotY + plotH + 4); push(); translate(plotX - 8, plotY + plotH / 2); rotate(-PI / 2); textAlign(CENTER, BOTTOM); text('N(t)', 0, 0); pop(); // x-axis tick marks at 0, t_half, 2*t_half, 3*t_half, 4*t_half, 5*t_half textAlign(CENTER, TOP); for (let k = 0; k <= 5; k++) { const tk = k * tHalf; const px = map(tk, 0, T_MAX, plotX, plotX + plotW); stroke(...SCRATCH); line(px, plotY + plotH, px, plotY + plotH + 4); noStroke(); fill(...DIM); textSize(9); text(nf(tk, 0, 1), px, plotY + plotH + 14); } // y-axis tick marks at 0, N_0/4, N_0/2, 3N_0/4, N_0 textAlign(RIGHT, CENTER); for (let k = 0; k <= 4; k++) { const yval = (k / 4) * N0; const py = map(yval, 0, N0, plotY + plotH, plotY); stroke(...SCRATCH); line(plotX - 4, py, plotX, py); noStroke(); fill(...DIM); textSize(9); text(yval.toFixed(0), plotX - 6, py); } // Horizontal dashed reference line at N_0 / 2 (the half-life landmark) drawDashedLine( plotX, map(N0 / 2, 0, N0, plotY + plotH, plotY), plotX + plotW, map(N0 / 2, 0, N0, plotY + plotH, plotY), ACCENT, 6, 4 ); // Vertical dashed reference line at t = t_half const pxHalf = map(tHalf, 0, T_MAX, plotX, plotX + plotW); drawDashedLine( pxHalf, plotY, pxHalf, plotY + plotH, ACCENT, 6, 4 ); noStroke(); fill(ACCENT[0], ACCENT[1], ACCENT[2], 200); textSize(10); textAlign(LEFT, TOP); text('t_half', pxHalf + 4, plotY + 4); textAlign(LEFT, CENTER); text('N_0 / 2', plotX + plotW - 50, map(N0 / 2, 0, N0, plotY + plotH, plotY) - 8); // Smooth exponential reference curve N(t) = N_0 * exp(-lambda * t) noFill(); stroke(120, 200, 255, 180); strokeWeight(1.4); beginShape(); const steps = 240; for (let i = 0; i <= steps; i++) { const t = (i / steps) * T_MAX; const n = N0 * Math.exp(-lambdaDecay * t); const px = map(t, 0, T_MAX, plotX, plotX + plotW); const py = map(n, 0, N0, plotY + plotH, plotY); vertex(px, py); } endShape(); // Sampled (stochastic) trajectory -- yellow stroke(...TRAJ); strokeWeight(1.8); beginShape(); for (let i = 0; i < trajectory.length; i++) { const p = trajectory[i]; if (p.t > T_MAX) break; const px = map(p.t, 0, T_MAX, plotX, plotX + plotW); const py = map(p.n, 0, N0, plotY + plotH, plotY); vertex(px, py); } endShape(); // Trajectory head dot (current point) if (trajectory.length) { const p = trajectory[trajectory.length - 1]; if (p.t <= T_MAX) { const px = map(p.t, 0, T_MAX, plotX, plotX + plotW); const py = map(p.n, 0, N0, plotY + plotH, plotY); noStroke(); fill(...TRAJ); circle(px, py, 6); } } } // ===================================================================== // Dashed-line helper (p5 has no native dash mode) // ===================================================================== function drawDashedLine(x1, y1, x2, y2, col, dashLen, gapLen) { stroke(col[0], col[1], col[2], 160); strokeWeight(1); const total = dist(x1, y1, x2, y2); const dx = (x2 - x1) / total; const dy = (y2 - y1) / total; let drawn = 0; while (drawn < total) { const seg = Math.min(dashLen, total - drawn); line( x1 + dx * drawn, y1 + dy * drawn, x1 + dx * (drawn + seg), y1 + dy * (drawn + seg) ); drawn += dashLen + gapLen; } } // ===================================================================== // HUD // ===================================================================== function drawHUD() { // Top-left: title + Wikitube URL (Betterfire Standard rule 2) noStroke(); fill(FG); textAlign(LEFT, TOP); textSize(22); text(TITLE, 14, 14); fill(...DIM); textSize(12); text('Wikitube microsim . en.wikitube.io/wiki/Half-life', 14, 40); // Top-right: control hints textAlign(RIGHT, TOP); textSize(10); fill(...DIM); text('blue dot: intact nucleus', width - 14, 14); text('grey dot: decayed (emitted alpha)', width - 14, 26); text('yellow: sampled N(t); blue: mean', width - 14, 38); // Bottom-left: live readout const activity = lambdaDecay * intact; // decays/sec (mean rate) const meanLife = 1 / lambdaDecay; fill(...DIM); textAlign(LEFT, BOTTOM); textSize(11); text('intact: ' + intact + ' / ' + N0 + ' decayed: ' + decayed + ' t = ' + nf(simTime, 0, 2) + ' s', 14, height - 60); fill(FG); textSize(12); text('t_half = ' + nf(tHalf, 0, 3) + ' s' + ' lambda = ' + nf(lambdaDecay, 0, 4) + ' /s' + ' tau = ' + nf(meanLife, 0, 3) + ' s' + ' activity = ' + nf(activity, 0, 2) + ' /s', 14, height - 44); // Bottom-right: canonical equation (Betterfire Standard rule 4) textAlign(RIGHT, BOTTOM); fill(FG); textSize(13); text('t_half = ln(2) / lambda N(t) = N_0 * exp(-lambda * t)', width - 14, height - 44); } function drawControlLabels() { // Slider labels just above the slider widgets noStroke(); fill(...DIM); textSize(10); textAlign(LEFT, BOTTOM); text('t_half (log scale, ' + nf(tHalf, 0, 2) + ' s)', 14, 466); text('time rate (' + nf(timeScale, 0, 2) + ' x)', 320, 466); } // ===================================================================== // Reset // ===================================================================== function resetSimulation() { buildLattice(); simTime = 0; intact = N0; decayed = 0; trajectory = []; puffs = []; } // ===================================================================== // End of Half-life.js -- Wikitube microsim, Helium room, Pattern E + D. // ===================================================================== ``` ## Links (Wikipedia order) <!-- injected from _registry/childlinks/Half-life.json (2026-07-30T02:09:12Z) --> `1984_Moroccan_radiation_accident` · `1996_San_Juan_de_Dios_radiotherapy_accident` · `Acoustic_radiation_force` · `Acute_radiation_syndrome` · [[Alpha_particle]] · `Askaryan_radiation` · `Atom` · `Atomic_nucleus` · `Background_radiation` · `Basic_reproduction_number` · `Bernoulli_trial` · `Beta_particle` · `Biological_half-life` · `Black-body_radiation` · `Blood_plasma` · `Bremsstrahlung` · [[Caesium]] · [[Chemical_element]] · `Chemical_kinetics` · `Chemical_reaction` · `Cherenkov_radiation` · `Chronic_radiation_syndrome` · `Cluster_decay` · `Compound_interest` · `Computer_program` · `Concentration` · `Cosmic_background_radiation` · `Cosmic_ray` · `Dark_radiation` · `Derangement` · `Dosimetry` · [[Doubling_time]] · `E_(mathematical_constant)` · `Earth's_energy_budget` · `Electromagnetic_radiation` · `Electromagnetic_radiation_and_health` · `Environmental_impact_of_pesticides` · `Ernest_Rutherford` · `Euler's_formula` · `Euler's_identity` · [[Expected_value]] · `Exponential_decay` · `Exponential_function` · `Exponential_growth` · `Gamma_ray` · `Goiânia_accident` · `Half-life_(disambiguation)` · `Half_time_(physics)` · `Health_physics` · [[Heat_transfer]] · `Infrared` · `Ionizing_radiation` · `Isotope` · `John_Napier` · `Laser_safety` · `Lasers_and_aviation_safety` · `Law_of_large_numbers` · `Leonhard_Euler` · `Light` · `Lindemann–Weierstrass_theorem` · `Linear_energy_transfer` · `List_of_civilian_radiation_accidents` · `List_of_nuclides` · `List_of_radioactive_nuclides_by_half-life` · `List_of_representations_of_e` · `Median_lethal_dose` · `Metabolite` · `Microwave` · `Mole_(unit)` · `Natural_logarithm` · `Natural_logarithm_of_2` · `Neutron_radiation` · `Non-ionizing_radiation` · `Nuclear_fission` · [[Nuclear_fusion]] · `Nuclear_physics` · `Nuclear_reactor` · `Nuclear_weapon` · `Particle_accelerator` · `Particle_radiation` · `Pesticide` · `Plant` · `Princeton_University_Press` · [[Probability]] · [[Probability_density_function]] · `Probability_theory` · `Proof_that_e_is_irrational` · `RC_circuit` · `RL_circuit` · `Radiation` · `Radiation_damage` · `Radiation_exposure` · `Radiation_hardening` · `Radiation_protection` · `Radiation_therapy` · `Radio_wave` · `Radioactive_contamination` · [[Radioactive_decay]] · `Radioactive_source` · `Radioactivity_in_the_life_sciences` · `Radiobiology` · `Radionuclide` · [[Radium]] · `Rate_equation` · `Reaction_rate_constant` · `Receptor_(biochemistry)` · `Richard_A._Muller` · `Schanuel's_conjecture` · `Sievert` · `Starlight` · `Sunlight` · `Synchrotron_radiation` · `Thermal_radiation` · `Tissue_(biology)` · `Ultraviolet` · `Wireless_device_radiation_and_health` · `X-ray` ## Media (PD/CC) <!-- MEDIA-DEPLOY:Half-life/Halflife-sim.gif --> !Gif Library/Radioactive decay/Halflife-sim.gif *Halflife-sim.gif · Public domain* <!-- /MEDIA-DEPLOY --> <!-- SIGN-SYSTEMS:START --> **Semiotic universals** (the notations and alphabet letters this article speaks — each opens its canonical card): kanji radicals · logic notation · exponential · lattice · probability. Index: the glyph gallery · SEMIOTICS PORTAL. <!-- SIGN-SYSTEMS:END --> > **Room:** [[Helium]] · **Status:** ✅ shipped ## Overview Half-life is the time required for a quantity that decays exponentially to fall to half of its initial value. In nuclear [[Physics|physics]] it denotes the median lifetime of a radioactive nuclide: each unstable nucleus has a constant probability per unit time of decaying, so a large population shrinks as N(t) = N₀ exp(-λt), where λ is the decay constant and t½ = ln(2)/λ ≈ 0.693/λ. The concept was formalized by Ernest Rutherford in 1907 after his measurements of the activity of radium and its daughters, and the same exponential form is shared by pharmacokinetic elimination, RC-circuit discharge, and any first-order rate process. Observed half-lives span sixty orders of magnitude, from polonium-214 (164 microseconds) to tellurium-128 (2.2×10²⁴ years). Carbon-14, with t½ ≈ 5,730 years, anchors radiocarbon dating; uranium-238 (4.47×10⁹ years) anchors geochronology. Medical isotopes are chosen by half-life: fluorine-18 (110 min) for PET, technetium-99m (6 h) for SPECT, iodine-131 (8 d) for thyroid therapy. The most direct helium link is tritium (³H), which beta-decays to helium-3 with t½ = 12.32 years, making decayed weapons-stockpile tritium the dominant terrestrial source of ³He for [[Neutron|neutron]] detectors, dilution refrigerators, and proposed aneutronic fusion fuel. ## See also - Room hub: [[Helium]] - p5.js Editor conventions: P5 JS EDITOR - Wiki root: MAIN --- *Scaffolded by `generative-microsim` from row 153 of the Helium sheet on 2026-05-14T19:47:51Z.* <!-- 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/Half-life) : [Wikitube](https://en.wikitube.io/wiki/Half-life) ## Previous hub tags Tree parents: [[Helium]] · [[Helium-3]] · [[Hydrogen]] · [[Oxygen]]. Legacy hubs: `GENERATIVE`. --- *Sources: 2 legacy notes. Minted wave 1, 2026-07-30 (v1.6 order).*