Barrel twist rate calculator
A 0.308-inch bullet that is 1.2 inches long needs one turn every 11.858 inches of barrel, written 1:11.858, by Greenhill's formula. Enter the bullet's length and diameter in inches to compare the result with your barrel's twist. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Length
- 1.2
- Diameter
- 0.308
- Constant
- 150 in/turn
- Twist rate
- 11.858
- Display
- 1:11.858
- Equation
- T = 150 × 0.308² / 1.2 = 11.858
A barrel twist-rate calculator answers a practical ballistics question: how many inches of barrel should the rifling take to complete one full revolution so that a given bullet stays gyroscopically stable in flight. Sir Alfred Greenhill's classic formula T equals C times diameter squared over length still appears in reloading manuals, classroom notes, and hobbyist forums because it needs only bullet length, bullet diameter, and a conventional stability constant. Enter both dimensions in inches; this solver uses C equals 150 and returns the twist rate as one turn per T inches, together with a 1:T display string, the echoed inputs, and the substitution used.
What the Greenhill formula computes and how to read one turn per inch
The Greenhill formula estimates the barrel twist that gyroscopically stabilizes a spinning projectile. In the form used by reloaders and ballistics students, T equals C times D squared divided by L, where T is the distance in inches along the bore for one complete revolution of the rifling, D is the bullet diameter in inches, and L is the bullet length in inches.
The conventional stability constant C is 150 for typical small-arms velocities; that is the constant this calculator applies, and it is returned in the response so you can see which convention was used. Because diameter is squared, a fatter bullet at the same length needs a slower twist, meaning a larger T, while a longer bullet at the same diameter needs a faster twist, meaning a smaller T.
Length and diameter must be strictly positive finite numbers; a zero or negative dimension is physically meaningless for a bullet and is rejected.
What you can do with it
Reloading and barrel selection
Measure bullet length and diameter in inches, compute Greenhill T, and compare 1:T with the twist stamped on a candidate barrel before buying or chambering.
Classroom and homework checks
Students enter L and D from textbook Greenhill problems and verify one-turn-per-inch T, the squared-diameter effect, and rejection of non-positive dimensions.
FAQ
How do I compute barrel twist rate from bullet length and diameter?
Send finite positive numbers length (inches) and diameter (inches).
What happens if length or diameter is zero or negative?
Greenhill T = C × D² / L requires both dimensions strictly positive; zero length would divide by zero and a negative bullet is not physical. Failed validation is not billed.
What constant C does this Greenhill calculator use?
C equals 150, the conventional value for typical small-arms velocities.
Are millimetres accepted, or only inches?
Inputs are inches. Divide millimetres by 25.4 before calling. The result unit is in/turn (one turn per T inches), matching common barrel stamps such as 1:10.
Does a longer bullet need a faster twist?
Yes. At the same diameter, a longer bullet gives a smaller T, which means a faster twist. Diameter works the other way and counts squared, so a fatter bullet of the same length needs a slower twist, with a larger T.
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/phys/twist-rate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"length":1.2,"diameter":0.308}'const res = await fetch("https://api.kit.forhosting.com/phys/twist-rate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"length": 1.2,
"diameter": 0.308
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/phys/twist-rate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"length": 1.2,
"diameter": 0.308
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/phys/twist-rate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"length":1.2,"diameter":0.308}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"length":1.2,"diameter":0.308}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/phys/twist-rate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"length": 1.2,
"diameter": 0.308
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "phys.twist_rate",
"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.
Limits
max_abs | 1000000000000 |
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
Length or diameter that is not strictly positive is rejected with invalid_input instead of a silent NaN.
What the Greenhill formula computes and how to read one turn per inch
The result is reported as one turn per T inches: a twist_rate of ten means the rifling completes one revolution every ten inches of barrel, often written 1:10 on a barrel stamp. This is an empirical stability estimate, not a computational-fluid-dynamics model of yaw, not Miller's twist rule, and not a prediction of group size. It assumes the projectile is approximately lead-like, with specific gravity near 10.9, and that you have already converted millimetres to inches. The arithmetic is pure and deterministic: identical inputs always produce the same rounded JSON on the Worker and in the browser.
How to enter length and diameter and what the response contains
Both values must be strictly positive: zero length would divide by zero, zero diameter would collapse the numerator, and a negative dimension is not a physical bullet. If your source lists millimetres, divide by 25.4 to obtain inches before calling. Failed validation is never charged. POST a JSON body with two required finite numbers: length, the bullet length in inches, and diameter, the bullet diameter in inches. Aliases bullet_length, l, and length_in are accepted for length; bullet_diameter, d, caliber, and diameter_in for diameter, so spreadsheets and typed forms can reuse the same contract. Each field may arrive as a JSON number or as a strict decimal string, including scientific notation; hex prefixes, embedded spaces, empty strings, and non-finite values fail with invalid_input naming the field. Absolute values must stay inside the published ceiling so the quotient remains finite in IEEE double precision on the Worker and in the browser. On success the response echoes rounded length and diameter, reports the Greenhill constant 150, sets twist_rate to T in inches per turn, unit to in/turn, display to a 1:T string, formula to T equals C times D squared over L, a filled equation, and the method tag greenhill. A successful request costs $0.002.
Where a Greenhill twist figure belongs — and where it does not
Reloaders and rifle builders use a twist-rate estimate when choosing a barrel for a new projectile, checking whether a published 1:7, 1:8, 1:10, or 1:12 stamp is in the same neighbourhood as Greenhill for a measured ogive-to-base length, or comparing two bullets of the same caliber but different bearing length. Physics and ballistics courses use the identity as a first numerical check: given D and L in inches, what is T, and does doubling length really halve the inches-per-turn figure at fixed diameter. Prefer it when you already have length and diameter in inches and want the classic Greenhill one-turn-per-inch figure. Keep requests inside the documented limits, pin the rounded twist_rate in tests, and remember that very long VLD bullets, very high velocity, or non-lead cores can move the twist that actually flies well away from C equals 150. On this page the work runs entirely in your browser; through the API each successful lookup costs $0.002, invalid_input is not billed, and nothing is stored after the response returns.
Integration use cases
Cartridge-table fixtures and CI
Pin deterministic twist_rate goldens for a caliber table or a ballistics library without re-implementing C·D²/L in every service.
Technical questions
What does the barrel twist-rate calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.