Runway wind components calculator
The runway wind components calculator converts a reported wind into the parts aligned with and perpendicular to an aircraft runway heading.
Run — free
Enter wind speed, the direction the wind comes from, and the runway heading using one consistent north reference. The result identifies headwind or tailwind, gives the crosswind magnitude, and states whether that crosswind comes from the left or right. It is useful for checking calculations, training scenarios, and structured flight-planning workflows, while leaving operational limits and go/no-go decisions to approved aircraft documentation and qualified flight crew.
Enter directions that use the same reference
Start with the reported wind speed and wind direction, then enter the heading of the runway in use. Aviation wind direction describes where the air comes from, not where it travels. A wind reported from 240 degrees and an aircraft aligned on 270 degrees therefore arrives from the aircraft's left-front quarter. Wind direction and runway heading must also share the same reference: compare magnetic wind with a magnetic runway heading, or true wind with a true heading. Mixing a true forecast direction with a magnetic runway heading can shift the calculated angle by local magnetic variation and make an otherwise precise result misleading. Values of 0 and 360 both represent north and are accepted. Runway designators are rounded to the nearest ten degrees, so use the actual published runway heading when accuracy matters rather than simply multiplying the painted runway number by ten. Select the speed unit that matches the entered observation; every component is returned in that same unit, with no hidden conversion. These conventions make the three required measurements internally consistent before any trigonometry is applied.
Read the headwind, tailwind, and crosswind result
The calculator subtracts runway heading from wind direction and normalizes the difference to the shortest signed angle from minus 180 through 180 degrees. It projects wind speed onto the runway using cosine and across the runway using sine. A positive along-runway projection is reported as headwind; a negative projection is converted to a positive tailwind magnitude. Only one of those two magnitudes is nonzero for a given calculation. The crosswind component is shown as a non-negative magnitude for easy comparison with an operating limit, while the signed crosswind and the crosswind-side label preserve direction. A positive signed value means wind from the right, and a negative value means wind from the left. Near zero, the result is classified as none to prevent floating-point residue from describing a tiny false component. For example, wind exactly aligned with the runway produces the full speed as headwind and zero crosswind. Wind from exactly ninety degrees to either side produces no longitudinal component and the full speed as crosswind. Returned values are rounded to six decimal places for stable automated use.
Use the calculation within safe operational planning
Treat the output as a transparent mathematical decomposition, not as a dispatch decision or substitute for an aircraft flight manual. Published limitations may distinguish demonstrated crosswind values from hard limits, may vary with runway condition, and may impose separate tailwind limits. Gusts also matter: crews commonly assess both steady wind and gust velocity, which can be done as separate calculations using the same direction when appropriate. Runway headings, wind observations, and forecasts can change, so confirm that the inputs describe the runway and time period actually being considered. The result does not model terrain, buildings, wind shear, variability, braking action, pilot qualification, or air traffic control instructions. For training, it provides a repeatable way to verify wind-triangle exercises. For software, deterministic output makes it suitable for test fixtures, planning displays, or comparisons against independently implemented formulas. API requests cost $0.002, while browser calculations can run locally. In every operational setting, compare the components with current approved documentation, applicable procedures, and authoritative weather information before acting.
What you can do with it
Preflight runway comparison
Compare the same reported wind against candidate runway headings to see how the longitudinal and crosswind components change.
Pilot training exercises
Check manual wind-component calculations and clearly distinguish wind from the left from wind from the right.
Deterministic planning software
Add reproducible component calculations to a planning workflow without network calls, randomness, or time-dependent output.
FAQ
Does wind direction mean from or toward?
It means the direction from which the wind blows, following the standard aviation reporting convention.
What does a positive signed crosswind mean?
A positive signed crosswind means the wind comes from the right side of the aircraft; a negative value means it comes from the left.
Can I enter a runway number instead of a heading?
Enter a heading in degrees. A runway designator is rounded and may not equal the precise published heading needed for an accurate calculation.
Can I use knots, miles per hour, or meters per second?
Yes. Choose kt, mph, m/s, or km/h. The calculator returns every wind component in the selected input unit.
How much does the API calculation cost?
Each API request costs $0.002. The browser version can be used free on this page.
Does this determine whether a takeoff or landing is safe?
No. It only resolves the wind mathematically. Use current approved aircraft documentation, procedures, weather, and qualified operational judgment.
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/travel/runway-wind-components \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"wind_speed":20,"wind_direction":240,"runway_heading":270}'const res = await fetch("https://api.kit.forhosting.com/travel/runway-wind-components", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"wind_speed": 20,
"wind_direction": 240,
"runway_heading": 270
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel/runway-wind-components",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"wind_speed": 20,
"wind_direction": 240,
"runway_heading": 270
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel/runway-wind-components", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"wind_speed":20,"wind_direction":240,"runway_heading":270}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"wind_speed":20,"wind_direction":240,"runway_heading":270}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel/runway-wind-components", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"wind_speed": 20,
"wind_direction": 240,
"runway_heading": 270
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel.runway_wind_components",
"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. |