Staircase step calculator
A 2800 mm floor-to-floor rise with a 180 mm target riser becomes 16 equal risers of exactly 175 mm and 15 treads, with tread depth and a total run of 4375 mm worked out too. Check the layout before cutting stringers. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Total rise
- 2,800
- Target riser
- 180
- Step count
- 16
- Exact riser
- 175
- Tread count
- 15
- Tread run
- 291.6666666667
Planning a straight flight between two floors starts with geometry, not guesswork about how many boards you need. This staircase step calculator turns total vertical rise and a preferred riser height into an integer step count, an exact equal riser that sums to the full height, and a tread run so you can check going depth and total horizontal length before you cut stringers or order treads. When you know the available run, pass total run and each tread is derived from that span; when you only know rise and a comfortable riser target, the engine applies a unit-agnostic comfort proportion so the layout stays usable in millimetres, centimetres or inches. Non-positive total rise fails with a clear invalid input error so takeoff forms and renovation apps can validate before a purchase order.
Measure total rise and choose a target riser in one unit system
Total rise is the finished floor-to-floor (or landing-to-landing) vertical distance the flight must climb. Measure from the top of the lower finished surface to the top of the upper finished surface after you know floor finishes, or adjust the design rise if finishes will change later. Express total rise and the preferred riser height in the same linear unit—millimetres with millimetres, inches with inches—because the calculator never converts systems.
A typical residential target riser sits near one hundred seventy to one hundred ninety millimetres, or about seven to seven and three-quarters inches, but your local code and comfort preference set the real target. Non-positive target riser is likewise rejected so the engine never divides by an invalid preferred height. If plans list only storey height, confirm whether that figure already includes floor build-up before you lock the step count.
How step count, exact riser, tread count and tread run are computed
The engine first chooses an integer step count equal to the rounded ratio of total rise over target riser, with a floor of one so a tiny rise still yields a single riser. Exact riser is then total rise divided by that count, so every riser is equal and the sum matches the measured height without leftover millimetres. Tread count is step count minus one for a straight flight that lands on the upper floor without an extra tread at the top, but never less than one.
When total run is omitted, tread run uses the comfort proportion five-thirds times the exact riser, the scale-invariant ratio behind the familiar three-hundred millimetre going with a one-hundred-eighty millimetre riser, so millimetre and inch users get the same relative geometry.
What you can do with it
Home renovation and loft conversions
Homeowners enter floor-to-floor rise and a comfortable riser target to learn how many steps they need and what exact riser and tread depths the flight will use before ordering timber.
Contractor takeoff and stringer layouts
Estimating tools convert measured rise into equal risers and tread goings for straight flights, optionally fixing total run when the stairwell width is already set on plan.
FAQ
What happens if total rise is zero or negative?
Total rise must be strictly positive; a non-positive total rise cannot define a staircase and is not charged.
Is the staircase step calculator free?
The browser tool runs free on your device.
What units should I use?
Any consistent linear system. Mixing inches for rise with millimetres for the target will produce wrong results.
Why is there one tread fewer than risers?
On a straight flight that lands on the upper floor, the top step is the floor itself. The calculator therefore counts treads as the number of steps minus one, and never fewer than one tread.
How is the tread depth found if I don't know the available run?
A comfort proportion is used: each tread is five-thirds of the exact riser, the same ratio as a 300 mm going with a 180 mm riser. If walls or landings fix the run, enter it and it is shared equally between the treads.
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/home/staircase-steps \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"total_rise":2800,"target_riser":180}'const res = await fetch("https://api.kit.forhosting.com/home/staircase-steps", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"total_rise": 2800,
"target_riser": 180
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/home/staircase-steps",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"total_rise": 2800,
"target_riser": 180
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/home/staircase-steps", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"total_rise":2800,"target_riser":180}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"total_rise":2800,"target_riser":180}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/home/staircase-steps", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"total_rise": 2800,
"target_riser": 180
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "home.staircase_steps",
"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
Measure total rise and choose a target riser in one unit system
Send total_rise as a strictly positive finite number; aliases rise, height, total_height and floor_height map to the same field for forms that use shorter labels. Send target_riser the same way with aliases riser, target_rise, preferred_riser and riser_height. Zero or negative total rise raises invalid_input and is not charged, because a non-positive rise cannot define a staircase. Extremely small or huge values outside the published stability range also fail so floating-point results stay meaningful on a Worker isolate.
How step count, exact riser, tread count and tread run are computed
When optional total_run is provided—aliases run, horizontal_run, going_total and flight_run—each tread run is total run divided by tread count, which is the right path when the available horizontal span is fixed by walls or landings. The response echoes inputs, reports step_count, exact_riser, tread_count, tread_run and total_run, labels tread_method as from_total_run or comfort_proportion, and sets method to staircase_steps for stable branching. Identical inputs always produce identical JSON because the path is pure arithmetic with no network, random seed or wall clock. This product does not enforce code maxima or headroom; treat the numbers as a layout starting point and verify against your jurisdiction before construction.
API usage, pricing, takeoff workflows and practical limits
Call the free in-browser staircase step calculator for quick home estimates, contractor whiteboards and classroom statics demos without opening a spreadsheet. Remember that finished floor thickness, nosing projection and landing details can change effective rise and going even when the structural numbers look settled—adjust inputs to match the geometry you will actually build. Send a JSON body with required total_rise and target_riser, plus optional total_run when the horizontal span of the flight is known. Use the prepaid API when a renovation app, takeoff tool, configurator or property pipeline needs a stable contract under KIT balance at $0.002 per successful item; validation failures never consume balance after the engine rejects the request. Pair this endpoint with unit converters when drawings mix millimetres with inches, or with material calculators when the next step is tread volume or stringer stock length. Authors shipping SDKs can map step_count and exact_riser into cut lists while showing tread_run, total_run and formula as explanatory detail for the homeowner or site supervisor reviewing the layout.
Integration use cases
Renovation apps and design configurators
Mobile and web apps recompute step count and tread run as users change rise or preferred riser, using the same deterministic API contract for quotes and material lists.
Technical questions
How does the staircase step calculator choose the number of steps?
It sets step_count to max(1, round(total_rise / target_riser)), then sets exact_riser to total_rise / step_count so equal risers sum to the full height. The method label is always staircase_steps.
How is tread run calculated if I do not know total run?
When total_run is omitted, each tread uses the comfort proportion exact_riser × (5/3), the unit-agnostic ratio behind a classic 180 mm riser with a 300 mm going. When total_run is set, tread_run is total_run divided by tread_count.