Birdsmouth cut calculator
A 5.5-deep rafter at a 6/12 pitch on a 3.5-wide plate needs a seat length of 3.9131 and a cut depth of 1.5652, leaving 3.9348 of stock. Use one unit for all three sizes. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Rafter width
- 5.5
- Roof pitch
- 6
- Wall plate width
- 3.5
- Pitch label
- 6/12 length
- Pitch angle deg
- 26.5651
- Unit rise
- 0.5
- Pitch factor
- 1.118
This birdsmouth cut calculator returns the seat length and cut depth for a common rafter once you know the rafter stock depth, the roof pitch as rise per twelve units of run, and the wall plate width the notch must sit on. The engine forms the pitch angle from the rise-over-twelve ratio, builds the pitch factor as the square root of one plus the unit-rise squared, then derives the along-rafter seat length as plate width over cosine of the pitch angle and the cut depth as plate width times sine of that angle. A classic check uses a five-and-a-half unit deep rafter, a six-twelve pitch, and a three-and-a-half unit plate, which yields a seat length near three point nine units and a cut depth near one point five six units in the same linear measure. All three inputs must share one linear unit—inches, millimetres, or centimetres—because the engine never converts units for you. The work is pure deterministic arithmetic with no network calls, no sampling, and no date-dependent shortcuts.
Where birdsmouth layout fits in DIY, trade quotes, and software
Homeowners meet this calculation when a shed, porch, or garage roof needs a clean notch before the weekend install, or when a materials quote must not under-order deeper stock after the plate and pitch are fixed by the design. Estimators embed the contract in take-off tools so a schedule of rafter depth, pitch, and plate width becomes seat and cut values without a spreadsheet full of hidden cells and mixed units.
Product and education tools show learners why a steeper pitch deepens the notch for the same plate and why a wider plate demands more of the rafter depth at any given slope. Pair it with rafter-length or roof-pitch helpers when you are building a small lab of free, deterministic framing calculators, and keep site judgement for hangers, ridge thickness, and code spans that your elevation requires beyond the pure birdsmouth geometry.
What you can do with it
DIY rafter notch layout
Convert rafter depth, roof pitch, and wall plate width into seat length and cut depth before you mark the framing square.
Trade quotes and framing take-offs
Turn stock, pitch, and plate schedules into reproducible birdsmouth dimensions for written framing quotes.
FAQ
What does the birdsmouth cut calculator cost?
It is free in your browser on this page.
What happens if roof pitch is zero or negative?
Roof pitch must be a positive number (rise per 12 units of run).
Does this tool return common rafter length from span?
No. It only computes birdsmouth seat length and cut depth from rafter width, pitch, and wall plate width.
What units should I use for the birdsmouth cut?
Any single linear unit: inches, millimetres or centimetres. Rafter depth and plate width must share that unit, the pitch is rise per 12 of run, and the results come back in the same unit, with no conversion.
How do I know the notch is not too deep?
Check the remaining depth and the ratio of cut depth to rafter depth. In the 6/12 example the cut takes 1.5652 of a 5.5 rafter, a ratio of 0.2846, so you can compare it with the one-third rule of thumb.
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/build/birdsmouth-cut \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"rafter_width":5.5,"roof_pitch":6,"wall_plate_width":3.5}'const res = await fetch("https://api.kit.forhosting.com/build/birdsmouth-cut", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"rafter_width": 5.5,
"roof_pitch": 6,
"wall_plate_width": 3.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/build/birdsmouth-cut",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"rafter_width": 5.5,
"roof_pitch": 6,
"wall_plate_width": 3.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/build/birdsmouth-cut", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"rafter_width":5.5,"roof_pitch":6,"wall_plate_width":3.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"rafter_width":5.5,"roof_pitch":6,"wall_plate_width":3.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/build/birdsmouth-cut", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"rafter_width": 5.5,
"roof_pitch": 6,
"wall_plate_width": 3.5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "build.birdsmouth_cut",
"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 a birdsmouth cut is and what the response contains
A birdsmouth cut, also called a birds-mouth joint, is the right-angled notch cut into the underside of a rafter so the member sits flat on the wall plate while the tail continues past the eave. The notch has a level seat that bears on the top of the plate and a plumb heel that meets the outer face of the plate. There is no lumber SKU catalogue, no common-rafter length, and no code span table baked into the core number: you get geometric cut dimensions so you can mark the square, add waste, and check the one-third depth rule of thumb after the pure notch is known. This calculator takes rafter_width as the stock depth measured square across the board, roof_pitch as the rise component of an X-over-twelve pitch, and wall_plate_width as the horizontal plate bearing width. It returns the parsed inputs, a pitch_label such as six slash twelve, the pitch angle in degrees, the unit rise and pitch factor, the horizontal_seat equal to the plate width, the heel_height of the plumb cut, the along-rafter seat_length, the cut_depth measured perpendicular into the rafter from the bottom edge, the remaining_depth of stock after the notch, a depth_ratio of cut to rafter width, a unit tag, the precision used, a method tag, and a short formula string you can audit. Rejected cases include missing fields, non-finite values, magnitudes above the supported ceiling, a non-positive rafter width, a roof pitch that is not a positive number, a non-positive plate width, and a combination that would cut through the entire rafter depth.
How pitch, plate width, and precision stay reproducible
Prefer rafter_width for the stock depth, with aliases rafter_depth, depth, stock_width, and D so forms and query strings can reuse the same contract. Roof_pitch accepts roof_pitch plus aliases pitch, rise, pitch_rise, and X, always as the rise component of an X-over-twelve pitch, never as degrees alone and never as a unitless slope without the twelve base. Wall_plate_width accepts wall_plate_width plus plate_width, plate, top_plate, and W; it must be strictly positive so a real seat can be defined. Optional precision, with aliases decimals and dp, chooses decimal places for every numeric field in the response, defaulting to four and capped at fifteen so JSON goldens stay stable. Computation forms unit_rise as pitch divided by twelve, builds pitch_factor as the square root of one plus unit-rise squared, takes sine as unit_rise over that factor and cosine as one over that factor, sets seat_length to plate width divided by cosine, and sets cut_depth to plate width times sine. Remaining depth is rafter width minus cut depth, and depth_ratio is cut depth over rafter width so you can compare against a site rule of thumb without re-deriving trigonometry. Pair the free browser run on this page with the priced API when you need the identical mathematical result inside an automated pipeline.
Where birdsmouth layout fits in DIY, trade quotes, and software
Framers and small contractors use the same numbers to mark the framing square on site, then compare remaining_depth against local practice and the common one-third rule before they commit the saw. On this page the work runs entirely in your browser; through the API each successful lookup costs $0.002, failed validation is not charged, and nothing is stored after the response returns. That split — free interactive exploration and a priced, identical API — matches the rest of the KIT tier-A catalog and lets you move from a phone check on the plate to an automated pipeline without changing the mathematical result.
Integration use cases
Estimating software and CI fixtures
Generate deterministic seat_length and cut_depth values for unit tests, property checks, and automated take-off pipelines.
Technical questions
How are seat length and cut depth defined?
With θ = atan(pitch/12), seat_length = wall_plate_width / cos(θ) along the rafter edge, and cut_depth = wall_plate_width × sin(θ) perpendicular into the stock. Heel height is wall_plate_width × (pitch/12).
What if the cut would go through the whole rafter?
When cut_depth is greater than or equal to rafter_width, the request is rejected with invalid_input so you can choose deeper stock or a narrower plate.