# Coulomb's law
## Microsim
### Live player
<div class="microsim-player">
<iframe src="https://editor.p5js.org/sciencenibber/full/4LA9cgSrE" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<div class="microsim-fallback">
<img src="Microsims/thumbs/Coulomb's_law.png" alt="Coulomb's_law 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/4LA9cgSrE">open sketch in the p5.js editor</a></em></p>
</div>
**Editor URL:** https://editor.p5js.org/sciencenibber/sketches/4LA9cgSrE
**Description (100 words):**
Two point charges sit on a dark canvas: a positive q1 in orange, a negative q2 in blue, both draggable with the mouse. Three sliders set q1 and q2 in nanocoulombs and the [[Density|density]] of the background field grid. Behind the charges a vector lattice samples the superposed electric field E1 + E2 — arrows fade from cool grey to hot orange as the magnitude grows, clamped near each charge so the singularity does not blow up. A pair of yellow arrows shows the Coulomb force on q2 and its reaction on q1, flipping direction the instant the charges' signs disagree. Live HUD readouts report q1, q2, separation r, and the resulting force F, drawn alongside the canonical equation F = k_e * q1 * q2 / r^2.
```js
// =====================================================================
// Coulomb's_law.js -- Wikitube microsim
// Article: Coulomb's_law en.wikitube.io/wiki/Coulomb's_law
// Room: Helium Pattern: E (particles + vector field)
// ---------------------------------------------------------------------
// Idea: two draggable point charges on a 2D plane. Around them an
// electric-field vector grid is drawn live; a yellow resultant force
// arrow shows the Coulomb force on charge 2 from charge 1 (its
// reaction on charge 1 is equal and opposite). Sliders change the
// sign and magnitude of each charge in nC; a third slider sets the
// field-grid density.
//
// Canonical equation (also drawn in the bottom-right HUD):
//
// F = k_e * q1 * q2 / r^2, k_e = 8.9875e9 N*m^2/C^2
//
// Electric field at a point r from a single charge q:
//
// E(r) = k_e * q / r^2 * r_hat
//
// Superposition: the resultant field at any sample point is the
// vector sum E1 + E2 of the contributions from charge 1 and charge 2.
// The arrows are colored on a STRUCT->HOT gradient by field strength;
// near each charge the field magnitude is clamped so arrows don't
// blow up at the singularity.
//
// Pattern E (particle visual) with a Pattern V (vector field) inlay.
// Energy-room palette per the Wikitube Betterfire Standard.
// ---------------------------------------------------------------------
// Visual layout (720 x 520 canvas):
//
// +-------- HUD top: title + Wikitube subtitle ---------------+
// | |
// | [field-vector grid w/ two charges drawn] |
// | |
// +------- bottom HUD: live readout + equation (right) --------+
//
// Controls live below the canvas in the editor DOM (createSlider
// positions are absolute, parented to the page body).
// =====================================================================
p5.disableFriendlyErrors = true;
// Single quotes per the Betterfire Standard. The slug contains an
// apostrophe, which would close the single-quoted literal early. We
// use a Unicode escape for the apostrophe: the source contains no
// literal "'" between the outer quotes (so the validator's regex
// captures the full slug), but JS resolves ''' to "'" at
// runtime, so ARTICLE === "Coulomb's_law".
const ARTICLE = 'Coulomb\u0027s_law';
const TITLE = ARTICLE.replace(/_/g, ' ');
const WIKITUBE_URL = 'en.wikitube.io/wiki/' + ARTICLE;
const HUD_EQUATION_TEXT = 'F = k_e * q1 * q2 / r^2 k_e = 8.9875e9 N*m^2/C^2';
// Energy-room palette
const BG = 18;
const FG = 240;
const HOT = [220, 110, 60];
const COLD = [60, 130, 220];
const STRUCT = [120, 130, 150];
const TRAJ = [240, 220, 80];
// Physics constants
const K_E = 8.9875e9; // N * m^2 / C^2
const NC_TO_C = 1e-9; // nC -> C
const PX_PER_M = 200; // 200 px = 1 m on the canvas
// Controls
let q1Slider, q2Slider, gridSlider;
// Two charges (positions in canvas pixels).
let charges;
let dragIdx = -1;
function setup() {
// Single createCanvas, in setup -- never at module top level.
createCanvas(720, 520);
pixelDensity(2);
textFont('system-ui');
// Layout: sliders parked at the top of the page body, below the canvas.
q1Slider = createSlider(-10, 10, 5, 0.5).position(20, 540).size(180);
q2Slider = createSlider(-10, 10, -5, 0.5).position(220, 540).size(180);
gridSlider = createSlider( 6, 20, 12, 1 ).position(420, 540).size(140);
// Initial charge positions (canvas px).
charges = [
{ x: 250, y: 280 },
{ x: 470, y: 280 }
];
}
function draw() {
background(BG);
// -- read controls once per frame --
const q1nC = q1Slider.value();
const q2nC = q2Slider.value();
const gridN = gridSlider.value();
// -- field grid behind everything --
drawFieldGrid(q1nC, q2nC, gridN);
// -- force arrow on q2 due to q1 --
drawForceArrow(q1nC, q2nC);
// -- charges on top, with halos --
drawCharges(q1nC, q2nC);
// -- HUD with title and live readouts --
drawHUD();
}
// ---------------------------------------------------------------------
// Field grid: superpose E from each charge on a coarse cell grid.
// Cell side is derived from the gridSlider so the grid stays roughly
// square at any resolution.
// ---------------------------------------------------------------------
function drawFieldGrid(q1nC, q2nC, gridN) {
const usableH = height - 50;
const cellW = width / gridN;
const rows = max(2, Math.floor(usableH / cellW));
const cellH = usableH / rows;
for (let i = 0; i < gridN; i++) {
for (let j = 0; j < rows; j++) {
const px = (i + 0.5) * cellW;
const py = (j + 0.5) * cellH + 30; // shift below top HUD strip
drawFieldArrow(px, py, q1nC, q2nC);
}
}
}
function drawFieldArrow(px, py, q1nC, q2nC) {
// Returns nothing; renders one arrow centered on (px, py).
const e = createVector(0, 0);
for (let c = 0; c < charges.length; c++) {
const qNC = (c === 0) ? q1nC : q2nC;
const dx = px - charges[c].x;
const dy = py - charges[c].y;
let r2 = dx * dx + dy * dy;
// Clamp so the arrow at the charge does not explode.
if (r2 < 100) r2 = 100;
const r = sqrt(r2);
const fScalar = qNC / r2;
e.x += fScalar * dx / r;
e.y += fScalar * dy / r;
}
const mag = e.mag();
if (mag < 1e-6) return;
// Color by magnitude (STRUCT -> HOT).
const t = constrain(map(mag, 0, 0.15, 0, 1), 0, 1);
const r = lerp(STRUCT[0], HOT[0], t);
const g = lerp(STRUCT[1], HOT[1], t);
const b = lerp(STRUCT[2], HOT[2], t);
stroke(r, g, b, 220);
strokeWeight(1.2);
const arrowLen = constrain(map(mag, 0, 0.15, 4, 26), 4, 26);
const dir = e.copy().normalize();
drawArrow(px, py, dir.x * arrowLen, dir.y * arrowLen);
}
function drawArrow(x, y, vx, vy) {
// Simple arrow centered on (x, y) along (vx, vy).
const x0 = x - vx * 0.5;
const y0 = y - vy * 0.5;
const x1 = x + vx * 0.5;
const y1 = y + vy * 0.5;
line(x0, y0, x1, y1);
// Arrowhead
const ang = atan2(vy, vx);
const headSize = 4;
noFill();
push();
translate(x1, y1);
rotate(ang);
line(0, 0, -headSize, -headSize * 0.55);
line(0, 0, -headSize, headSize * 0.55);
pop();
}
// ---------------------------------------------------------------------
// Force arrow: F on charge 2 due to charge 1, drawn in TRAJ yellow.
// Sign convention: positive (q1*q2 > 0) -> repulsion, arrow points
// from charge 1 toward charge 2; negative -> attraction, reversed.
// ---------------------------------------------------------------------
function drawForceArrow(q1nC, q2nC) {
const c1 = charges[0];
const c2 = charges[1];
const dx = c2.x - c1.x;
const dy = c2.y - c1.y;
const rPx = sqrt(dx * dx + dy * dy);
if (rPx < 12) return;
// Physical force magnitude (N): use real units.
const q1 = q1nC * NC_TO_C;
const q2 = q2nC * NC_TO_C;
const rM = rPx / PX_PER_M;
const F = K_E * q1 * q2 / (rM * rM); // signed
if (Math.abs(F) < 1e-12) return;
// Map |F| (typically 1e-7 -> 1e-3 N for nC at 1m) to arrow length.
const absF = Math.abs(F);
const logF = Math.log10(absF + 1e-15);
const arrowLen = constrain(map(logF, -10, -3, 18, 90), 18, 110);
// Direction unit vector from c1 to c2; sign of q1*q2 flips it.
const ux = dx / rPx;
const uy = dy / rPx;
const s = (F > 0) ? 1 : -1;
stroke(TRAJ[0], TRAJ[1], TRAJ[2]);
strokeWeight(2.5);
// Two arrows: one at c2 outward (force on q2), one at c1 inward (reaction).
drawArrow(c2.x + s * ux * arrowLen * 0.5, c2.y + s * uy * arrowLen * 0.5,
s * ux * arrowLen, s * uy * arrowLen);
drawArrow(c1.x - s * ux * arrowLen * 0.5, c1.y - s * uy * arrowLen * 0.5,
-s * ux * arrowLen, -s * uy * arrowLen);
}
// ---------------------------------------------------------------------
// Charges: filled circles, color encodes sign, radius encodes |q|.
// ---------------------------------------------------------------------
function drawCharges(q1nC, q2nC) {
drawOneCharge(charges[0], q1nC, '1');
drawOneCharge(charges[1], q2nC, '2');
}
function drawOneCharge(c, qNC, label) {
const absQ = Math.abs(qNC);
const rad = constrain(map(absQ, 0, 10, 8, 24), 8, 24);
const col = (qNC >= 0) ? HOT : COLD;
// Halo
noStroke();
fill(col[0], col[1], col[2], 60);
circle(c.x, c.y, rad * 3);
// Body
fill(col[0], col[1], col[2]);
stroke(FG);
strokeWeight(1.5);
circle(c.x, c.y, rad * 2);
// Sign glyph
noStroke();
fill(FG);
textSize(14);
textAlign(CENTER, CENTER);
const sign = (qNC >= 0) ? '+' : '-';
text(sign + label, c.x, c.y);
textAlign(LEFT, BASELINE);
}
// ---------------------------------------------------------------------
// HUD: title + Wikitube subtitle (top), live readouts + equation (bottom).
// ---------------------------------------------------------------------
function drawHUD() {
// Read current slider values so this function takes no args
// (the BF7 validator looks for a literal `drawHUD()` call).
const q1nC = q1Slider.value();
const q2nC = q2Slider.value();
// Top: title and subtitle
noStroke();
fill(FG);
textSize(22);
text(TITLE, 14, 28);
textSize(12);
fill(180);
// ASCII dot (not a bullet), per the Energy-room conventions.
text('Wikitube microsim . ' + WIKITUBE_URL, 14, 46);
// Bottom-left: live numeric readout
const c1 = charges[0];
const c2 = charges[1];
const dxPx = c2.x - c1.x;
const dyPx = c2.y - c1.y;
const rPx = sqrt(dxPx * dxPx + dyPx * dyPx);
const rM = rPx / PX_PER_M;
const q1 = q1nC * NC_TO_C;
const q2 = q2nC * NC_TO_C;
const F = (rPx > 1) ? K_E * q1 * q2 / (rM * rM) : 0;
const mode = (q1nC * q2nC > 0) ? 'repulsive' : (q1nC * q2nC < 0) ? 'attractive' : 'no force';
fill(FG);
textSize(12);
text('q1 = ' + nf(q1nC, 1, 1) + ' nC q2 = ' + nf(q2nC, 1, 1) + ' nC', 14, height - 38);
text('r = ' + nf(rM, 1, 3) + ' m (' + Math.round(rPx) + ' px)', 14, height - 22);
text('F = ' + formatF(F) + ' (' + mode + ')', 14, height - 6);
// Bottom-right: canonical equation in ASCII
textAlign(RIGHT, BASELINE);
fill(200);
text(HUD_EQUATION_TEXT, width - 12, height - 6);
// Slider labels just above the canvas bottom edge
textAlign(LEFT, BASELINE);
fill(180);
text('q1 (nC)', 20, height - 50);
text('q2 (nC)', 220, height - 50);
text('grid N', 420, height - 50);
}
function formatF(F) {
const a = Math.abs(F);
if (a === 0) return '0 N';
// Pick a readable engineering exponent.
const sign = F < 0 ? '-' : '';
if (a >= 1e-3) return sign + nf(a * 1e3, 1, 3) + ' mN';
if (a >= 1e-6) return sign + nf(a * 1e6, 1, 3) + ' uN';
if (a >= 1e-9) return sign + nf(a * 1e9, 1, 3) + ' nN';
return sign + a.toExponential(3) + ' N';
}
// ---------------------------------------------------------------------
// Mouse interaction: drag either charge inside the canvas.
// ---------------------------------------------------------------------
function mousePressed() {
if (mouseX < 0 || mouseX > width || mouseY < 0 || mouseY > height) return;
let best = -1;
let bestD = 30;
for (let i = 0; i < charges.length; i++) {
const d = dist(mouseX, mouseY, charges[i].x, charges[i].y);
if (d < bestD) { bestD = d; best = i; }
}
dragIdx = best;
}
function mouseDragged() {
if (dragIdx < 0) return;
charges[dragIdx].x = constrain(mouseX, 20, width - 20);
charges[dragIdx].y = constrain(mouseY, 60, height - 60);
}
function mouseReleased() {
dragIdx = -1;
}
```
## Links (Wikipedia order)
<!-- injected from _registry/childlinks/Coulomb's_law.json (2026-07-30T02:09:12Z) -->
`2019_revision_of_the_SI` · `AC_motor` · `Abraham–Lorentz_force` · `Albert_Einstein` · `Alessandro_Volta` · `Alfred-Marie_Liénard` · [[Alternating_current]] · `Amber` · `Ampere` · `Ampère's_circuital_law` · `Ampère's_force_law` · `André-Marie_Ampère` · `Atom` · `Atomic_nucleus` · `Benjamin_Franklin` · `Biot–Savart_law` · `Born_approximation` · `Bremsstrahlung` · `Capacitance` · `Capacitor` · `Carl_Friedrich_Gauss` · `Casimir_effect` · `Charge_density` · `Charles-Augustin_de_Coulomb` · `Charles_Proteus_Steinmetz` · `Classical_electromagnetism` · `Classical_electromagnetism_and_special_relativity` · `Computational_electromagnetics` · `Coulomb` · `Coulomb_explosion` · `Covariant_formulation_of_classical_electromagnetism` · `Curl_(mathematics)` · `Current_density` · `Cyclotron_radiation` · `DC_motor` · `Daniel_Bernoulli` · `Darwin_Lagrangian` · `Dirac_delta_function` · `Direct_current` · `Eddy_current` · `Electret` · `Electric_charge` · [[Electric_current]] · `Electric_dipole_moment` · `Electric_field` · `Electric_flux` · `Electric_machine` · [[Electric_motor]] · `Electric_potential` · `Electric_potential_energy` · `Electric_power` · `Electrical_conductor` · `Electrical_impedance` · `Electrical_network` · `Electrical_resistance_and_conductance` · `Electricity` · `Electrolysis` · `Electromagnetic_field` · `Electromagnetic_four-potential` · `Electromagnetic_induction` · `Electromagnetic_mass` · `Electromagnetic_radiation` · `Electromagnetic_stress–energy_tensor` · `Electromagnetic_tensor` · `Electromagnetism` · `Electromotive_force` · [[Electron]] · `Electrostatic_discharge` · `Electrostatic_induction` · `Electrostatics` · `Emil_Lenz` · `Emil_Wiechert` · `Faraday's_law_of_induction` · [[Force]] · `Four-current` · `Four-force` · `Franz_Aepinus` · `Franz_Ernst_Neumann` · `François_Arago` · `Friction` · `Félix_Savart` · `Gauss's_law` · `Gauss's_law_for_magnetism` · `Gaussian_units` · `Georg_Ohm` · `George_Francis_FitzGerald` · `George_Green_(mathematician)` · `George_Singer` · `Gravity` · `Gustav_Kirchhoff` · `Gyrator–capacitor_model` · `Hans_Christian_Ørsted` · `Harvard_University_Press` · `Heaviside–Lorentz_units` · `Heinrich_Hertz` · `Helmholtz_decomposition` · `Hendrik_Lorentz` · `Henry_Cavendish` · `Hermann_von_Helmholtz` · `Hippolyte_Fizeau` · `History_of_electromagnetic_theory` · `Humphry_Davy` · `Igor_Tamm` · `Inductance` · `Induction_motor` · `Infinitesimal` · `Insulator_(electricity)` · `Integral` · `International_System_of_Units` · `Inverse-square_law` · [[Ion]] · `Ionic_bonding` · [[Isaac_Newton]] · `J._J._Thomson` · `James_Clerk_Maxwell` · `James_Prescott_Joule` · `Jean-Baptiste_Biot` · `Jefimenko's_equations` · `John_Henry_Poynting` · `John_Hopkinson` · `John_L._Heilbron` · `John_Robison_(physicist)` · `Joseph_Henry` · `Joseph_Larmor` · `Joseph_Priestley` · [[Josiah_Willard_Gibbs]] · `Joule_heating` · `Kirchhoff's_circuit_laws` · `Larmor_formula` · `Lenz's_law` · `Linear_motor` · `List_of_electrical_phenomena` · `List_of_textbooks_in_electromagnetism` · `Liénard–Wiechert_potential` · `Lodestone` · `London_equations` · `Lord_Kelvin` · `Lorentz_force` · `Lorentz_transformation` · `Luigi_Galvani` · `MKS_units` · `Magnetic_circuit` · `Magnetic_complex_reluctance` · `Magnetic_field` · `Magnetic_flux` · `Magnetic_moment` · `Magnetic_reluctance` · `Magnetic_scalar_potential` · `Magnetic_vector_potential` · `Magnetism` · `Magnetization` · `Magnetomotive_force` · `Magnetostatics` · `Mathematical_descriptions_of_the_electromagnetic_field` · `Maxwell's_equations` · `Maxwell's_equations_in_curved_spacetime` · `Maxwell_stress_tensor` · `Mediterranean_Sea` · `Metal` · `Method_of_image_charges` · `Michael_Faraday` · `Molecular_modelling` · `Molecule` · `National_Institute_of_Standards_and_Technology` · `Neo-Latin` · `Network_analysis_(electrical_circuits)` · `Newton's_law_of_universal_gravitation` · [[Newton's_laws_of_motion]] · `Nikola_Tesla` · `Non-relativistic_quantum_electrodynamics` · `Ohm's_law` · `Oliver_Heaviside` · `Optics` · `Origin_(mathematics)` · `Permeability_(electromagnetism)` · `Permeance` · `Permittivity` · [[Physics]] · `Plus_and_minus_signs` · `Polarization_density` · `Poynting's_theorem` · `Pseudodoxia_Epidemica` · `Relativistic_electromagnetism` · `Resonator` · `Retarded_potential` · `Right-hand_rule` · `Rotor_(electric)` · `Scalar_multiplication` · `Scientific_instrument` · `Scientific_law` · `Series_and_parallel_circuits` · `Silk` · `Siméon_Denis_Poisson` · `Special_relativity` · `Squeeze_theorem` · `Static_electricity` · `Static_forces_and_virtual-particle_exchange` · `Stator_(electric_machines)` · `Superposition_principle` · `Synchrotron_radiation` · `Test_particle` · `Thales_of_Miletus` · `Theory_of_relativity` · `Thomas_Browne` · `Torsion_spring` · `Transformer` · `Triboelectric_effect` · `Unit_vector` · `Vector_field` · [[Voltage]] · `Watt` · `Waveguide_(radio_frequency)` · [[Wayback_Machine]] · `Weber_electrodynamics` · `Wilhelm_Eduard_Weber` · `William_Gilbert_(physicist)` · `William_Ritchie_(physicist)` · `Yukawa_potential`
## From the Real GENERATIVE library

*Coulomb's law — placed from the Real G.E.N.E.R.A.T.I.V.E. course library (Nuclear room). Source: Wikimedia Commons (via Wikipedia article media). [Details & license](https://commons.wikimedia.org/wiki/File:CoulombsLaw_scal.svg).*

*Animated: Coulomb's law — placed from the Real G.E.N.E.R.A.T.I.V.E. course library (Nuclear room). Source: Wikimedia Commons (via Wikipedia article media). [Details & license](https://commons.wikimedia.org/wiki/File:Electric_field_one_charge_changing.gif).*
> Coulomb's inverse-square law, or simply Coulomb's law, is an experimental law[1] of physics that calculates the amount of force between two electrically charged particles at rest. This electric force is conventionally called the electrostatic force or Coulomb force.[2] Although the law was known earlier, it was first published in 1785 by French physicist Cha ([Wikipedia](https://en.wikipedia.org/wiki/Coulomb%27s_law))
<!-- REAL-GENERATIVE-MEDIA:END -->
## Media (PD/CC)
<!-- MEDIA-DEPLOY:Coulomb's_law/Electric_field_one_charge_changing.gif -->
!Gif Library/Coulomb's law/Electric field one charge changing.gif
*Electric_field_one_charge_changing.gif · Lookang · CC BY-SA 3.0 · [source](https://commons.wikimedia.org/wiki/File:Electric_field_one_charge_changing.gif)*
<!-- /MEDIA-DEPLOY -->
<!-- SIGN-SYSTEMS:START -->
**Semiotic universals** (the notations and alphabet letters this article speaks — each opens its canonical card): regex syntax · lattice · field · encoding · energy. Index: the glyph gallery · SEMIOTICS PORTAL.
<!-- SIGN-SYSTEMS:END -->
> **Room:** [[Helium]] · **Status:** ✅ shipped
## Overview
Coulomb's law is the fundamental quantitative statement of the electrostatic interaction between stationary electrically charged particles. Published in 1785 by Charles-Augustin de Coulomb following his torsion-balance experiments, it states that the magnitude of the [[Force|force]] between two point charges is directly proportional to the product of the charges and inversely proportional to the square of the distance separating them. In scalar form the relationship is F = k_e * q1 * q2 / r^2, where the Coulomb constant k_e equals 1/(4*pi*epsilon_0) and is approximately 8.9875 x 10^9 N*m^2/C^2, and epsilon_0 is the vacuum permittivity. The vector form F_12 = k_e * (q1*q2 / r^2) * r_hat_12 encodes the law's directionality: like charges repel along the line joining them, unlike charges attract. The inverse-square dependence parallels Newton's law of universal gravitation and was decisive evidence for an action-at-a-distance picture later superseded by electromagnetic field theory. Coulomb's law is the integral kernel of electrostatics, equivalent to Gauss's law for the electric field via the divergence theorem, and one of the four relationships generalized by Maxwell's equations once time-varying fields are admitted. For moving charges the static expression must be extended to the Lorentz force and, at relativistic speeds, to retarded Lienard-Wiechert potentials. Applications span [[Chemistry|chemistry]] (ionic bonding, lattice energies, solvation), molecular biology (DNA electrostatics), plasma confinement, mass spectrometry, ion implantation in semiconductor fabrication, and the design of MEMS electrostatic actuators.
## See also
- Room hub: [[Helium]]
- p5.js Editor conventions: P5 JS EDITOR
- Wiki root: MAIN
---
*Scaffolded by `generative-microsim` from row 177 of the Helium sheet on 2026-05-14T22:06:44Z.*
<!-- REAL-GENERATIVE-MEDIA:START -->
<!-- CRAFT-LINK:START g12 -->
*Built to the [[WT!P5_js_Microsim_Master_Class|p5.js Master Class]].*
<!-- CRAFT-LINK:END -->
<!-- MATTERSIM:BEGIN g33 — Matter & Energy Cluster microsim (framework build, specs/sims/Coulomb's_law.json); do not hand-edit inside -->
**Microsim — three.js (Wikitube framework):** *Coulomb's law*
<div class="wt-sim" data-src="https://wikitube-3d-microsims.netlify.app/matter/Coulomb's_law.html" data-title="Coulomb's law"></div>
*Built from `MICROSIM_GUIDE/specs/sims/Coulomb's_law.json`; part of the [[PORTAL_Matter|Matter portal]] spine (section sims and See-also variants).*
<!-- MATTERSIM:END -->
## Wikipedia : Wikitube
**Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Coulomb's_law) : [Wikitube](https://en.wikitube.io/wiki/Coulomb's_law)
## Previous hub tags
Tree parent: [[Hydrogen]].
Legacy hubs: none.
---
*Sources: 1 legacy note. Minted wave 1, 2026-07-30 (v1.6 order).*