Boards for Panel Width Calculator
Planning a tabletop, cabinet side, shelf, or workbench panel starts with a deceptively simple question: how many boards will span the finished width?
Run — free
This calculator answers it while accounting for the width removed when stock edges are jointed or ripped and for extra material left before the final trim. Enter every dimension in the same unit—such as inches, millimetres, or centimetres—and receive the required board count, usable width per board, planned glue-up width, and remaining excess.
Measure the stock you will actually glue
Begin with the real width of the boards selected for the panel, not merely the size printed on a store label. A nominal board often measures less than its trade name suggests, and rough lumber may change width after flattening and straightening. Measure several pieces after they have acclimated to the shop, then use a conservative board width that all chosen pieces can provide. Enter the target width as the panel's final cross-grain dimension. All values must use one consistent unit; the arithmetic works equally well in inches, millimetres, or centimetres. If the boards vary substantially, this calculator gives a purchasing estimate based on a common usable width rather than a cutting map for individually sized pieces. Choose the narrowest realistic width when you need a cautious count. That avoids planning around a wider board that later reveals wane, checking, or an edge defect. The result is a whole number because a partial stock board still means obtaining and preparing another board for the glue-up.
Allow for jointed edges and final trimming
The edge-loss input represents the total width removed from each board while preparing both glue edges. For example, if jointing and cleanup together reduce every board by one eighth of an inch, enter that full one-eighth value rather than entering it once per edge. The calculator subtracts this loss from every stock board to find its usable contribution. Trim allowance works differently: it is added once to the desired panel width. It reserves extra material across the completed glue-up so the panel can be squared and brought to exact size after the adhesive cures. These allowances should reflect the condition of the lumber and the accuracy of the available machinery. Straight, surfaced stock may need little edge cleanup, while rough or bowed stock may need more. Avoid inventing a large safety factor without checking the boards, because excessive allowance can unnecessarily increase the count. The calculator exposes each intermediate width so you can review the assumptions instead of trusting an unexplained total.
Interpret the count before milling lumber
The board count is the smallest whole number whose combined usable width reaches the target plus the trim allowance. Planned panel width is the estimated width immediately after the prepared boards are assembled, and excess width is what remains beyond the required glue-up width. That excess is useful for deciding whether the outer boards can be ripped narrower, whether grain patterns can be shifted, or whether a slightly wider finished panel is practical. The calculation addresses width only. It does not estimate board feet, panel length, thickness lost during flattening, kerf from crosscuts, defects along the length, moisture movement, or spare material for mistakes. Before cutting, confirm that every counted board is long and sound enough for the project and arrange the faces for grain and colour. If one piece cannot supply the assumed usable width along the full panel length, recalculate with a smaller common board width or obtain another board. Treat the result as a disciplined glue-up plan, then verify it against the actual stock laid out on the bench.
What you can do with it
Plan a solid-wood tabletop
Estimate how many prepared boards will reach the tabletop width while preserving material for a clean final trim.
Buy lumber for cabinet panels
Turn measured stock width and expected jointing loss into a practical whole-board purchasing count.
Compare milling strategies
Adjust edge loss to see whether heavier jointing changes the required count or only reduces the remaining excess.
FAQ
What does the calculation cost through the API?
Each API request costs $0.002. The browser calculation is also available directly on this page.
Can I enter millimetres instead of inches?
Yes. Use any unit, but enter target width, board width, edge loss, and trim allowance in that same unit.
Is edge loss entered for one edge or both edges?
Enter the total width expected to be removed from each board after preparing both of its glue edges.
Why does the result round up?
Only complete boards can be selected and milled, so any fractional requirement means one additional board is needed.
Does this calculate board feet or lumber volume?
No. It calculates the number of boards needed across a panel's width and does not account for length or thickness.
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/hobby/craft-panel-board-count \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"target_width":30,"board_width":5.5}'const res = await fetch("https://api.kit.forhosting.com/hobby/craft-panel-board-count", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"target_width": 30,
"board_width": 5.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/craft-panel-board-count",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"target_width": 30,
"board_width": 5.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/craft-panel-board-count", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"target_width":30,"board_width":5.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"target_width":30,"board_width":5.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/craft-panel-board-count", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"target_width": 30,
"board_width": 5.5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.craft_panel_board_count",
"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. |