Thermal resistance stack calculator
This thermal resistance stack calculator follows heat from a semiconductor junction through its package, interface, heat sink, and finally into ambient air.
Run — free
Enter junction-to-case, case-to-sink, and sink-to-ambient thermal resistance in °C/W together with steady-state power in watts. The calculator returns the total path resistance and the temperature rise across every segment. Add an ambient temperature when you also want estimated heat-sink, case, and junction temperatures for a quick thermal design check.
Build the complete junction-to-ambient path
A data sheet often gives junction-to-case resistance, while a thermal interface material or mounting test supplies case-to-sink resistance and a heat-sink specification supplies sink-to-ambient resistance. These three values describe consecutive sections of one heat-flow path, so they add directly when the same steady heat rate passes through each section. Enter every resistance in degrees Celsius per watt and power in watts. The calculator reports their sum as total thermal resistance in degrees Celsius per watt. It also multiplies each section by power, making the contribution of the package, interface, and heat sink visible instead of hiding everything inside one total. This separation is valuable when deciding where an improvement will matter. Reducing an already tiny interface resistance may barely change junction temperature if sink-to-ambient resistance dominates. Conversely, an excellent heat sink cannot compensate for an unexpectedly poor package or mounting interface. Use values that describe the same physical assembly and operating conditions; mixing a natural-convection heat-sink rating with forced-air assumptions elsewhere does not represent a coherent stack.
Interpret temperature rise and node temperatures
For steady one-dimensional heat flow, temperature rise equals dissipated power multiplied by thermal resistance: ΔT = P × Rθ. The total rise is therefore power times the sum of junction-to-case, case-to-sink, and sink-to-ambient resistance. The individual rises show how much temperature is lost across each part of the path. If ambient temperature is supplied, the calculator works back through the stack: sink temperature equals ambient plus the sink-to-ambient rise, case temperature adds the case-to-sink rise, and junction temperature adds the junction-to-case rise. This is an equilibrium estimate, not a warm-up curve. It assumes constant power, stable ambient conditions, and resistance values appropriate to the installation. It does not include thermal capacitance, transient impedance curves, parallel heat paths through leads or a circuit board, temperature-dependent power, radiation changes, or airflow variation. Treat the computed junction temperature as a design estimate and preserve margin below the manufacturer’s maximum rating, especially when resistance tolerances and worst-case ambient conditions are uncertain.
Choose inputs and check design margin
Use dissipated heat rather than electrical input power unless nearly all input power becomes heat in the modeled device. For a regulator, for example, estimate dissipation from its voltage drop and load current plus relevant quiescent losses. Obtain junction-to-case resistance for the correct package and heat-flow direction. Case-to-sink resistance must reflect the actual pad, grease, insulator, mounting pressure, contact area, and fastener arrangement. Sink-to-ambient resistance depends strongly on orientation, enclosure, altitude, airflow, nearby surfaces, and whether the published figure assumes natural or forced convection. Run a nominal case first, then repeat with maximum power, maximum ambient temperature, and conservative resistance values. Compare the resulting junction temperature with the data-sheet operating limit and any reliability target your project imposes. The API price is $0.002 per request, while the browser calculation can support quick iteration during component selection. Zero values are accepted because they can represent an idealized segment, but negative resistance or power is rejected as invalid input rather than producing a physically misleading result.
What you can do with it
Size a heat sink
Combine package and interface resistance with candidate heat-sink ratings to estimate junction temperature at the intended power.
Compare interface materials
Change case-to-sink resistance while keeping the rest of the stack fixed to see its direct effect on temperature rise.
Check a worst-case thermal budget
Use maximum power, hot ambient temperature, and conservative resistance values to evaluate design margin.
FAQ
What formula does the calculator use?
It uses RθJA,total = RθJC + RθCS + RθSA and ΔT = P × RθJA,total. Individual segment rises use the same power multiplied by each segment resistance.
Which units should I enter?
Enter every thermal resistance in °C/W and power in watts. Temperature differences in °C and K have the same magnitude, so K/W resistance values are numerically equivalent.
Is ambient temperature required?
No. Total resistance and temperature rise require only the three resistances and power. Ambient temperature is optional and enables absolute sink, case, and junction temperature estimates.
Does this model startup or pulsed loads?
No. It is a steady-state resistance model. Use manufacturer transient thermal impedance curves or a thermal RC model for pulses and warm-up behavior.
Why might a measured temperature differ?
Published resistance can depend on mounting, airflow, orientation, board layout, and measurement method. Contact quality, parallel heat paths, and changing power also affect real hardware.
How much does an API calculation cost?
Each API request costs $0.002. The calculation is deterministic and does not call external services.
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/elec/thermal-resistance-stack \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"junction_to_case":1.2,"case_to_sink":0.3,"sink_to_ambient":4.5,"power":18}'const res = await fetch("https://api.kit.forhosting.com/elec/thermal-resistance-stack", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"junction_to_case": 1.2,
"case_to_sink": 0.3,
"sink_to_ambient": 4.5,
"power": 18
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/elec/thermal-resistance-stack",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"junction_to_case": 1.2,
"case_to_sink": 0.3,
"sink_to_ambient": 4.5,
"power": 18
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/elec/thermal-resistance-stack", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"junction_to_case":1.2,"case_to_sink":0.3,"sink_to_ambient":4.5,"power":18}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"junction_to_case":1.2,"case_to_sink":0.3,"sink_to_ambient":4.5,"power":18}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/elec/thermal-resistance-stack", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"junction_to_case": 1.2,
"case_to_sink": 0.3,
"sink_to_ambient": 4.5,
"power": 18
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "elec.thermal_resistance_stack",
"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. |