Roche limit calculator
With densities of 5514 and 3340 kg/m³ and a primary radius of 6371000 m, the rigid Roche limit is 9486901.0016 m and the fluid one 18372610.2884 m. Compare both breakup distances for moons, rings and rubble piles. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Primary density
- 5,514
- Satellite density
- 3,340
- Equatorial
- 6,371,000
- Density ratio
- 1.6508982036
- Cube root density ratio
- 1.1818801311
- Roche limit
- 9,486,901.0016
- Roche limit fluid
- 18,372,610.2884
The Roche limit is the critical centre-to-centre distance at which a satellite held together mainly by self-gravity is torn apart by the tidal field of its primary body. In the rigid closed form the distance is primary radius R times the cube root of two times the density ratio of primary over satellite; the classical fluid approximation multiplies R by about two point four four times the cube root of the same density ratio. Students and contest authors use equal-density checks that recover roughly one point two six primary radii for the rigid model; planetary scientists estimate where rings and rubble piles become unstable; mission planners compare planned flyby altitudes against a quick tidal-breakup scale before full multipole models. This calculator accepts two strictly positive densities and a strictly positive primary radius, returns both rigid and fluid Roche distances in the same length unit as the radius, exposes the density ratio and dimensionless multiples for audit, and rejects zero density so the cube-root ratio never becomes a silent Infinity or NaN. Negative densities and non-positive radius are also rejected with clear validation errors.
How the Roche limit formula works
Start from the classical picture that a satellite orbiting inside a critical distance experiences a tidal gradient strong enough that differential gravity across its diameter exceeds its own self-gravity binding. For a rigid spherical secondary the closed-form Roche limit is d equals R times the cube root of two times rho primary over rho satellite, where R is the primary radius and the two densities are mean bulk densities of the central body and the moon or rubble pile.
The factor of two arises from balancing self-gravity against the differential gravitational acceleration in the restricted three-body tidal expansion for a strengthless rigid body. When densities are equal the rigid limit collapses to R times the cube root of two, about one point two five nine nine primary radii, which is the standard equal-density homework checkpoint.
For fluid, tidally deformable secondaries the classical approximation multiplies R by roughly two point four four times the cube root of the density ratio, placing the fluid limit farther out because a fluid body deforms and sheds mass more readily. The calculator evaluates both closed forms in deterministic floating-point arithmetic: one division for the density ratio, one cube root, multiplies by R and the rigid or fluid prefactor, and no random seeds, wall-clock timestamps, network calls, or model drift.
Primary density and satellite density must each be finite and strictly positive; zero density fails with invalid input because the formulas divide by satellite density and a zero primary density is non-physical. Negative densities are rejected. Primary radius must likewise be finite and strictly positive so the distance scale is well defined.
This page intentionally uses the textbook rigid and fluid Roche limits only; full tidal multipoles, spin-synchronous strength models, eccentric periapsis passages, and atmospheric breakup are separate search intents and separate landings.
What you send and what you get back
Primary_density is the mean density of the central body and must be strictly greater than zero; for Earth use about five thousand five hundred fourteen kilograms per cubic metre, for the Sun about one thousand four hundred eight, and for Saturn about six hundred eighty-seven.
Satellite_density is the mean density of the secondary in the same density unit and must also be strictly greater than zero; for the Moon use about three thousand three hundred forty, for a fluid icy body use lower values, and for equal-density drills set both densities equal. Primary_radius is the equatorial or mean radius of the primary in metres or any consistent length unit and must be strictly greater than zero; for Earth use about six million three hundred seventy-one thousand metres.
Classic textbook checks include equal densities with unit radius recovering cube root of two for the rigid limit, and Earth density with Moon density at Earth radius recovering a rigid Roche distance of a few Earth radii from the centre. Keep units consistent: convert grams per cubic centimetre and kilometres to matching SI or any single density unit paired with a single length unit before calling so the numeric product matches the interpretation your report claims.
Where Roche limit calculators show up in real work
Secondary-school and introductory university astronomy and planetary-science courses assign tidal-breakup drills, equal-density checks, and ring-boundary estimates that rearrange the same density-ratio formula; a single trusted oracle speeds grading and demo setup. Planetary ring science and small-body mission concept teams convert tabulated densities and radii into rigid and fluid Roche distances before full strength and multipole models. Science communicators convert equal-density and ice-body cases into multiples of primary radii to illustrate why Saturn rings sit near the classical fluid limit.
Game and simulation authors seed tidal-disruption toy demos with closed-form Roche distances when they want a transparent ground truth without floating-point surprises from ad-hoc constants. If you later need Newtonian gravitational force between two masses, orbital period from semi-major axis and central mass, surface weight on other planets, or full tidal stress tensors, treat those as separate search intents and landings rather than overloading this Roche limit calculator page.
What you can do with it
Homework and exam answer keys
Compute rigid and fluid Roche distances from two densities and primary radius so students and auto-graders share one closed-form ground truth with audit intermediates.
Ring and rubble-pile stability checks
Estimate where a strengthless moon or icy body would disrupt around a planet by comparing orbital distance to rigid and fluid Roche limits.
Mission and planetarium demos
Turn tabulated planetary densities and radii into tidal-breakup scales for concept studies, exhibits, and curriculum widgets.
FAQ
What Roche limit formula does this calculator use?
Rigid closed form d = R · (2 · ρ_M / ρ_m)^(1/3) as the primary result, plus the classical fluid approximation d ≈ 2.44 · R · (ρ_M / ρ_m)^(1/3). Both use mean densities and primary radius only.
What happens if a density is zero?
The Roche limit divides by satellite density (and a zero primary density is non-physical); zero density is the explicit validation error for this capability.
What units should I use?
Any consistent pair: densities in the same unit (for example kg/m³) and radius in any length unit.
Why are there rigid and fluid results?
A rigid strengthless sphere balances self-gravity against tides with the exact factor (2·ratio)^(1/3). A fluid body deforms and the classical textbook coefficient is about 2.44 times R times the cube root of the density ratio. Both answer the same search intent.
What does it cost?
The browser tool is free and runs locally.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/astro/roche-limit \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"primary_density":5514,"satellite_density":3340,"primary_radius":6371000}'const res = await fetch("https://api.kit.forhosting.com/astro/roche-limit", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"primary_density": 5514,
"satellite_density": 3340,
"primary_radius": 6371000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/astro/roche-limit",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"primary_density": 5514,
"satellite_density": 3340,
"primary_radius": 6371000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/astro/roche-limit", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"primary_density":5514,"satellite_density":3340,"primary_radius":6371000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"primary_density":5514,"satellite_density":3340,"primary_radius":6371000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/astro/roche-limit", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"primary_density": 5514,
"satellite_density": 3340,
"primary_radius": 6371000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "astro.roche_limit",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
What you send and what you get back
Send three required finite numbers under the fields primary_density, satellite_density, and primary_radius. Missing fields, non-numeric strings, NaN, Infinity, zero or negative densities, and zero or negative radius fail with invalid_input and are not charged. On success the response echoes cleaned primary_density, satellite_density, and primary_radius, exposes density_ratio as primary over satellite, cube_root_density_ratio as the cube root of that ratio, roche_limit as the rigid SI or consistent-unit distance, roche_limit_fluid as the fluid approximation with coefficient two point four four, roche_in_radii and roche_fluid_in_radii as dimensionless multiples of R, fluid_coefficient, a units hint object, method roche_limit_rigid_and_fluid, and the formula string. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance.
Where Roche limit calculators show up in real work
Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.