Standard (Under 40)
Vet Rider (40+) – Focus on Comfort
Recommended Setup
Fork Spring Rate:–
Shock Spring Rate:–
Target Race Sag (Rider on Bike):–
Target Static Sag (Bike Only):–
Note: Results are displayed in kg/mm (industry standard). To convert to N/mm, multiply by roughly 9.8. To convert to lbs/in, multiply by 56.
Why Correct Spring Rate Matters
In motocross and enduro riding, the suspension springs support the weight of the bike and the rider. If your springs are incorrect, no amount of "clicker" adjustment (compression or rebound) will fix the handling issues.
The Golden Rule: Springs hold the bike up; damping (valving) controls how it moves.
Symptoms of Incorrect Spring Rates
Too Soft: The bike sits too low in the stroke (chopper stance). It bottoms out easily on jumps and feels unstable in corners because the front end pushes. The bike may feel harsh because it is riding in the stiffest part of the linkage curve.
Too Stiff: The bike rides too high. It deflects off rocks and braking bumps rather than absorbing them. Cornering is difficult because the suspension doesn't compress enough to settle into the turn.
Understanding Sag
Once you have the correct springs installed, setting your "Sag" is the most critical maintenance task for handling.
1. Race Sag (Rider Sag)
This is the amount the rear suspension compresses with the rider on board, wearing full gear. For most modern full-size bikes (125cc-450cc), the target is typically 100mm to 105mm.
2. Static Sag (Free Sag)
This is the measurement of how much the bike compresses under its own weight (without the rider). This measurement tells you if your spring rate is correct.
If you set your Race Sag to 105mm, but your Static Sag is less than 30mm, your spring is too soft (you had to add too much preload to hold your weight up).
If you set your Race Sag to 105mm, but your Static Sag is more than 45mm, your spring is too stiff (the spring is barely compressed).
How to Measure
Put the bike on a stand (wheels off the ground). Measure from the axle to a fixed point on the fender. This is your Unloaded Measurement.
Take the bike off the stand. Have the rider stand on the pegs in attack position (full gear). Measure the same distance. The difference is your Race Sag.
Step off the bike. Measure the distance with just the bike's weight. The difference from the Unloaded Measurement is your Static Sag.
function calculateSpringRate() {
// 1. Get Inputs
var weightInput = document.getElementById('riderWeight').value;
var bikeType = document.getElementById('bikeType').value;
var skill = document.getElementById('skillLevel').value;
var age = document.getElementById('ageGroup').value;
// 2. Validate Input
if (!weightInput || isNaN(weightInput) || weightInput < 50) {
alert("Please enter a valid rider weight (in lbs).");
return;
}
var weight = parseFloat(weightInput);
// 3. Define Baselines
// Logic: Define a 'standard' weight for each bike, and a 'standard' spring rate.
// Then calculate the deviation.
var baseWeight = 175; // standard target weight in lbs
var baseFork = 0.48; // kg/mm
var baseShock = 5.4; // kg/mm
var sagTarget = "102mm – 105mm";
var staticTarget = "30mm – 40mm";
// Adjust baselines based on bike displacement
if (bikeType === "450") {
baseWeight = 180;
baseFork = 0.50;
baseShock = 5.6;
} else if (bikeType === "250f") {
baseWeight = 165;
baseFork = 0.46;
baseShock = 5.3;
} else if (bikeType === "250t") {
baseWeight = 170;
baseFork = 0.44;
baseShock = 5.2;
} else if (bikeType === "125") {
baseWeight = 150;
baseFork = 0.42;
baseShock = 4.8;
} else if (bikeType === "85") {
baseWeight = 110;
baseFork = 0.36; // significantly lighter
baseShock = 4.0;
sagTarget = "85mm – 95mm";
staticTarget = "20mm – 30mm";
}
// 4. Calculate Weight Deviation
// General rule:
// Fork: +/- 0.01 kg/mm per ~15-20 lbs deviation
// Shock: +/- 0.2 kg/mm per ~15-20 lbs deviation
var weightDiff = weight – baseWeight;
var steps = weightDiff / 15; // Calculate how many "steps" away from standard
// Calculate raw rates
var forkRate = baseFork + (steps * 0.012); // slightly aggressive curve
var shockRate = baseShock + (steps * 0.15); // slightly aggressive curve
// 5. Apply Modifiers for Skill/Discipline
if (skill === "trail") {
forkRate -= 0.02; // Softer for rocks/roots
shockRate -= 0.2;
} else if (skill === "intermediate") {
forkRate += 0.01;
shockRate += 0.1;
} else if (skill === "pro") {
forkRate += 0.03; // Significantly stiffer for sx/big jumps
shockRate += 0.3;
}
// 6. Apply Modifier for Age (Vet preference usually softer/plush)
if (age === "vet" && skill !== "pro") {
forkRate -= 0.01;
shockRate -= 0.1;
}
// 7. Rounding and Formatting
// Springs usually sold in steps (e.g. 0.42, 0.44, 0.46 or 5.2, 5.4, 5.6)
// We will round to nearest 0.01 for fork and 0.1 for shock for precision display
forkRate = Math.round(forkRate * 100) / 100;
shockRate = Math.round(shockRate * 10) / 10;
// Min/Max safety clamps to prevent unrealistic numbers
if (bikeType !== "85") {
if (forkRate 0.60) forkRate = 0.60;
if (shockRate 7.0) shockRate = 7.0;
}
// 8. Output Results
document.getElementById('forkResult').innerText = forkRate.toFixed(2) + " kg/mm";
document.getElementById('shockResult').innerText = shockRate.toFixed(1) + " kg/mm";
document.getElementById('sagResult').innerText = sagTarget;
document.getElementById('staticResult').innerText = staticTarget;
// Show results
var resultsDiv = document.getElementById('resultsArea');
resultsDiv.style.display = "block";
resultsDiv.classList.add("active");
}